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

每个嵌入式数据库有哪些优缺点?规模也很重要,支持和资源也很重要。你用过什么,为什么?

有帮助吗?

解决方案

我一直在FeedDemon中使用SQLite(通过DISQLite3)几个月,我强烈推荐它 - 它非常快速和稳定。正如哈维尔所说,图书馆的文档可能很薄,但SQLite本身的文档非常好。

其他提示

我正在使用Firebird 2.1 Embedded,我对它非常满意。我喜欢这样的事实:数据库大小实际上是无限的(使用> 4 GB数据库进行测试并且它可以工作)并且数据库文件与之兼容Firebird服务器,所以我可以使用标准工具进行数据库管理和检查。分发包括在exe文件夹中删除几个文件。

不支持从多个程序同时访问,但是从多个线程同时访问(只要您确保在任何给定时刻只有一个'connect'操作正在进行中)。

我在许多项目中使用过SQlite3(但是来自C / C ++和Objective-C)。它非常小 - 没有任何依赖 - 数据库在一个文件中。

它是Mac开发人员的首选数据库,因为它直接受到CoreData和iPhone的支持 - 所以有一个庞大的用户群(更不用说所有其他用户)。

让我们看一下,快速比较:

SQLite:

  • 数据库中的动态类型
  • 跨平台文件
  • 运行在 Windows、Linux、Mac 等上。
  • 公共区域
  • 支持交易
  • 依赖于文件系统安全,不包括自身安全

火鸟嵌入:

  • 数据库中的强类型
    • 并非所有 SQL 数据类型都受支持
  • 跨平台文件
    • 嵌入式 Firebird 只能在 Windows 上运行
    • Firebird 嵌入式文件的格式与完整服务器版本相同
    • 嵌入式 Firebird 中的文件可以复制到非 Windows 服务器上使用
  • 在修改后的 MPL 下可用(“我们的就是我们的,必须保持免费,你的就是你的,你不必发布它”)
  • 支持事务、触发器等。

MySQL 嵌入:

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

即使嵌入式数据库也有其优点和缺点。您需要根据您正在做的事情权衡这些优点和缺点才能做出决定。

我在许多项目中使用了 DBISAM 。它完全嵌入,甚至不需要外部DLL。与您列出的其他产品不同,它是商业的。虽然有很多很棒的功能,但很好地记录和支持。有一个继承者,我还没有尝试过。

Firebird嵌入式是我们的首选,因为没有代码更改,可以将具有嵌入式数据库的单个用户Delphi应用程序迁移到基于多用户服务器的部署,而不会牺牲任何高端功能(例如存储过程,触发器) ,意见等)。它是一个真正的免费数据库,并且在此过程中不会使用GPL代码。

强烈建议在使用Databases和Delphi时使用AnyDAC - 然后您可以选择无缝地定位FB或SQLite。

我的偏好是针对嵌入式应用的FB。 汤姆

我使用Sybase的Advantage Database Server,但我也是R& D Manager,所以这篇帖子有偏见。 :)

我们为WIN32 VCL和VCL.NET提供原生的Delphi TTable和TQuery组件。除SQL支持外,直接表访问使Advantage在许多其他Delphi产品中独一无二。 Advantage支持大型表(仅受记录数量限制,20亿)并具有免费的本地引擎,这对于开发PC和不需要客户端/服务器功能的小型客户站点非常有用。切换到具有单个连接属性的客户端/服务器,没有其他更改。

我们拥有大量客户端,因此访问Delphi以外的数据也非常简单(.NET数据提供程序,ODBC,OLE DB,PHP,Perl,JDBC等)。

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

这真的取决于你的需要。对于单用户应用程序,Firebird Embedded或SQLite可能是最佳选择(价格合适)。另一方面,如果您需要支持大量多个用户,您应该使用常规Firebird而不是嵌入式版本(服务器安装简单,因此您不会遇到太多问题)。

如果你需要介于两者之间的东西,对于一个适度的多用户应用程序,一个平面数据库会更好。我发现 ComponentAce的绝对数据库是我的需求的最佳选择,而不是DBISAM,NexusDB或VistaDB。

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

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

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

当你提到缺乏文档时,我猜它是DISQLite3的文档。 SQLite文档非常完整

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

