哪个embedded式数据库在Delphi应用程序中使用?

我正在Delphi中创build一个桌面应用程序,并计划使用embedded式数据库。 我已经使用SQlite3和DISQLite3库开始了这个项目。 它的工作,但文件似乎有点轻。 我最近发现Firebird(是的,我已经离开了Windows一段时间),它似乎有一些引人注目的function和支持。

每个embedded式数据库有什么优点和缺点? 规模是重要的,以及支持和资源。 你用过什么,为什么?

我已经在FeedDemon中使用SQLite(通过DISQLite3)几个月了,我强烈推荐它 – 它已经非常快速和稳定。 正如Javier所说,图书馆的文档可能很薄弱,但SQLite本身的文档非常好。

我正在使用Firebird 2.1 Embedded,我对此感到非常满意。我喜欢数据库大小几乎是无限的(用大于4 GB的数据库进行testing并且工作正常),并且数据库文件与Firebird服务器兼容我可以使用标准的工具进行数据库pipe理和检查。 分发包括在您的exe文件夹中删除几个文件。

不支持从多个程序同时访问,但同时访问多个线程(只要您确保在任何特定时刻只有一个“连接”操作正在进行)。

我已经使用了很多项目(但是从C / C ++和Objective-C)SQlite3。 这是非常小的 – 没有任何依赖 – 数据库是在一个单一的文件。

这是Mac开发人员的首选,因为它直接受CoreData和iPhone的支持 – 所以有一个很大的用户群(更不用说所有的其他用户了)。

让我们看看,快速比较:

SQLite的:

  • dynamicinput数据库
  • 跨平台的文件
  • 在Windows,Linux,Mac等上运行
  • 公共区域
  • 支持交易
  • 依靠文件系统安全,不包括自己的安全

embedded的火鸟:

  • 在数据库中强大的input
    • 并不是所有的SQL数据types都被支持
  • 跨平台的文件
    • Firebirdembedded式只能在Windows上运行
    • Firebirdembedded的文件格式与完整的服务器版本相同
    • Firebirdembedded的文件可以复制到非Windows服务器上使用
  • 可以根据修改后的MPL获得(“我们的产品是我们的产品,必须保持自由,您的产品是您的产品,您无需发布)”)
  • 支持事务,触发器等

embedded的MySQL:

  • SQLfunction的支持取决于文件格式
  • (IIRC)跨平台文件
  • GPL,除非您支付版税
  • 在Windows,Linux,Mac上运行
  • 非常受开源人群的欢迎

即使embedded式数据库也有其优点和缺点。 你需要权衡这些优势和劣势与你正在做的决定。

我在一些项目上使用了DBISAM 。 它完全embedded,甚至不需要外部DLL。 不像你列出的是商业。 许多伟大的function,但很好的文件和支持。 有一个inheritance人 ,但我还没有尝试过。

embeddedFirebird是我们的第一select,因为无需更改代码,具有embedded式数据库的单用户Delphi应用程序可以迁移到基于多用户服务器的部署,而不会牺牲任何高端function(例如存储过程,触发器,视图,等等。)。 而且它是一个真正的免费数据库,并没有GPL你的代码在这个过程中。

强烈build议在使用数据库和Delphi时使用AnyDAC – 然后您可以select无缝地定位FB或SQLite。

我的首选是embedded式应用程序的FB。 汤姆

我使用Sybase的Advantage Database Server,但我也是研发经理,所以这个post是有偏见的。 🙂

我们有用于WIN32 VCL和VCL.NET的原生Delphi TTable和TQuery组件。 除了SQL支持以外,直接访问表使Advantage在许多其他Delphi产品中独一无二。 Advantage支持大型表(仅受限于logging数量,20亿),并且拥有免费的本地引擎,这对于开发个人电脑以及不需要客户端/服务器function的小型客户站点来说都不错。 使用单个连接属性切换到客户端/服务器,不做其他更改。

我们有很多的客户端,所以访问Delphi以外的数据也很容易(.NET数据提供者,ODBC,OLE DB,PHP,Perl,JDBC等)。

主要产品网站: http : //www.advantagedatabase.com开发人员的网站: http : //devzone.advantagedatabase.com

这真的取决于你需要什么。 对于单用户应用程序,Firebird Embedded或SQLite可能是最好的select(价格是正确的)。 另一方面,如果你需要支持大量的多个用户,你应该使用常规的Firebird而不是Embedded版本(服务器安装简单,所以你在这里不会有太多问题)。

如果你需要中间的东西,对于一个适中的多用户应用程序,其中一个平面数据库会更好。 我发现ComponentAce的绝对数据库比我的需求更好的select比DBISAM,NexusDB或VistaDB。

