我正在Delphi中创建一个桌面应用程序,并计划使用嵌入式数据库.我使用SQlite3和DISQLite3库启动了项目.它有效,但文档似乎有点轻松.我最近发现Firebird(是的,我已经离开了Windows一段时间),它似乎有一些引人注目的功能和支持.
每个嵌入式数据库有哪些优缺点?规模很重要,支持和资源也很重要.你用过什么,为什么?
我正在使用Firebird 2.1 Embedded,我对它非常满意.我喜欢数据库大小实际上是无限的(使用> 4 GB数据库进行测试并且它可以工作),并且数据库文件与Firebird服务器兼容所以我可以使用标准工具进行数据库管理和检查.分发包括在exe文件夹中删除少量文件.
不支持从多个程序同时访问,但是从多个线程同时访问(只要您确保在任何给定时刻只有一个'connect'操作正在进行中).
我在许多项目中使用过SQlite3(但是来自C/C++和Objective-C).它非常小 - 没有任何依赖 - 数据库在一个文件中.
它是Mac开发人员的首选数据库,因为它直接受到CoreData和iPhone的支持 - 因此有一个庞大的用户群(更不用说所有其他用户).
我一直在FeedDemon中使用SQLite(通过DISQLite3)几个月,我强烈推荐它 - 它非常快速和稳定.正如Javier所说,库的文档可能很薄,但SQLite本身的文档非常好.
我在许多项目中使用过DBISAM.它完全嵌入,甚至不需要外部DLL.与您列出的其他产品不同,它是商业的.虽然有很多很棒的功能,但很好地记录和支持.有一个接班人,我还没有尝试过.
让我们看看,快速比较:
SQLite的:
动态键入数据库
跨平台文件
在Windows,Linux,Mac等上运行
公共区域
支持交易
依赖于文件系统安全性,不包括自己的安全性
Firebird嵌入式:
强大的数据库输入
并非所有SQL数据类型都受支持
跨平台文件
Firebird嵌入式仅在Windows上运行
Firebird嵌入的文件格式与完整服务器版本相同
可以将Firebird嵌入的文件复制到非Windows服务器以供使用
根据修改后的MPL提供("我们的是什么,我们必须保持免费,你的是什么,你不必发布它")
支持交易,触发器等
MySQL嵌入式:
对SQL功能的支持取决于文件格式
(IIRC)跨平台文件
除非您支付版税,否则GPL
在Windows,Linux,Mac上运行
非常受开源人群欢迎
即使是嵌入式数据库也有其优点和缺点.你需要权衡那些优势和劣势与你正在做的决定.
Firebird嵌入式是我们的首选,因为没有代码更改,可以将具有嵌入式数据库的单个用户Delphi应用程序迁移到基于多用户服务器的部署,而不会牺牲任何高端功能(例如存储过程,触发器,视图,等等.).它是一个真正的免费数据库,并且在此过程中不会对您的代码进行GPL.
强烈建议在使用Databases和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 Developer's Web站点:http://devzone.advantagedatabase.com
这真的取决于你的需求.对于单用户应用程序,Firebird Embedded或SQLite可能是最佳选择(价格合适).另一方面,如果您需要支持大量多个用户,您应该使用常规Firebird而不是嵌入式版本(服务器安装简单,因此您不会遇到太多问题).
如果你需要介于两者之间的东西,对于一个适度的多用户应用程序,一个平面数据库会更好.我发现ComponentAce的Absolute Database比DBISAM,NexusDB或VistaDB更适合我的需求.
它留下了相对较小的占用空间(没有DLL),它是单文件数据库(对我而言必须),支持Unicode,BLOB压缩,加密和技术限制似乎给平面数据库留下深刻印象.而且,在我需要的时候,支持很少.
对于缺点,我注意到它不支持嵌套事务,但除此之外,我没有遇到任何问题.