我正在尝试更新一个遗留应用程序,该应用程序在一个黑客攻击的BDE Paradox文件系统中完成所有数据存储。该程序在某些狭窄的条件下运行良好,但它有严重的性能问题。
我想通过更新到更好的数据库系统来尝试改进。我需要的是一个本地数据库,最好是我可以将整个东西存储在一个文件中,而不是当前的“每个表一个或多个文件”系统。它必须支持外键关系和表索引,并且必须能够从包含数十万个元素的表的查询中快速返回结果。
最后一个很重要。当前系统已编入索引,但这似乎并不重要。所有查询似乎都在O(N)时间内运行,其中N是表的总大小,当表开始变大时,它会变得非常慢。我不确定为什么,但那必须消失。
它必须在D2009及更高版本下工作。任何人都可以提供一些建议吗?
答案 0 :(得分:7)
此处对嵌入式Firebird(以及一般的Firebird)进行了另一次投票!
我刚刚有一个 awesome 体验将Interbase 6.0应用程序移植到嵌入式Firebird 1.5;在阅读文档后不久,实际转换花费了20分钟,现在我的应用程序在Vista和Windows 7中运行愉快。如果您不需要多用户支持,那么我会认真看看嵌入式Firebird(如果你确实需要多用户支持,为什么不看看常规的Firebird呢?
这是db的单个文件和引擎的几个小DLL,它易于部署,维护和备份。在开发过程中有许多工具可以帮助,而对于IB和Firebird,Delphi社区的技术支持是首屈一指的。
SQL支持非常适用于约束,触发器和存储过程(我们还有UDF来帮助扩充语言 - 可以用Delphi编写并在数据库中用作内联函数等的DLL。非常快,非常灵活)。
关于性能的最后一点 - 无论如何,Interbase总是非常活泼,到目前为止我对嵌入式Firebird的体验是它'尖叫' - 真的,真的给我留下了深刻的印象。
答案 1 :(得分:6)
我在D2009下使用了SQLite Wrapper并取得了很好的成功。我在几分钟内完成并运行。它具有索引和非常低的开销。 (这个是免费的,除了SQLite Dll之外你不需要任何其他东西)
还有来自Delphi Inspiration的商业SQLite包装器,该网站说他们也有免费的非商业和教育用途许可证。我还没用过那个。
我还使用了嵌入式Firebird,但您还需要连接组件与之通信。我有IBObjects,这就是我用于服务器和嵌入式版本的东西。我尝试了其他免费的Firebird数据库组件,但没有真正找到我喜欢的或者我对此感到自信。
<强> [编辑] 强>
由于大多数人都在向Firebird提出建议,以下是Firebird的一些连接组件,我过去曾尝试过,或者我听说过:
Mercury Database Objects - 免费/开源
IBObjects - 商业(我自己买了这个)
FIBPlus - 商业
Firebirds ODBC Driver - 免费/开源
ZeosLib - 免费/开源
答案 2 :(得分:3)
this question中提供了一些很好的信息 - SQLite3和Firebird Embedded似乎是不错的选择。
答案 3 :(得分:1)
并发?
我在一个(非Delphi)项目中使用过SQLite,对此非常满意。
否则,我认为Delphi的首选嵌入式单文件DBMS似乎是Firebird。
答案 4 :(得分:1)
尝试使用Sybase提供的Advantage数据库(从扩展系统购买)
http://marketing.ianywhere.com/forms/ADS91-30-Day
如果您不需要客户端/服务器或互联网功能,它是免费的。
缺点是它不是100%VCL,所以VCL包含了与DLL的静态链接。
如果应用程序需要扩展,您将不必再次更改数据库。
答案 5 :(得分:1)
我建议使用Postgresql作为数据库,我们在我们工作的所有项目中使用它,并在一个表中测试超过400万条记录并且工作得很好。
答案 6 :(得分:0)
另一种选择是使用ADO和微软访问数据库。唯一的缺点是用户必须安装Jet引擎和MDAC ......大多数机器都这样做。这样做的好处是它可以轻松扩展到MSSQL。只需将连接字符串更改为指向SQL Server数据库,然后进行一些次要的查询更改。
答案 7 :(得分:0)
我已经使用NexusDB多年了,它是一个小巧,可靠,灵活的数据库。它是用Delphi编写的,带有完整的源代码,可以完全编译到你的应用程序中(无需分发DLL)或作为客户端服务器系统运行。
很难知道它是否符合您的性能要求,但是如果我正在索引正确的字段,我的SQL查询性能没有问题。这是每个桌面产品的一个文件,但不要让它阻止你看看。
这是商业产品,但它们只提供DCU版本,只能在单用户/嵌入式应用程序中免费使用。
答案 8 :(得分:0)
Postgresql非常好但是它是一个重型机器,它更接近oracle所以你可以做很重的应用程序,但有点痛苦维护
Firebird是非常棒的嵌入式或非嵌入式 对于2009年的连接,您可以使用来自devrace.com的FIB plus,他们有一个只显示唠叨屏幕的试用版,所以如果它不是商业应用,那就没关系。
否则,如果它是一个商业应用程序,你可以花300美元购买它,我也使用devart组件interbase / firebird他们也非常好 如果你想免费使用zeos,但你得到你为http://sourceforge.net/projects/zeoslib/支付的费用 SQL lite不是单个文件,如果它是多用户,它很糟糕
答案 9 :(得分:0)
我正在努力完成对本地数据库使用BDE / Paradox而远程数据库使用Oracle 8i的大型应用程序的转换。
我正在使用DevArt的UniDAC。这允许我一个组件集(完全没有旧的BDE),可以将MSSQLServer作为本地数据库,并继续作为我的远程命中Oracle。我现在可以更容易地在任何一端切换数据库,只需更换提供商即可。
我喜欢这种方法,组件似乎做得很好。
杰 (D2007)