我正在 Delphi 中创建一个桌面应用程序,并计划使用嵌入式数据库。我已经使用带有 DISQLite3 库的 SQlite3 开始了这个项目。它有效,但文档似乎有点轻。我最近发现了 Firebird(是的,我已经离开 Windows 一段时间了),它似乎有一些引人注目的特性和支持。
每个嵌入式数据库的优缺点是什么?规模很重要,支持和资源也很重要。你用过什么,为什么?
我正在 Delphi 中创建一个桌面应用程序,并计划使用嵌入式数据库。我已经使用带有 DISQLite3 库的 SQlite3 开始了这个项目。它有效,但文档似乎有点轻。我最近发现了 Firebird(是的,我已经离开 Windows 一段时间了),它似乎有一些引人注目的特性和支持。
每个嵌入式数据库的优缺点是什么?规模很重要,支持和资源也很重要。你用过什么,为什么?
我正在使用 Firebird 2.1 Embedded,我对此非常满意。我喜欢数据库大小实际上是无限的(使用 > 4 GB 的数据库进行测试并且可以正常工作)并且数据库文件与 Firebird 服务器兼容,所以我可以使用标准工具进行数据库管理和检查。分发包括在您的 exe 文件夹中放置几个文件。
不支持来自多个程序的同时访问,但支持来自多个线程的同时访问(只要您确保在任何给定时刻只有一个“连接”操作正在进行)。
我在很多项目中都使用过 SQlite3(但来自 C/C++ 和 Objective-C)。它非常小——没有任何依赖关系——数据库在一个文件中。
它是 Mac 开发人员的首选数据库,因为它直接受到 CoreData 和 iPhone 的支持——因此拥有庞大的用户群(更不用说所有其他用户了)。
我已经在 FeedDemon 中使用 SQLite(通过 DISQLite3)几个月了,我强烈推荐它——它非常快速和稳定。正如 Javier 所说,该库的文档可能很薄,但 SQLite 本身的文档非常好。
让我们看看,快速比较:
SQLite:
火鸟嵌入式:
MySQL 嵌入式:
即使是嵌入式数据库也有其优点和缺点。您需要权衡这些优势和劣势与您正在做的决定。
Firebird Embedded 是我们的第一选择,因为无需更改代码,具有嵌入式数据库的单用户 Delphi 应用程序可以迁移到基于多用户服务器的部署,而不会牺牲任何高端功能(例如存储过程、触发器、视图、 ETC。)。它是一个真正的免费数据库,并且在此过程中不会对您的代码进行 GPL。
强烈建议在使用数据库和 Delphi 时使用 AnyDAC - 然后您可以选择无缝地定位 FB 或 SQLite。
我更喜欢嵌入式应用程序的 FB。汤姆
我用的是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
这真的取决于你需要什么。对于单用户应用程序,Firebird Embedded 或 SQLite 可能是最佳选择(而且价格合适)。另一方面,如果您需要支持大量多用户,您可能应该使用常规 Firebird 而不是嵌入式版本(服务器安装简单,因此您不会遇到太多问题)。
如果您需要介于两者之间的东西,对于中等的多用户应用程序,平面数据库之一会更好。我发现ComponentAce 的 Absolute Database比 DBISAM、NexusDB 或 VistaDB 更适合我的需求。
它的占用空间相对较小(没有 DLL),它是一个单文件数据库(对我来说是必须的),支持 Unicode、BLOB 压缩、加密,而且技术限制对于平面数据库来说似乎令人印象深刻。此外,在我需要它的少数情况下,支持很好。
对于缺点,我注意到它不支持嵌套事务,但除此之外,我没有任何问题。
至于大小,没有什么能比得上 SQLite。
当您提到缺乏文档时,我猜它是 DISQLite3 的文档。SQLite文档非常完整
(嵌入式)firebird 的问题是,数据库不能驻留在网络驱动器上。此外,很难在只读驱动器 (CD/DVD) 上拥有数据库。
有关这些限制的一些技巧,请参阅 Delphi Wiki: http ://delphi.wikia.com/wiki/Firebird_tipps
看看 NexusDB。过去使用非常成功。
NexusDB 提供从嵌入式到完整客户端/服务器/远程的全方位服务。我相信也符合 SQL2003。我在几个项目中使用它,到目前为止我很高兴,而且它可以在如此广泛的“规模”中工作这一事实是一个很大的优势(不必为扩大应用程序学习另一个数据库, ETC)。
看看这个嵌入式数据库比较: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 Server 用户,因此可以在 intertubes 中轻松找到任何问题的解决方案 :-)
我进行了一次网络搜索,为我的 Delphi 应用程序找到了一个快速的数据库包。我希望它完全包含在可执行文件中,不需要外部 DLL 或库。我最初是通过 AidAim 找到 Accuracer。他们发布了他们的数据库有多快,甚至还与其他类似的软件包进行了比较以“证明”他们的观点。
我想相信他们的说法,但我想我会更多地在网上搜索以查找其他套餐的时间。我很惊讶地在 Delphi 论坛上发现一个帖子,有人问要使用什么数据库,并且有 14 条不同的建议。其中一位响应者进行了自己的时间比较,发现 Accuracer 与其他几个相比非常慢,Accuracer (方便地)将其排除在他们自己的比较页面之外。
这篇文章,加上我进行的其他后续网络研究,使我倾向于DISQLite3,这是一个基于开源 SQLite 程序的产品,但增强了在 Delphi 中非常快速地工作,开销非常小,并且具有基于命令的调用 -我喜欢。它正在积极开发中,很快就会有一个官方的 Delphi 2009 版本,尽管当前版本显然可以在 D2009 下工作。
附录:11 月 17 日发布的 DISQLite3 版本 2.0.0,支持 D2009。
我知道 MS 访问是一个比较垃圾的数据库(并希望在这里被击落),但如果只需要小数据,那么无论如何使用 ms office 可能会有优势。对我来说,这是一种比 csv 文件更灵活地存储程序数据的方法,而 csv 文件是科学代码的常用方法。
您可以从 delphi 代码创建访问数据库,而无需使用 ado 和 odbc 驱动程序安装 ms office(可能需要有一个初始 .accdb 文件,没有要复制的表格,然后填充,我不记得这个细节。不确定许可情况这样做。
.accdb 扩展名可以更改为其他内容并且文件密码受保护(在有限的程度上),因此如果需要,它对用户的访问不会立即显而易见。我知道一些商业开发人员使用这种方法并自己复制它。发现它比 sqlite 更容易设置,但可能是因为我过去已经使用过 ado & access。
我用过 ScimoreDB。它有它的怪癖,因为它们免费提供版税,它在数据类型和一些安装问题上有它的怪癖。这是在一个 C# 项目上。
如果嵌入式是绝对必须的,请查看 DBISAM。
kbMemTable 是一个不错的选择。在内存中运行,速度快,多线程。以前是免费的。
我在不同的场合使用过 DBISAM 和 kbMemTable。
我喜欢 DBISAM 的地方在于它具有强大的功能,而且通常非常可靠。我曾在大型数据库、全文搜索、只读模式、CGI 和许多其他情况下使用它。
不过,与基于 kbMemTable 或 SQLite 的组件相比,它相当大。而且每个数据库(甚至表)不能有一个文件 - 根据情况,这是一个主要缺点。
kbMemTable 很小,非常适合处理少量数据。由于它在内存中运行,当然它必须是少量数据。
我在几个桌面应用程序上采用的另一个选项是使用 TWriter/TReader 将数据直接从我的对象层次结构转储到我的对象层次结构。这是迄今为止最小的选择,与使用数据库相比速度快得离谱。数据文件也很小。
但是,它有各种缺点 - 如果您可能想要添加/更改字段,则必须对版本进行编码,除非它在内存中,否则它会更加复杂,根本不支持多用户等。
Firebird 嵌入式也是我们的第一选择。以及带有它的套件Unified Interbase v2.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
一路火鸟。一切都做得很好,到目前为止 2.1 版非常可靠。
FireBird 提供了在某个时候扩展到多用户的机会,或者如果您需要并发(如果您的应用程序是多线程的)。
如果您只需要单用户访问,SQLite 是无与伦比的,无论是性能、便利性、SQL 支持还是稳定性,都没有其他数据库可以与它相提并论。
Firebird 非常棒,占用空间小,因此您可以使用嵌入式,它可以为许多用户向上扩展,并且 unicode 失败我使用带有 delphi 2009 和 FIB plus 的 devart 组件,用于 delphi 6/7(他们的版本为 2009 和 unicode还没准备好,太糟糕了)
嗯,没有人推荐过 BDE - 我想知道为什么会这样 ;-)
BlackFishSQL 是另一种可能性,虽然我还没有深入测试过。
谈到嵌入式数据库,第一个问题是:它是多用户的吗?实际上,谁需要一个不允许多个连接(读写)的数据库?我已经(深入地)尝试了所有提到的数据库,但只找到了一个真正按照它应该的方式运行的数据库。那就是Accuracer。accuracer 唯一的遗憾是它是一个三人乐队,长期缺乏适当的支持。它在开发中也主要是静态的,因为我们多年来没有看到任何真正的功能。这并不奇怪,因为只有一个人实际开发它。看来他们是靠着旧名声过日子的。用户的好评反映了这一点(通常是 10 年前的评论)。对于单一的用户体验,我会推荐绝对数据库。至于主要参与者,我会推荐 Microsoft 的 SQL Server。Oracle 已成为过时的软件,正在慢慢消亡。
ps accuracer 的优点是它们的嵌入式数据库功能就像成熟的服务器一样。如果当前记录正在使用中,则它仅锁定当前记录,而其余记录正常运行。不错的数据库。可惜只是停滞不前。