我有一个带有 XML 的 DataModule,我需要进行搜索...
不幸的是,有超过 300,000 条记录,我无法进行循环逐一检查。
是否可以在不使用数据库的情况下进行查询?
还有其他解决方案吗?
我有一个带有 XML 的 DataModule,我需要进行搜索...
不幸的是,有超过 300,000 条记录,我无法进行循环逐一检查。
是否可以在不使用数据库的情况下进行查询?
还有其他解决方案吗?
XML 适用于少量信息,但对于这么大的数据集,关系数据库确实是唯一明智的选择,尤其是当您需要能够查询它时。
您可以使用 XPath 之类的东西进行搜索:但是,这只是意味着 XPath 实现会代表您进行搜索(这不一定会提高性能)。
我认为问一下为什么使用 XML 存储 300k 记录可能很重要?. 因为 XML 不是处理数据的最有效格式。
如果你被 XML 卡住了,那么你最好将 XML 文件读入某种数据库(你可能会得到一个内存表,但你可能会再次耗尽内存)。我认为,如果您使用 TXMLDocument 对象将 XML 文件加载到其中,您将遇到严重的性能问题或内存不足(不久前我在玩 250k 记录 xml 文件时遇到了麻烦)。
您可能可以直接使用 MSXML DOM(您可能可以导入类型库)或使用 SAX,这将允许您按顺序解析它,这两种方法我都没有太多经验。
有许多可能有用的内存数据库。至少您可以根据需要索引和查询数据。我知道的一个来自 components4developers.com。大卫
你没有说你是如何实现数据源的。我使用了通过 TXMLTransformProvider 连接的 TClientDataSet (确定不是 300K 记录),而是几千个。并且简单地设置过滤器和过滤属性似乎“查询”它就好了......
还是我错过了什么?
对于 Delphi 的 SAX 解析器,请查看以下 Stackoverflow 问题: