寻找适用于D2009+的本地数据库

6

我正在尝试更新一个使用BDE Paradox文件系统进行所有数据存储的传统应用程序。在某些狭窄的条件下,该程序运行得相当不错,但它存在严重的性能问题。

我想通过升级到更好的数据库系统来尝试改善情况。我需要一个本地数据库,最好是可以将整个数据库存储在一个文件中,而不是当前的“每个表一个或多个文件”的系统。它必须支持外键关系和表索引,并且必须能够从具有数十万元素的表的查询中快速返回结果。

最后一个要点很重要。当前的系统已经建立了索引,但这似乎并不重要。所有查询似乎都在O(N)时间内运行,其中N是表的总大小,并且当表开始变大时,查询速度变得极其缓慢。我不是很确定为什么,但这必须消失。

而且它必须在D2009及更高版本下工作。有人能提供一些推荐吗?

10个回答

7
另外一个支持嵌入式Firebird(以及一般的Firebird)的选票!我刚刚将一个Interbase 6.0应用程序移植到嵌入式Firebird 1.5上,经过短暂地阅读文档,实际转换只花了20分钟,现在我的应用程序在Vista和Windows 7上运行得非常好。如果您不需要多用户支持,那么我会认真考虑嵌入式Firebird(如果您确实需要多用户支持,为什么不考虑普通的Firebird呢)。它是一个单一的数据库文件和几个小的引擎DLL文件,易于部署、维护和备份。有许多工具可帮助开发,并且Delphi社区对IB和Firebird的技术支持是无与伦比的。SQL支持非常出色,支持约束、触发器和存储过程(我们还有UDF来帮助增强语言——可以在Delphi中编写的DLL,并作为内联函数等在您的数据库中使用。非常快速,非常灵活)。关于性能的最后一点——Interbase本来就很快,而我目前对嵌入式Firebird的经验是它非常快——真的非常印象深刻。

6
我曾在D2009下成功地使用过这个SQLite Wrapper,并且只需几分钟就可以启动它。它具有索引功能和非常低的开销。(这是免费的,除了SQLite Dll之外,你不需要其他任何东西)
还有一个商业版的SQLite包装器来自Delphi Inspiration,网站上说他们也有免费的非商业和教育使用许可证。我没有用过那个。
我也用过Firebird嵌入式数据库,但是你还需要连接组件才能与它通信。我有IBObjects,我用它来处理服务器和嵌入式版本。我尝试过其他免费的Firebird数据库组件,但我并没有发现我喜欢的或者我觉得值得信赖的。
[编辑] 由于大多数人建议使用Firebird,这里是一些我过去尝试过或听说过的Firebird连接组件: Mercury Database Objects - 免费/开源
IBObjects - 商业 (我自己买了这个)
FIBPlus - 商业
Firebirds ODBC Driver - 免费/开源
ZeosLib - 免费/开源


使用过SQLite和Firebird。发现SQLite是更好的选择。 - user34411
哦,有趣的列表,谢谢。我曾经在Interbase和Firebird中使用过IBX,不过那是D7而不是D2009。如果2009/2010没有IBX,我可能会使用FIBPlus(我们购买了许可证,但实际上从未使用过),或者我会寻找一个像样的DBXPress驱动程序,因为我的其他所有东西(主要是SQL Server)都是使用DBXPress完成的,总体来说,对于基本的东西,它与IBX并没有太大的区别。 - robsoft
1
又有一个库 - AnyDAC(http://www.anydac.net)。它具有Firebird和SQLite本地驱动程序。 - oodesigner

3

这个问题中有一些很好的信息——SQLite3和Firebird Embedded似乎是不错的选择。


1

并发性?

我在一个(非Delphi)项目中使用了SQLite,并对其非常满意。

否则,我认为Delphi首选的嵌入式单文件DBMS似乎是Firebird。


1
尝试使用由Sybase提供的Advantage数据库(从Extended Systems购买)。

http://marketing.ianywhere.com/forms/ADS91-30-Day

如果您不需要客户端/服务器或互联网功能,它是免费的。

缺点是它不是100% VCL,因此VCL静态链接到DLL。

如果应用程序需要扩展,您将不必再次更改数据库。


1
我建议使用Postgresql作为数据库,我们在所有项目中都使用它,并在一张表中测试了超过400万条记录,效果非常好。

0

另一个选择是使用ADO和Microsoft Access数据库。唯一的缺点是用户必须安装Jet引擎和MDAC...但大多数机器都已经安装了。这样做的好处是可以轻松地将数据库升级到MSSQL。只需更改连接字符串以指向SQL Server数据库,并进行一些小的查询更改即可。


0

多年来我一直在使用NexusDB,它是一个小巧、可靠、灵活的数据库。它是用Delphi编写的,带有完整的源代码,可以完全编译到您的应用程序中(无需分发DLL),或者作为客户机/服务器系统运行。

很难知道它是否符合您的性能要求,但只要我索引了正确的字段,我就没有遇到过SQL查询性能的问题。这是一个表格对应一个文件的产品,但不要让这阻止您去尝试。

这是一个商业产品,但他们提供了仅DCU版本,可免费用于单用户/嵌入式应用程序。


0

Postgresql非常好,但它是一种重型机械,更接近于Oracle,因此您可以制作非常复杂的应用程序,但维护有点麻烦。

Firebird无论是嵌入式还是非嵌入式都非常棒, 对于2009年的连接,您可以使用来自devrace.com的FIB plus,他们有一个试用版本,只显示一个提示屏幕,因此如果不是商业应用程序,则可以使用。

否则,如果是商业应用程序,您可以花费300美元购买它,我还使用过devart组件进行Interbase / Firebird,它们也非常好 如果您想要免费使用,请使用zeos,但您会得到您所付出的http://sourceforge.net/projects/zeoslib/ SQL lite不是单个文件,如果是多用户,则不好用。


0

我正在完成一个大型应用程序的转换工作,该应用程序使用BDE/Paradox作为本地数据库和Oracle 8i作为远程数据库。

我正在使用DevArt的UniDAC。这使我可以使用单个组件集(完全摆脱了旧的BDE),可以将MSSQLServer作为本地数据库,并继续使用Oracle作为我的远程数据库。现在,我有可能更轻松地在任一端切换数据库,只需更改提供程序即可。

我喜欢这种方法,而且这些组件似乎做得非常好。

Jay (D2007)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接