我正在比较两个NOSQL DBMS:MongoDB和Neo4j。
在这些数据库中,我有一些足球队,其中包含有关通用名称,官方名称,国家,体育场,制服,ecc ...的信息
在MongoDB中,属性uniform是一个包含制服颜色的数组
在Neo4j中,每种颜色都是具有色调属性的节点。 UNIFORM是将团队与统一颜色联系起来的弧线。
我对它们进行了相同的查询,我想评估性能:查询是查找所有具有统一绿色调的团队的common_name。
现在,我可以说这个查询在Neo4j中比在MongoDB中效率更高吗? 我认为在MongoDB中我必须扫描每个文件的阵列均匀。而在Neo4j中,我必须访问图表。我不能在MongoDB中使用cursor.explain(“executionStats”)来查看executionTimeMillis,因为在我的数据库中文件太少,但在Neo4j中查询需要25毫秒。
答案 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小组有一个建模渠道来帮助解决这些问题。