我正在Delphi中创建一个桌面应用程序并计划使用嵌入式数据库。我使用SQlite3和DISQLite3库启动了项目。它有效,但文档似乎有点轻松。我最近发现了Firebird(是的,我已经离开Windows一段时间了)它似乎有一些引人注目的功能和支持。
每个嵌入式数据库有哪些优缺点?规模很重要,支持和资源也很重要。你用了什么,为什么?
答案 0 :(得分:38)
我正在使用Firebird 2.1 Embedded,我对它非常满意。我喜欢这样的事实:数据库大小实际上是无限的(使用> 4 GB数据库进行测试并且它可以工作)并且数据库文件与之兼容Firebird服务器,所以我可以使用标准工具进行数据库管理和检查。分发包括在exe文件夹中删除几个文件。
不支持从多个程序同时访问,但是从多个线程同时访问(只要您确保在任何给定时刻只有一个'connect'操作正在进行中)。
答案 1 :(得分:19)
我在许多项目中使用过SQlite3(但是来自C / C ++和Objective-C)。它非常小 - 没有任何依赖 - 数据库在一个文件中。
它是Mac开发人员的首选数据库,因为它直接受到CoreData和iPhone的支持 - 所以有一个庞大的用户群(更不用说所有其他用户)。
答案 2 :(得分:15)
我一直在FeedDemon中使用SQLite(通过DISQLite3)几个月,我强烈推荐它 - 它非常快速和稳定。正如哈维尔所说,图书馆的文档可能很薄,但SQLite本身的文档非常好。
答案 3 :(得分:14)
让我们看看,快速比较:
SQLite的:
Firebird嵌入式:
MySQL嵌入式:
即使是嵌入式数据库也有其优点和缺点。你需要权衡那些优势和劣势与你正在做的决定。
答案 4 :(得分:13)
答案 5 :(得分:9)
Firebird嵌入式是我们的首选,因为没有代码更改,可以将具有嵌入式数据库的单个用户Delphi应用程序迁移到基于多用户服务器的部署,而不会牺牲任何高端功能(例如存储过程,触发器) ,意见等)。它是一个真正的免费数据库,并且在此过程中不会使用GPL代码。
答案 6 :(得分:7)
强烈建议在使用Databases和Delphi时使用AnyDAC - 然后您可以选择无缝地定位FB或SQLite。
我的偏好是针对嵌入式应用的FB。 汤姆
答案 7 :(得分:6)
我使用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
答案 8 :(得分:6)
这真的取决于你的需要。对于单用户应用程序,Firebird Embedded或SQLite可能是最佳选择(价格合适)。另一方面,如果您需要支持大量多个用户,您应该使用常规Firebird而不是嵌入式版本(服务器安装简单,因此您不会遇到太多问题)。
如果你需要介于两者之间的东西,对于一个适度的多用户应用程序,一个平面数据库会更好。我发现ComponentAce's Absolute Database比DBISAM,NexusDB或VistaDB更能满足我的需求。
它留下相对较小的占用空间(没有DLL),它是单文件数据库(对我来说必须),支持Unicode,BLOB压缩,加密和技术限制似乎给平面数据库留下深刻印象。而且,在我需要的时候,支持很少。
对于缺点,我注意到它不支持嵌套事务,但除此之外,我没有问题。
答案 9 :(得分:4)
至于大小,没有什么比SQLite好。
当你提到缺乏文档时,我猜它是DISQLite3的文档。 SQLite docs非常完整
答案 10 :(得分:3)
NexusDB提供从嵌入式到完整客户端/服务器/远程的全系列产品。我相信也符合SQL2003标准。我在一些项目中使用它,到目前为止我非常高兴,并且它可以在如此广泛的“标度”中工作这一事实是一个很大的优点(不必为扩展的应用程序学习另一个数据库,等)。
答案 11 :(得分:3)
看看这个嵌入式数据库比较:http://sql-db.cz.cc/,它可能会有所帮助。大多数上述产品都在那里展示:Advantage,DBISAM,Firebird,MS SQL Server等等:Accuracer,Apollo,ElevateDB,NexusDB,TurboDB。
答案 12 :(得分:3)
看看NexusDB。过去使用非常成功。
答案 13 :(得分:3)
(嵌入式)firebird的问题是,数据库无法驻留在网络驱动器上。此外,很难在只读驱动器(CD / DVD)上安装数据库。
对于围绕这些限制的一些黑客,请参阅Delphi Wiki: http://delphi.wikia.com/wiki/Firebird_tipps
答案 14 :(得分:2)
我正在使用SQL Server Express和ADO组件。效果很好。您可以使用命令行运行SQL Server Express安装,以隐藏用户的复杂性。您还可以分发按文件名加载的数据库。有数百万的SQL服务器用户,因此可以在intertubes中轻松找到解决任何问题的方法: - )
答案 15 :(得分:2)
我做了一个网络搜索,为我的Delphi应用程序找到一个快速的数据库包。我希望它完全包含在可执行文件中,不需要外部DLL或库。我最初发现AidAim的Accuracer。他们发布了how fast their database was and even gave comparisons和其他类似的软件包来“证明”他们的观点。
我想相信他们的说法,但我想我会在网上搜索一下其他套餐的时间。我很惊讶地发现a post at the Delphi discussion forums一个人询问使用什么数据库,并且有14个不同的建议。其中一位响应者已经完成了他自己的计时比较,并发现Accuracer与其他几个相比非常慢,而Accuracer(方便地)从他们自己的比较页面中省略了。
该帖子,加上我进行的其他后续网络研究,使我倾向于DISQLite3,这是一种基于the Open Source SQLite program的产品,但是在Delphi中工作的增强很快,开销非常小,和基于命令的调用 - 我喜欢。它正在积极开发中,很快将有一个官方Delphi 2009版本,虽然显然当前版本将在D2009下工作。
Addenum:11月17日发布的DISQLite3版本2.0.0支持D2009。
答案 16 :(得分:2)
我知道MS访问是一个比较垃圾的数据库(并期望在这里被火焰击落),但如果只需要小数据,那么无论如何使用ms office都可能有优势。对我来说,这是一种比csv文件更灵活地存储程序数据的方法,这是科学代码的常用方法。
您可以使用ado& amp;来安装ms office,而无需使用delphi代码创建访问数据库。 odbc驱动程序(可能需要一个初始的.accdb文件,没有要复制的表,然后填充,我不记得这个细节。不确定许可情况这样做。
.accdb扩展名可以更改为其他内容&文件密码受到保护(在有限的程度上),因此如果需要,它不会立即显示给用户。 我知道一些商业开发人员使用这种方法&我自己复制了。发现它比sqlite更容易设置,但也许是因为我已经使用过ado&过去访问。
答案 17 :(得分:2)
我偏爱Component Ace的Absolute DB。虽然是商品($),但它坚固,易于使用,占地面积小且记录完备。如果您正在寻找一个庞大的多用户应用程序,这不是可行的方法,但如果您的多用户需求很少(或不存在),这是一个可靠的选择。
答案 18 :(得分:1)
如果嵌入是绝对必须的,请查看DBISAM。
答案 19 :(得分:1)
kbMmemTable是一个很好的候选人。在内存中运行,快速,多线程。曾经是免费的。
答案 20 :(得分:1)
我在不同场合使用过DBISAM和kbMemTable。
我喜欢DBISAM的是它具有很强的功能,而且通常非常可靠。我在大型数据库,全文搜索,只读模式,CGI和许多其他情况下使用它。
与kbMemTable或基于SQLite的组件相比,它相当大。而且每个数据库(甚至是表格)都不能有一个文件 - 根据情况,这是一个主要的缺点。
kbMemTable非常小,非常适合少量数据。因为它在内存中运行,当然它必须是少量数据。
我对几个桌面应用程序采取的另一个选择是使用TWriter / TReader直接从/向我的对象层次结构转储数据。这是迄今为止最小的选择,与使用数据库相比,速度极快。数据文件也很小。
它有各种各样的缺点 - 如果你想要添加/更改字段,你必须编写版本,除非它在内存中更复杂,根本没有多用户支持等。
答案 21 :(得分:1)
Firebird嵌入式也是我们的第一选择。和套件 Unified Interbase v2.0 一起使用它。一个伟大而稳定的解决方案!
答案 22 :(得分:0)
当谈到嵌入式数据库时,第一个问题是:它是多用户吗? 实际上,谁需要一个不允许多个连接(读取和写入)的数据库? 我已经(强烈地)尝试了所有提到的数据库,并且发现只有一个实际上以它应该的方式运行。这就是Accuracer。 唯一可惜的是,它是一个三人乐队,长期缺乏适当的支持。它也主要是静态的开发,因为我们已经看到多年没有真正的特征。不足为奇,因为只有一个人真正开发它。看来他们生活在古老的名声中。用户赞誉反映(通常是10岁的评论)。 对于单用户体验,我建议使用Absolute Database。 至于主要参与者,我会推荐微软的SQL Server。甲骨文已经成为一个臃肿的软件,并逐渐消失。
PS 准确性的好处是它们的嵌入式数据库功能就像完整的服务器一样。如果正在使用,它只锁定当前记录,而其余记录正常。好的数据库。可惜只是停滞不前。
答案 23 :(得分:0)
我有一个数据库,我必须每20秒记录5个字段数据,持续10天.3个字段是整数,1个字段是双(时间),1个字段是字符串[5]。
由于我的组件,我仍在使用Delphi6 srv2。较新的delphi版本在组件上非常糟糕,我不得不花费数千美元来重建我的组件库。因此delphi 6仍然是最好的真正的纪念应用程序,从来没有版本的delphis给出很多问题。在许多方面,如USB或comport读数......等等,在以前的版本从未投放市场之前,它们会发布更新的版本。
我已经使用Delphi6设置了一个代码,将43200条记录附加到一个表中进行测试,因为我将在应用程序中部署该表,同时它有43200条记录。我将在DBChart上显示所有数据。
测试结果在数据库下面,通过insert命令填充表格,包含43200条记录
Dbisam = 34秒,
ElevateDb = 11秒,
AbsoluteDB = 45秒,
SQLlite = 32分钟,
火鸟= 12分钟,
MSSQL12 localDB = 28分钟,
简易表= 8分钟,
BDE =被阻止,
我还没有测试过oracle,blackfish,sysbase,nexsusDb等等。但是看起来它们也会很慢。我已经与DBChart连接,只有elevateDb和absoluteDB在DBchart上加载了43200条记录,时间超过7~10秒。其他所有需要几分钟。因此,较慢的数据库总是需要编码技巧才能在一些真正的工作中取得成功。
我已经测试了他们的搜索速度以及定位命令,不幸的是基于服务器的数据库总是较慢。
MSSQL和SQLLite3非常难以管理delphi,因为它们让我非常疲惫。
这些是我的测试结果
最后我决定使用AbsoluteDB,Dbisam和Elevate。我把剩下的都扔掉了电脑。
提升软件不支持recno功能,需要在运行时管理额外的代码。这使数据库更慢其他错误是Elevate软件是autoinc字段。没有办法重置它。因此,我没有选择Elevat软件,即使它是最快的数据库。他们说许多好的功能,但实际上我们使用了多少功能。他们只是留下了不支持的最重要的功能,但修复了许多不必要的功能。似乎自8年以来也没有任何优势。
如果你想亲眼看看,请试着看看..
我正在思考两个现在绝对的DB或DBisam4
答案 24 :(得分:0)
我使用过ScimoreDB。它有它的怪癖,因为它们免费使用它,它有数据类型和一些安装问题的怪癖。这是一个C#项目。
答案 25 :(得分:0)
BlackFishSQL是另一种可能性,尽管我还没有深入测试过。
答案 26 :(得分:0)
Firebird非常棒,占地面积小,因此您可以使用嵌入式 它可以为许多用户向上扩展 并且做得很好的unicode 我在delphi 2009中使用了devart组件 和FIB plus for delphi 6/7(他们的2009版本和unicode还没准备好太糟糕)
答案 27 :(得分:0)
FireBird提供了在某个时间向下扩展到多用户的机会,或者如果您需要并发(如果您的应用程序是多线程的)。
如果您只需要单用户访问,SQLite是无与伦比的,在任何方面都没有其他数据库接近它,无论是性能,便利性,SQL支持还是稳定性。
答案 28 :(得分:0)
Firebird一路走来。一切都很好,到目前为止版本2.1非常可靠。