Neo4j建模建议

时间:2015-12-30 01:59:46

标签: neo4j

我正在为销售/购买物品的人开发实时聊天 我想知道在Neo4j中以最高效的方式实现在房间中存储消息。 (我可以看到2个选项)

1)将一个消息数组属性添加到R​​oom节点。 2)将消息作为节点并具有" NEXT"他们之间的关系。

什么选项对Neo4j来说效果最好? 只是为消息数组添加一个值会更容易处理Neo4j吗?

1 个答案:

答案 0 :(得分:1)

从性能的角度来看,使用Neo4j的操作成本如下:

  • 查找节点:O(1)
  • 横穿关系:O(1)

如果您将每条消息存储在一个节点中,则只需找到一个节点,因此该操作的总成本为O(1)(常量)

但是如果你将每条消息存储在自己的节点中,每条消息之间的NEXT关系,要提取N条消息,你需要找到N个节点,因此成本变为N * 2 * O(1) = O(N)(线性,2,因为, 1用于查找,1用于横向)

因此,考虑到这一点,似乎单个节点中的所有消息都更好,但当然,获取包含大量信息的节点的基本成本可能比获取一个节点要长一些较小的节点,所以为了确保,我建议测量加载一个包含所有消息的节点所需的时间,用不同的大小来查看它如何缩放,然后你可以决定:

  • 如果它以线性方式缩放=>两者都有类似的表现
  • 如果没有线性缩放:
    • 小于线性=>一个包含所有消息的节点会更好
    • 多于线性=>每条消息的节点会更好。

我怀疑它不会是线性的,但假设不是一个很好的指南,所以最好检查一下。

如果您在应用中使用Java 8,则可以使用以下方法测量操作时间:

Instant start = Instant.now();
// operation
Instant end = Instant.now();
Duration.between(start,end);