4

我有一个带有 XML 的 DataModule,我需要进行搜索...

不幸的是,有超过 300,000 条记录,我无法进行循环逐一检查。

是否可以在不使用数据库的情况下进行查询?

还有其他解决方案吗?

4

6 回答 6

3

XML 适用于少量信息,但对于这么大的数据集,关系数据库确实是唯一明智的选择,尤其是当您需要能够查询它时。

于 2009-10-06T02:24:47.930 回答
3

您可以使用 XPath 之类的东西进行搜索:但是,这只是意味着 XPath 实现会代表您进行搜索(这不一定会提高性能)。

于 2009-10-06T02:31:17.977 回答
2

我认为问一下为什么使用 XML 存储 300k 记录可能很重要?. 因为 XML 不是处理数据的最有效格式。

如果你被 XML 卡住了,那么你最好将 XML 文件读入某种数据库(你可能会得到一个内存表,但你可能会再次耗尽内存)。我认为,如果您使用 TXMLDocument 对象将 XML 文件加载到其中,您将遇到严重的性能问题或内存不足(不久前我在玩 250k 记录 xml 文件时遇到了麻烦)。

您可能可以直接使用 MSXML DOM(您可能可以导入类型库)或使用 SAX,这将允许您按顺序解析它,这两种方法我都没有太多经验。

于 2009-10-06T03:29:17.710 回答
1

有许多可能有用的内存数据库。至少您可以根据需要索引和查询数据。我知道的一个来自 components4developers.com。大卫

于 2009-10-06T02:51:46.817 回答
0

你没有说你是如何实现数据源的。我使用了通过 TXMLTransformProvider 连接的 TClientDataSet (确定不是 300K 记录),而是几千个。并且简单地设置过滤器和过滤属性似乎“查询”它就好了......

还是我错过了什么?

于 2009-10-06T16:08:18.927 回答
0

对于 Delphi 的 SAX 解析器,请查看以下 Stackoverflow 问题:

是否有适用于 Delphi 和 Free Pascal 的 SAX 解析器?

于 2010-11-17T17:24:47.280 回答