在MongoDB中存储大型XML

时间:2011-10-10 10:59:43

标签: xml mongodb

我有一个非常庞大的xml(大小> 10mb和40+元素)。目前,我们将此类xml存储在Oracle数据库中,并使用xquery查询和检索部分xml。此过程很慢,需要多次db调用。我们正在探索mongodb来存储这个xml并进行查询。 我justed将xml转换为json并加载到mongo集合中,它将巨大的json数据存储在flash中。它将xml节点存储为嵌套文档。但是当我查询(使用find)最内层元素时,它总是返回整个doc,包含具有不匹配元素值的节点。我希望只有少数节点匹配给定的节点值。 如果有最好的方法在mongo db中存储这么大的xml文件,请告诉我。并且还让我知道如何检索具有查询中指定的确切值的内部节点。提前谢谢。

5 个答案:

答案 0 :(得分:10)

您是否考虑过尝试使用最新的XML数据库,例如BaseX(http://basex.org)?它可能会给你带来更好的结果,特别是如果你以前使用过XQuery。

答案 1 :(得分:5)

我遇到了同样的问题。在我的例子中,每个XML文件中的顶级节点总是包含一个较大的较小节点列表,所以我最终存储了这些项目。为此,我编写了自己的xml-to-json命令行工具。我使用它将10GB的XML数据转换为JSON,格式为mongoimport可以吃。

答案 2 :(得分:3)

你应该记住几个事实:

数字1 - MongoDB只返回整个文档,具体取决于它是否被击中,没有任何功能只能返回它的一部分(2011年10月10日),如果你需要过滤你必须用你自己的代码来实现它。

数字2 - 注意 elemmatch 关键字。它表示只在同一个子文档中搜索一些命中,但不是在整个文档中搜索,所以你可能会在这里感到困惑。

Number 3 - 与RDBMS-s相比,没有正确的策略将您的聚合划分为mongo中的集合。因此,不同的数据表示可能会解决您的问题。

第4号 - 尽管有关“无法正确的方式”的第3条评论,但一般建议保持文档的大小不超过10 MB

答案 3 :(得分:2)

您应该查看Sausalito XML数据库:http://www.28msec.com。 它使用MongoDB作为数据存储区。

答案 4 :(得分:1)

这是过滤多级嵌入文档的行为,通常匹配过滤器会返回整个文档,而不是子集。

查看我对mongodb-querying-array-elements-within-a-documenthow-to-find-the-matched-record-in-mongodb的回答以获取更多信息

可能您可以添加当前的示例xml架构,有人会帮助您构建应用程序。