它留下了相对较小的空间(没有DLL),它是一个单一的文件数据库(对我来说是必须的),支持Unicode,BLOB压缩,encryption和技术限制似乎给平面数据库留下了深刻的印象。 而且,当我需要的时候,支持很less。

对于缺点,我注意到它不支持嵌套事务,但除此之外,我没有任何问题。

至于大小,没有什么比击败SQLite。

当你提到缺less文档时,我想这是DISQLite3的doc。 SQLite文档相当完整

看看NexusDB。 过去使用得非常成功。

(embedded式)firebird的问题是,数据库不能驻留在networking驱动器上。 此外,只读驱动器(CD / DVD)上的数据库很难实现。

有关这些限制的一些窍门,请参阅Delphi Wiki: http : //delphi.wikia.com/wiki/Firebird_tipps

NexusDB提供从embedded式到完整客户端/服务器/远程的全套产品。 也相信SQL2003兼容。 我在一些项目上使用它,到目前为止我感到非常高兴,而且它可以在如此广泛的“规模”下工作,这是一个很大的优势(不必为扩展的应用程序学习另一个数据库,等等)。

看看这个embedded式数据库的比较: http : //sql-db.cz.cc/ ,这可能会有所帮助。 大多数上述产品在那里介绍:Advantage,DBISAM,Firebird,MS SQL Server等等:Accuracer,Apollo,ElevateDB,NexusDB,TurboDB。

我偏爱Component Ace的绝对数据库。 虽然商业产品($),它坚实,易于使用,占地面积小,有据可查。 如果你正在寻找一个庞大的多用户应用程序,这不是一条可行的路线,但是如果你的多用户需求很轻(或者不存在),这是一个可靠的select。

我正在使用SQL Server Express和ADO组件。 很好用。 您可以使用命令行运行SQL Server Express安装来隐藏用户的复杂性。 你也可以分发一个按文件名加载的数据库。 有数百万的SQL服务器用户,所以很容易find任何问题的解决scheme,在intertubes 🙂

如果embedded是绝对必要的,看看DBISAM。

我做了一个networkingsearch,为我的Delphi应用程序find一个快速的数据库包。 我希望它完全包含在可执行文件中,不需要任何外部DLL或库。 我最初是通过AidAimfindAccuracer的。 他们发布的数据库速度有多快,甚至与其他类似的软件包进行比较以“certificate”他们的观点。

我想相信他们的说法,但我想我会searchnetworking多一点,find其他包的时间。 我很惊讶地发现在Delphi讨论论坛上有个post ,一个人问什么数据库可以使用,有14个不同的build议。 其中一位响应者做了他自己的时间比较,发现Accuracer相对于其他一些Accuracer(方便地)从他们自己的比较页面中省略了很慢。

这个post,加上我的额外后续networking研究,使我倾向于基于开源SQLite程序的产品DISQLite3 ,但增强function可以非常快速地在Delphi中工作,开销很小,并且使用基于命令的调用 -我喜欢。 它正在积极开发中,不久将有一个官方的delphi2009年版本,虽然显然目前的版本将在D2009下工作。

Adaline:DISQLite3版本2.0.0于11月17日发布,支持D2009。

我知道MS访问是一个相对垃圾分贝(并希望在这里被击落),但如果只需要小数据,它可能会有优势,如果无论如何使用MS Office。 对我来说,这是一种stored procedures数据比csv文件更灵活的方法,这是科学代码的常用方法。