(嵌入式)firebird的问题是,数据库无法驻留在网络驱动器上。此外,很难在只读驱动器(CD / DVD)上安装数据库。

对于围绕这些限制的一些黑客,请参阅Delphi Wiki: http://delphi.wikia.com/wiki/Firebird_tipps

NexusDB提供从嵌入式到完整客户端/服务器/远程的全系列产品。我相信也符合SQL2003标准。我在一些项目中使用它,到目前为止我非常高兴,并且它可以在如此广泛的“比例”范围内工作。是一个很大的优点(不必为扩大的应用程序学习另一个数据库等)。

查看此嵌入式数据库比较: http://sql-db.cz.cc/ ,它可能会有所帮助。大多数上述产品都在那里展示:Advantage,DBISAM,Firebird,MS SQL Server等等:Accuracer,Apollo,ElevateDB,NexusDB,TurboDB。

我偏爱Component Ace的Absolute DB。虽然是商品($),但它坚固,易于使用,占地面积小且记录完备。如果您正在寻找一个庞大的多用户应用程序,这不是可行的方法,但如果您的多用户需求很少(或不存在),这是一个可靠的选择。

我正在使用SQL Server Express和ADO组件。效果很好。您可以使用命令行运行SQL Server Express安装,以隐藏用户的复杂性。您还可以分发按文件名加载的数据库。有数百万的SQL服务器用户,因此可以在intertubes中轻松找到解决任何问题的方法: - )

我做了一个网络搜索,为我的Delphi应用程序找到一个快速的数据库包。我希望它完全包含在可执行文件中,不需要外部DLL或库。我最初发现AidAim的Accuracer。他们发布了他们的数据库有多快,甚至进行了比较与其他类似的包裹“证明”他们的观点。

我想相信他们的说法,但我想我会在网上搜索一下以查找其他套餐的时间。我很惊讶地发现德尔福论坛上的一篇文章,其中一个人询问使用什么数据库,并且有14个不同的建议。其中一位响应者已经完成了他自己的计时比较,并发现Accuracer与其他几个相比非常慢,而Accuracer(方便地)从他们自己的比较页面中省略了。

该帖子,加上我的其他后续网络研究,使我倾向于 DISQLite3 ,一个基于开源SQLite计划的产品,但增强了在Delphi中工作非常快,开销非常小,并且基于命令的调用 - 我喜欢。它正在积极开发中,很快将有一个官方Delphi 2009版本,虽然显然当前版本将在D2009下工作。

Addenum:11月17日发布的DISQLite3版本2.0.0支持D2009。

我知道MS访问是一个比较垃圾的数据库(并期望在这里被火焰击落),但如果只需要小数据,那么无论如何使用ms office都可能有优势。对我来说,这是一种比csv文件更灵活地存储程序数据的方法,这是科学代码的常用方法。

您可以使用ado& amp;来安装ms office,而无需使用delphi代码创建访问数据库。 odbc驱动程序(可能需要一个初始的.accdb文件,没有要复制的表,然后填充,我不记得这个细节。不确定许可情况这样做。

.accdb扩展名可以更改为其他内容&文件密码受到保护(在有限的程度上),因此如果需要,它不会立即显示给用户。 我知道一些商业开发人员使用这种方法&我自己复制了。发现它比sqlite更容易设置,但也许是因为我已经使用过ado&过去访问。

如果嵌入是绝对必须的,请查看DBISAM。

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

Components4Developers

我在不同的场合使用过DBISAM和kbMemTable。

我喜欢 DBISAM 的原因是它具有出色的功能,而且通常非常可靠。我已经在大型数据库、全文搜索、只读模式、CGI 和许多其他情况下使用过它。

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

kbMemTable 很小,非常适合少量数据。由于它在内存中运行,因此数据量当然必须很小。

我在几个桌面应用程序上采取的另一种选择是使用 TWriter/TReader 直接从对象层次结构转储数据或将数据转储到对象层次结构。这是迄今为止最小的选择,并且与使用数据库相比快得离谱。数据文件也很小。

不过,它有各种各样的缺点 - 如果您可能想要添加/更改字段,则必须编写版本控制代码,除非它在内存中,否则会更加复杂,根本不支持多用户,等等。

Firebird嵌入式也是我们的第一选择。和套件 Unified Interbase v2.0 一起使用它。一个伟大而稳定的解决方案!

我使用过ScimoreDB。它有它的怪癖,因为它们免费使用它,它有数据类型和一些安装问题的怪癖。这是一个C#项目。

Firebird一路走来。一切都很好,到目前为止版本2.1非常可靠。

FireBird提供了在某个时间向下扩展到多用户的机会,或者如果您需要并发(如果您的应用程序是多线程的)。

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

Firebird非常棒,占地面积小,因此您可以使用嵌入式 它可以为许多用户向上扩展 并且做得很好的unicode 我在delphi 2009中使用了devart组件 和FIB plus for delphi 6/7(他们的2009版本和unicode还没准备好太糟糕)

嗯,没有人推荐过BDE - 我想知道为什么会这样; - )

