6

我正在尝试更新一个遗留应用程序,该应用程序将其所有数据存储在 BDE Paradox 文件的黑客系统中。该程序在某些狭窄的条件下运行良好,但存在严重的性能问题。

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

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

它必须在 D2009 及更高版本下工作。任何人都可以提供一些建议吗?

4

10 回答 10

7

在这里为嵌入式 Firebird(和一般的 Firebird)投票!

我刚刚获得了将Interbase 6.0 应用程序移植到嵌入式 Firebird 1.5 的绝佳体验;在阅读文档片刻之后,实际转换花费了 20 分钟,现在我的应用程序在 Vista 和 Windows 7 中运行良好。如果您不需要多用户支持,那么我会认真考虑嵌入式 Firebird(如果您确实需要多用户支持,那么为什么不看看常规的 Firebird)。

它是用于数据库的单个文件和用于引擎的几个小 DLL,并且易于部署、维护和备份。在开发过程中有许多工具可以提供帮助,并且 Delphi 社区中对 IB 和 Firebird 的技术支持是首屈一指的。

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

关于性能的最后一点——好吧,无论如何,Interbase 总是很活泼,到目前为止,我对嵌入式 Firebird 的体验是它“尖叫”——真的,真的给我留下了深刻的印象。

于 2009-12-03T08:35:48.893 回答
6

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

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

我也使用了 Firebird 嵌入式,但你还需要有连接组件来与它对话。我有 IBObjects,这就是我用于服务器和嵌入式版本的东西。我已经尝试过其他免费的 Firebird 数据库组件,但还没有真正找到我喜欢或有信心的任何东西。

[编辑]
由于大多数人都建议使用 Firebird,这里有一些我过去尝试过或听说过的 Firebird 连接组件:

Mercury Database Objects - 免费/开源
IBObjects - 商业(我自己买了这个)
FIBPlus - 商业
Firebirds ODBC 驱动程序- 免费/开源
ZeosLib - 免费/开源

于 2009-12-02T20:43:36.770 回答
3

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

于 2009-12-02T19:23:05.553 回答
1

并发?

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

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

于 2009-12-02T19:24:53.600 回答
1

试用 Sybase 提供的 Advantage Database(从 Extended Systems 购买)

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

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

缺点是它不是 100% VCL,所以 VCL 包含静态链接到 DLL。

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

于 2009-12-02T22:40:17.353 回答
1

我建议使用 Postgresql 作为数据库,我们在我们工作的所有项目中都使用它,并在一张表中使用超过 400 万条记录对其进行了测试,并且运行良好。

于 2009-12-02T23:09:04.590 回答
0

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

于 2009-12-02T21:29:22.710 回答
0

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

很难知道它是否会满足您的性能要求,但只要我索引正确的字段,我的 SQL 查询性能就没有问题。这是每个表产品一个文件,但不要让这阻止您查看。

这是一个商业产品,但他们提供了一个仅限 DCU 的版本,只能在单用户/嵌入式应用程序中免费使用。

于 2009-12-02T22:26:57.580 回答
0

Postgresql 非常好,但它是一个重型机器,它更接近于 oracle,因此您可以执行非常繁重的应用程序,但维护起来有点麻烦

Firebird 在 2009 年非常适合嵌入或不用于连接,您可以使用来自 devrace.com 的 FIB plus,他们有一个试用版,它只显示一个唠叨屏幕,所以如果它不是一个商业应用程序也可以。

否则,如果它是一个商业应用程序,你可以花 300 美元购买它,我还使用了用于 interbase/firebird 的 devart 组件,如果你想要免费使用 zeos,它们也非常好,但你得到了你所支付的http://sourceforge .net/projects/zeoslib/ SQL lite 不是一个单一的文件,如果它是多用户的,那就糟透了

于 2009-12-03T09:44:06.530 回答
0

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

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

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

周杰伦 (D2007)

于 2009-12-04T00:08:39.223 回答