2009-12-02 62 views
6

的本地数据库我正试图更新一个传统的应用程序,它在BDE Paradox文件的黑客入侵系统中执行其所有数据存储。该计划在一定的狭窄条件下工作得很好,但它存在严重的性能问题。寻找D2009 +

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

最后一个很重要。目前的系统被编入索引,但这似乎并不重要。所有的查询似乎都运行在O(N)时间,其中N是表的总大小,当表开始变大时,它会变得非常慢。我不确定为什么,但那必须消失。

它必须在D2009及更高版本下工作。谁能提供一些建议?

回答

7

另一个投票嵌入式火鸟(和火鸟一般)!

我刚刚有一个真棒体验将Interbase 6.0应用程序移植到嵌入式Firebird 1.5;在阅读文档一小段时间后,实际转换耗时20分钟,现在我的应用程序在Vista和Windows 7中运行愉快。如果您不需要多用户支持,那么我会认真考虑嵌入式Firebird(如果您确实需要多用户支持,为什么不看常规的Firebird)。

这是一个单独的db文件和几个引擎小DLL,它很容易部署,维护和备份。在开发过程中有许多工具可以帮助您,IB和Firebird的Delphi社区的技术支持是首屈一指的。

SQL支持在约束,触发器和存储过程方面非常出色(我们也有UDF来帮助增强语言 - 可以在Delphi中编写的DLL并用作数据库中的内联函数等等。灵活)。

关于性能的最后一点 - 无论如何,Interbase总是非常活泼,而我迄今为止嵌入式Firebird的经验就是它“尖叫” - 真的,印象非常深刻。

3

this question有一些很好的信息 - SQLite3和Firebird嵌入式似乎是很好的选择。

1

并发性?

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

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

7

我在D2009下使用这个SQLite Wrapper取得了很好的成功。我在几分钟内完成并运行了它。它具有索引和非常低的开销。 (这一个是免费的,你不需要除SQLite Dll以外的任何其他东西)

还有一个商业SQLite包装从Delphi Inspiration和该网站说,他们有一个免费的非商业和教育使用许可以及。我没有用过那个。

我也使用过Firebird嵌入式,但是您还需要连接组件来与它交谈。我有IBObjects,这是我用于服务器和嵌入式版本。我曾尝试过其他免费Firebird数据库组件,但还没有真正找到任何我喜欢的或者说我觉得有信心。

[编辑]
由于大多数人都在暗示火鸟,这里有一些连接组件对于火鸟,我在过去的或已经尝试了,我听说过:

Mercury Database Objects - 免费/开源
IBObjects - 商业(我已经买了这一个我自己)
FIBPlus - 商业
Firebirds ODBC Driver - 免费/开源
ZeosLib - 免费开源

+0

同时使用SQLite和Firebird。发现SQLite更好的选择 – Gerard 2009-12-02 21:50:24

+0

+1噢,有趣的列表,谢谢。我已经用Interbase和Firebird使用了IBX,虽然那是D7而不是D2009。如果IBX不适用于2009/2010,我可能会使用FIBPlus(我们购买了一个许可证,但我们从未实际使用它),或者我会寻找一个体面的DBXPress驱动程序作为我所有其他的东西(SQL Server,大多数情况下)是使用DBXPress完成的,整体而言,它对于基本的东西来说不是/不同于IBX。 – robsoft 2009-12-03 15:56:04

+1

多一个库 - AnyDAC(http://www.anydac.net)。它具有Firebird和SQLite本机驱动程序。 – oodesigner 2010-07-11 13:18:55

0

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

0

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

很难知道它是否能够满足您的性能要求,但是我没有对SQL查询性能产生任何问题,前提是我在索引正确的字段。这是每桌产品的一个文件,但不要让你停下来看看。

这是一款商用产品,但它们提供仅限于单用户/嵌入式应用的免费DCU版本。

1

尝试利用数据库,由Sybase提供的(从扩展系统购买)

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

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

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

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

1

我会推荐使用Postgresql作为数据库,我们在所有的项目中都使用它,并且在一张表中测试了超过400万条记录,并且工作得很好。

0

PostgreSQL是非常好的,但它是一个重型机械这是更接近甲骨文这样你就可以做的非常沉重的应用程序,但有点痛保持

火鸟是梦幻般嵌入或不 用于连接2009年你可以使用FIB plus从devrace.com他们有一个试用版,只显示一个唠叨的屏幕,所以如果它不是一个商业应用程序,它是可以的。

其他如果它是一个商业应用程序,你可以花300美元购买它,我也使用devart组件为interbase/firebird,他们也很好 如果你想免费使用zeos但你得到你所支付的http://sourceforge.net/projects/zeoslib/ SQL精简版是不是一个单一的文件,如果它是一个多用户它吮吸

0

我在完已经使用BDE /悖论本地数据库和Oracle 8i中对于远程大型应用程序的转换工作D b。

我正在使用DevArt的UniDAC。这允许我一个单独的组件(完全免费的旧BDE),可以作为本地数据库击中MSSQLServer,并继续作为我的远程命中Oracle。我现在可以更轻松地在任一端切换数据库,只需更改提供者即可。

我喜欢这种方法,并且组件似乎做得很好。

Jay (D2007)