我必须实现一个能够快速对XML数据执行任意复杂查询的搜索功能。如果用户进行查询,则必须搜索所有XML文件以查找可能的匹配项。 用户将拥有大量XML文件(几万个或更多),其大小通常为几千字节。所有XML文件都具有几乎相同的结构。
我已经对XPath进行了基准测试,但它对我的需求来说太慢了。
如何最有效地完成?是否可以为XML文件的内容创建索引(保留内容语义,而不仅仅是普通的全文搜索)?
将XML数据放入(嵌入式)SQL数据库并使用SQL执行查询是否有用?
我还有其他什么可能性?
答案 0 :(得分:0)
我会将XML导入数据库(例如SQLite)(加上元数据,XML信息),然后查询。
修改1:
你可以实现一个'drop folder',它在首次运行时被“索引”/导入。可以实现文件夹观察器以仅更新XML文件的新/更改。 SQLite可以在memeory中运行,以获得最快的I / O性能。
答案 1 :(得分:0)
最快的方法是在XML中创建自己的内存数据模型,将其转换为简单对象和简单类型,并以最适合您查询的结构进行组织。另外根据您的问题对其进行索引(使用Dictionary / SortedDictionary)。这种方法将比使用SQL数据库的方法快得多,使用SQL数据库也会比查询每个XML快得多。根据查询的复杂程度,这可以从一个相当简单的事情到非常困难的事情,在这种情况下你肯定会选择嵌入式数据库。
答案 2 :(得分:0)
SQL Server 2005+允许创建XML indexes。可以在SQL服务器上执行查询,而无需在应用程序端检索XML数据。此功能存在于免费的Express版本中。
答案 3 :(得分:0)
为索引xml的内容:使用Lucene(以及基于.net的实现)。这将允许您快速检索包含某些特定值的xml文档;那么你可能会更加关注这些。