我将接收数以万计的XML文件,随着时间的推移,XML文件将随着新文件的增加而继续增长。我需要能够作为一个整体来查询这些文件(比如SQL查询数据库中的所有记录)。针对这个问题,我应该考虑哪些技术和/或方法?
我觉得我应该调查一下XQuery。不过,我对它不太熟悉。
我可能运行的示例查询:
这篇文章似乎建议可以使用XQuery:http://www.ibm.com/developerworks/xml/library/x-xquerymaven/index.html?ca=。由于我正在实现LAMP解决方案,我认为可能有XQuery库可用。这是否意味着我不需要XML数据库来查询大量的XML文件?
发布于 2014-06-19 06:00:34
如果所有查询的性质都允许对XML文件进行顺序处理,则可以使用xpath/xslt或XQuery在不使用XML数据库的情况下这样做。例如:
对于任何优秀的xslt处理器,这些都是非常简单的xpath表达式。您只需遍历特定的文件,将每个文件加载到内存中,运行xpath查询并从每个文件收集结果( xpath不适合您)。XQuery似乎允许收集结果,但如下所示。
这在xpath中是不容易实现的(至少不是很有效)。从您链接到的文章中,可以看到一个例子,即XQuery如何在没有数据库的情况下完成连接,但它需要将所有的XML文件加载到主内存中(当您有上万个文件时,这是非常不现实的)。但是,如果您从前两个查询中获得所有结果,则可以使用您的主机语言(在您的例子中是PHP)“连接”它们,但是您必须“手动编写程序”。然而,一个像样的XML数据库应该能够为您解决这些问题--不需要通过适当的索引将所有文件加载到内存中。
因此,这都归结为一个问题:您期望的查询有多少次,允许顺序处理的有多少次,以及有多少次不允许顺序处理。如果您期望的查询少于5个不同的查询,我可能不会使用数据库,而是尝试手动编写每个非顺序的要求。如果您期望有超过100个不同的查询,而且您甚至无法预见它们的外观,那么使用数据库可能是合适的(但是YMMV)。最后,你必须自己找出什么最适合你的需求。
发布于 2014-07-17 20:47:11
我使用了eXist来使用xquery (http://exist-db.org)在不同的集合中存储和查询许多XML文件。与它的接口有很多种方法,并且已经证明它对我的应用程序是可靠的。
https://softwareengineering.stackexchange.com/questions/245429
复制相似问题