2009-10-06 46 views
4

我有一个XML格式的DataModule中,我需要做一个搜索...如何搜索大型XML数据集?

不幸的是有超过30万条的记录,我不能让一个循环来检查一个接一个。

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

有没有另一种解决方案?

回答

3

XML对少量信息很好,但对于一个数据集大,关系数据库确实是唯一明智的选择,especially if you need to be able to query it.

+1

我刚刚读了乔尔的软件后,这是很对的话题 - 即使它是写于2001年 – Alister 2009-10-06 03:14:51

3

您可以使用类似的XPath查询:然而,这只是意味着XPath实现代表您进行搜索(这不一定会提高性能)。

1

有许多内存数据库可能有用。至少你可以根据需要索引和查询数据。我所知道的是来自components4developers.com。 David

2

我认为这可能很重要,请问为什么使用XML存储300k记录?。由于XML不是用来处理数据的最有效的格式。

如果您遇到了XML问题,那么您最好将XML文件读入某种数据库(您可能会忘记内存表中的内容,但是可能会再次耗尽内存)。我认为如果你使用TXMLDocument对象来加载XML文件,你会遇到严重的性能问题或内存不足(当我在播放250k记录XML文件时,我遇到了麻烦)。

您可以直接使用MSXML DOM(您可以导入类型库),也可以使用SAX,这样可以顺序解析它,这两者我都没有多少经验。

+1

是,SAX是要走的路。它曾经是MSXML的一部分。现在还不确定。 – 2009-10-06 10:20:11

0

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

或者我错过了什么?

+0

我读过它。你知道一个简单的例子,所以我可以理解吗? – Leo 2009-10-06 17:51:39

+0

1.在DM上配置TClientDataSet。在DM上配置一个TXMLTransformProvider。将Tranform设置为提供者。从工具菜单启动XML Mapper - 学习如何使用它:(这不是很直观,一旦文件通过XTR文件进行映射并连接,就像往常一样使用TDatasoure。 – Despatcher 2009-10-07 17:28:24