BlackFishSQL是另一种可能性,尽管我还没有深入测试过。

我有一个数据库,我必须在 10 天里每 20 秒记录 5 个现场数据。3 个字段为整数,1 个字段为双精度(时间),1 个字段为字符串[5]。

由于我的组件,我仍在使用 Delphi6 srv2。较新的 delphi 版本在组件方面很糟糕,我必须花费数千美元来重建我的组件库。因此,delphi 6 仍然最适合真正的商业应用程序,delphis 版本不会带来很多问题。在许多方面,例如 USB 或兼容读数等......他们在以前的版本从未投放市场之前发布了新版本。

我用 Delphi6 设置了一个代码,在表中附加 43200 条记录进行测试,因为我将在应用程序中部署该表,而它有 43200 条记录。我将在 DBChart 上显示所有数据。

测试结果如下:数据库通过插入命令填充了表43200条记录

Dbisam = 34 秒,
ElevateDb = 11 秒,
绝对数据库 = 45 秒,
SQLlite = 32 分钟,
火鸟 = 12 分钟,
MSSQL12 localDB = 28 分钟,
简易桌 = 8 分钟,
BDE = 被阻止,

我还没有测试过 oracle 、 blackfish 、 sysbase 、 nexsusDb 等。但看来他们也会很慢。我已经连接了 DBChart,只有 elevateDb 和absoluteDB 在 7~10 秒等异常时间内加载了 DBchart 上的 43200 条记录。其他都花了几分钟。因此,较慢的数据库总是需要编码技巧才能在某些实际工作中取得成功。

我也通过locate命令测试了他们的搜索速度,不幸的是基于服务器的数据库总是较慢。

MSSQL和SQLLite3在delphi中管理起来非常困难,让我很累。

这些是我的测试结果
最后我决定使用 AbsoluteDB、Dbisam 和 Elevate。我已经把剩下的从电脑上扔掉了。

Elevate软件不支持recno功能,需要运行时额外的代码来管理。这使得数据库变慢 Elevate 软件的另一个错误是 autoinc 字段。没有办法重置它。因此我没有选择Elevat软件,即使它是最快的数据库。都说好功能很多,但我们实际用过的有多少。他们只是留下了不支持的最重要的功能,但修复了许多不必要的功能。而且8年以来似乎也没有任何优势。

如果您想亲眼看看,请尝试看看。

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

当谈到嵌入式数据库时,第一个问题是:它是多用户吗? 实际上,谁需要一个不允许多个连接(读取和写入)的数据库? 我已经(强烈地)尝试了所有提到的数据库,并且发现只有一个实际上以它应该的方式运行。这就是Accuracer。 唯一可惜的是,它是一个三人乐队,长期缺乏适当的支持。它也主要是静态的开发,因为我们已经看到多年没有真正的特征。不足为奇,因为只有一个人真正开发它。看来他们生活在古老的名声中。用户赞誉反映(通常是10岁的评论)。 对于单用户体验,我建议使用Absolute Database。 至于主要参与者,我会推荐微软的SQL Server。甲骨文已经成为一个臃肿的软件,并逐渐消失。

PS 准确性的好处是它们的嵌入式数据库功能就像完整的服务器一样。如果正在使用,它只锁定当前记录,而其余记录正常。好的数据库。可惜只是停滞不前。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top