40

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

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

4

29 回答 29

38

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

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

于 2008-10-21T17:27:51.013 回答
19

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

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

于 2008-10-21T17:41:03.047 回答
15

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

于 2008-10-21T20:48:10.970 回答
13

我在很多项目中都使用过DBISAM 。它完全嵌入,甚至不需要外部 DLL。与您列出的其他人不同,它是商业的。尽管有很多很棒的功能,并且有很好的文档记录和支持。有一个我还没有尝试过的继任者。

于 2008-10-21T17:45:36.533 回答
13

让我们看看,快速比较:

SQLite:

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

火鸟嵌入式:

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

MySQL 嵌入式:

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

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

于 2008-12-03T21:01:29.490 回答
8

Firebird Embedded 是我们的第一选择,因为无需更改代码,具有嵌入式数据库的单用户 Delphi 应用程序可以迁移到基于多用户服务器的部署,而不会牺牲任何高端功能(例如存储过程、触发器、视图、 ETC。)。它是一个真正的免费数据库,并且在此过程中不会对您的代码进行 GPL。

于 2008-10-21T17:51:13.497 回答
6

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

我更喜欢嵌入式应用程序的 FB。汤姆

于 2011-02-28T11:40:30.040 回答
5

我用的是Sybase的Advantage Database Server,但我也是研发经理,所以这篇文章有失偏颇。:)

我们有适用于 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

于 2008-10-21T19:01:43.930 回答
5

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

如果您需要介于两者之间的东西,对于中等的多用户应用程序,平面数据库之一会更好。我发现ComponentAce 的 Absolute Database比 DBISAM、NexusDB 或 VistaDB 更适合我的需求。

它的占用空间相对较小(没有 DLL),它是一个单文件数据库(对我来说是必须的),支持 Unicode、BLOB 压缩、加密,而且技术限制对于平面数据库来说似乎令人印象深刻。此外,在我需要它的少数情况下,支持很好。

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

于 2008-11-17T09:14:09.767 回答
3

至于大小,没有什么能比得上 SQLite。

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

于 2008-10-21T17:53:52.757 回答
2

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

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

于 2008-10-21T20:44:34.830 回答
2

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

于 2008-10-21T22:27:13.813 回答
2

NexusDB 提供从嵌入式到完整客户端/服务器/远程的全方位服务。我相信也符合 SQL2003。我在几个项目中使用它,到目前为止我很高兴,而且它可以在如此广泛的“规模”中工作这一事实是一个很大的优势(不必为扩大应用程序学习另一个数据库, ETC)。

于 2008-10-29T09:12:21.690 回答
2

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

于 2011-03-10T14:33:29.123 回答
1

我偏爱 Component Ace 的 Absolute DB。虽然是商业产品 ($),但它坚固、易于使用、占用空间小且有据可查。如果您正在寻找一个巨大的多用户应用程序,这不是要走的路,但如果您的多用户需求很轻(或不存在),这是一个可靠的选择。

于 2008-10-21T18:28:12.343 回答
1

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

于 2008-10-21T22:24:30.493 回答
1

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

我想相信他们的说法,但我想我会更多地在网上搜索以查找其他套餐的时间。我很惊讶地在 Delphi 论坛上发现一个帖子,有人问要使用什么数据库,并且有 14 条不同的建议。其中一位响应者进行了自己的时间比较,发现 Accuracer 与其他几个相比非常慢,Accuracer (方便地)将其排除在他们自己的比较页面之外。

这篇文章,加上我进行的其他后续网络研究,使我倾向于DISQLite3,这是一个基于开源 SQLite 程序的产品,但增强了在 Delphi 中非常快速地工作,开销非常小,并且具有基于命令的调用 -我喜欢。它正在积极开发中,很快就会有一个官方的 Delphi 2009 版本,尽管当前版本显然可以在 D2009 下工作。

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

于 2008-10-21T23:48:49.840 回答
1

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

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

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

于 2014-09-13T18:51:33.930 回答
0

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

于 2008-10-21T17:44:23.603 回答
0

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

于 2008-10-23T00:13:50.460 回答
0

kbMemTable 是一个不错的选择。在内存中运行,速度快,多线程。以前是免费的。

组件4开发人员

于 2008-11-05T00:27:42.960 回答
0

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

我喜欢 DBISAM 的地方在于它具有强大的功能,而且通常非常可靠。我曾在大型数据库、全文搜索、只读模式、CGI 和许多其他情况下使用它。

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

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

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

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

于 2008-11-09T22:46:20.480 回答
0

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

于 2008-12-30T21:02:54.650 回答
0

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

由于我的组件,我仍在使用 Delphi6 srv2。较新的 delphi 版本在组件方面很糟糕,我不得不花费数千美元来重建我的组件库。因此,对于真正的商业应用程序,delphi 6 仍然是最好的,因为 delphis 版本从来没有给出很多问题。在许多方面,例如 USB 或 comport 读数等......他们在以前的版本从未上市之前发布了更新的版本。

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

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

Dbisam = 34 秒,
ElevateDb = 11 秒,
AbsoluteDB = 45 秒,
SQLlite = 32 分钟,
Firebird = 12 分钟,
MSSQL12 localDB = 28 分钟,
Easy table = 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

于 2015-10-27T18:59:26.500 回答
-1

一路火鸟。一切都做得很好,到目前为止 2.1 版非常可靠。

于 2009-02-14T12:04:28.517 回答
-1

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

如果您只需要单用户访问,SQLite 是无与伦比的,无论是性能、便利性、SQL 支持还是稳定性,都没有其他数据库可以与它相提并论。

于 2009-04-15T05:29:53.993 回答
-1

Firebird 非常棒,占用空间小,因此您可以使用嵌入式,它可以为许多用户向上扩展,并且 unicode 失败我使用带有 delphi 2009 和 FIB plus 的 devart 组件,用于 delphi 6/7(他们的版本为 2009 和 unicode还没准备好,太糟糕了)

于 2009-04-15T08:49:52.093 回答
-1

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

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

于 2009-05-04T00:00:18.073 回答
-1

谈到嵌入式数据库,第一个问题是:它是多用户的吗?实际上,谁需要一个不允许多个连接(读写)的数据库?我已经(深入地)尝试了所有提到的数据库,但只找到了一个真正按照它应该的方式运行的数据库。那就是Accuracer。accuracer 唯一的遗憾是它是一个三人乐队,长期缺乏适当的支持。它在开发中也主要是静态的,因为我们多年来没有看到任何真正的功能。这并不奇怪,因为只有一个人实际开发它。看来他们是靠着旧名声过日子的。用户的好评反映了这一点(通常是 10 年前的评论)。对于单一的用户体验,我会推荐绝对数据库。至于主要参与者,我会推荐 Microsoft 的 SQL Server。Oracle 已成为过时的软件,正在慢慢消亡。

ps accuracer 的优点是它们的嵌入式数据库功能就像成熟的服务器一样。如果当前记录正在使用中,则它仅锁定当前记录,而其余记录正常运行。不错的数据库。可惜只是停滞不前。

于 2016-10-04T15:48:16.647 回答