你可以创build一个访问数据库从delphi代码没有使用ado和odbc驱动程序安装ms office(可能需要一个初始.accdb文件没有表复制,然后填充,我不记得这个细节。这样做。

.accdb扩展名可以更改为其他名称和文件密码保护(在一定程度上),所以如果需要,它不立即显示给用户它的访问权限。 我知道一些商业开发者做这种方法,并自己复制它。 发现安装比sqlite更容易,但也许是因为我已经在过去使用ado和访问。

kbMemTable是一个很好的候选人。 在内存中运行,快速,multithreading。 曾经是免费的。

Components4Developers

我已经在不同的场合使用了DBISAM和kbMemTable。

我喜欢DBISAM的是它有很好的function,通常很可靠。 我用它在大型数据库,全文search,只读模式,CGI和许多其他情况。

不过,与基于kbMemTable或SQLite的组件相比,它相当大。 而且每个数据库(甚至表格)都不能有单个文件 – 这取决于情况,这是一个主要的缺点。

kbMemTable很小,对于less量的数据来说非常棒。 由于它在内存中运行,当然它只能是less量的数据。

我在桌面应用程序中采用的另一个选项是使用TWriter / TReader将数据直接从/传输到我的对象层次结构中。 这是迄今为止最小的选项,并且与使用数据库相比是荒谬的。 数据文件也很小。

但是它有各种各样的缺点 – 如果你想要添加/更改字段,你必须编码版本,除非它在内存中更加复杂,根本没有多用户支持等等。

火鸟embedded式也是我们的首选。 而套件Unified Interbase v2.0也是如此。 一个伟大而稳定的解决scheme

我用过ScimoreDB。 它有它的怪癖,因为它免费提供版权,它的数据types和一些安装问题的怪癖。 这是一个C#项目。

火鸟一路。 到目前为止,2.1版本都非常稳定。

FireBird提供了扩展到多用户的机会,或者如果你需要并发(如果你的应用程序是multithreading的话)。

如果你只需要单用户访问,SQLite是无与伦比的,没有其他数据库在任何方面接近它,无论是性能,方便,SQL支持还是稳定性。

Firebird是真正的awsome,有一个小脚印,所以你可以使用embedded式,它可以向上扩大许多用户和unicode faily好我使用devart组件与delphi2009年和FIB加delphi6/7(他们的2009年版本和unicode还没有准备好,太糟糕了)

嗯,没有人推荐BDE – 我不知道为什么是这样;-)

BlackFishSQL是另一种可能性,虽然我还没有深入testing过。

我有一个数据库,我必须每20秒logging5个字段的数据10天.. 3个字段是整数,1个字段是双倍(时间)和1个字段是string[5]。

由于我的组件,我仍然使用Delphi6 srv2。 较新的delphi版本是非常糟糕的组件,我不得不花费数千美元的钱重build我的组件库。 因此,delphi 6仍然是最好的真正的纪念应用程序,从来没有版本的delphis给出了许多问题。 在许多方面,如USB或comport读数等…他们释放之前的版本从来没有坐在市场上新的。

我用Delphi6设置了一个代码,在表中添加了43200条logging用于testing,因为我将在应用程序中部署该表,同时具有43200条logging。 我将在DBChart上显示所有的数据。

testing结果是在数据库下面通过insert命令填充了43200条logging

Dbisam = 34秒,
boostDb = 11秒,
绝对DB = 45秒,
SQLlite = 32分钟,
火鸟= 12分钟,
MSSQL12 localDB = 28分钟,
易桌= 8分钟,
BDE =被阻止,

我没有testing甲骨文,黑鱼,sysbase,nexsusDb等。但似乎他们也会很慢。 我已经连接到DBChart,只能提升DB,绝对DB已经在7〜10秒的时间内在DBchart上加载了43200条logging。 其他所有的分钟。 所以速度慢的数据库总是需要编码技巧才能在一些真正的工作中取得成功

我已经testing了他们的search速度,以及通过定位命令,不幸的是基于服务器的数据库总是比较慢。

MSSQL和SQLLite3对于Delphi来说pipe理起来是非常困难的,他们让我很累。

这些是我的testing结果
最后我决定使用AbsoluteDB,Dbisam和Elevate。 我把其他的东西从电脑上扔掉了。

Elevate软件不支持在运行时需要额外代码进行pipe理的recnofunction。 这使得数据库更慢其他错误与Elevate软件是autoinc字段。 没有办法重置它。 因此,即使是最快的数据库,我也没有selectElevat软件。 他们说很多很好的function,但其中有多less我们实际上使用它。 他们只留下了不被支持的最重要的function,却修复了许多不必要的function。 而且从8年来看似乎也没有任何优势。

如果你想用自己的眼睛看,请尝试看看..

我正在思考两个现在绝对DB或DBisam4

当谈到embedded式数据库时,第一个问题是:它是多用户的吗? 实际上,谁需要一个不允许多个连接(读写)的数据库呢? 我试着(强烈地)提到所有提到的数据库,发现只有一个实际上以它应该的方式工作。 那就是Accuracer。 唯一可惜的是,它是一个三人乐队,长期缺乏适当的支持。 由于我们在几年内没有看到真正的特征,所以它也主要是静态的。因为只有一个人真正开发它,所以并不奇怪。 看起来他们活在老名堂。 用户的好评反映了这个(通常是10年以前的评论)。 对于单一的用户体验,我会推荐绝对数据库。 至于主要玩家,我会推荐微软的SQL Server。 甲骨文已经成为一个英雄,正在慢慢消失。

ps在accuracer中有什么好处是他们的embedded式数据库的function就像完整的服务器一样。 它只locking当前logging,如果它正在使用,其余的function正常。 好的数据库。 可惜只是停滞不前。