MongoDB与Neo4j查询

时间:2015-08-13 16:35:13

标签: mongodb neo4j nosql

我正在比较两个NOSQL DBMS:MongoDB和Neo4j。 在这些数据库中,我有一些足球队,其中包含有关通用名称,官方名称,国家,体育场,制服,ecc ...的信息 在MongoDB中,属性uniform是一个包含制服颜色的数组 在Neo4j中,每种颜色都是具有色调属性的节点。 UNIFORM是将团队与统一颜色联系起来的弧线。
我对它们进行了相同的查询,我想评估性能:查询是查找所有具有统一绿色调的团队的common_name。 enter image description here

现在,我可以说这个查询在Neo4j中比在MongoDB中效率更高吗? 我认为在MongoDB中我必须扫描每个文件的阵列均匀。而在Neo4j中,我必须访问图表。我不能在MongoDB中使用cursor.explain(“executionStats”)来查看executionTimeMillis,因为在我的数据库中文件太少,但在Neo4j中查询需要25毫秒。

1 个答案:

答案 0 :(得分:2)

你当然应该有更多文件要测试。但有一些事情:

首先,如果你还没有,你应该在Neo4j中有一个索引。

CREATE INDEX ON :colour(tone)

这应该允许Neo4j找到您正在寻找的节点,然后快速浏览到相应的Team节点。顺便提一下,Neo4j标签的标准是UpperCaseFirstCamelCase。请参阅:http://nigelsmall.com/zen

其次,这是为什么难以比较具有不同范例的数据库的一个小例子。在MongoDB中,您将颜色(或颜色;)表示为属性,但在Neo4j中,您将其表示为单独的节点。这与MongoDB中的实际情况不同,您有一个实体,在Neo4j中,您有两个实体。在Neo4j中,您还可以在Team节点上使用属性,并在那里放置索引。

问题是MongoDB没有联接/关系的概念。因此,如果您尝试使用colours表,那么您将对Mongo遇到更多困难。我建议拥有一个跨越至少5-10个实体的更大的域模型,以便您可以更好地进行比较。您应该特别关注可能需要跨实体查询/聚合的方式。

如果您希望帮助我们更好地了解如何在Neo4j中进行建模,那么现在的公众用户就是这样。 Slack小组有一个建模渠道来帮助解决这些问题。