0

我正在使用 neo4jphp 开发论坛的 Web 应用程序,其中多个用户将评论同一主题,也可以评论评论(如嵌套评论)。

那么将这些数据存储在 neo4j 中的最佳实践是什么?

我想到了以下选项:

  1. 为每个评论、子评论创建新节点,并在主题和评论以及子评论之间创建关系

  2. 为每个主题、每个评论创建节点并在它们之间创建关系,并将所有评论作为属性添加到同一评论节点。

我认为第一个选项更好,但我担心随着主题和评论数量的增加而要创建的节点数量。

随着节点数量的增加,neo4j 的性能和效率是否会下降?

我们应该为 sql 中的每个记录/行创建单独的节点吗?

最佳做法是什么?

4

1 回答 1

1

我在 trartsaris.gr 上完全使用 php 和 Neo4j 2.0 制作了我的博客。在进行了大量测试并考虑了未来之后,我决定以您描述的第一种方式启用评论。这意味着在您的架构设计结束时,您的数据库应该如下所示

(m:Post "或主题")-[:COMMENT]-(n:Comment)-[:SUB_COMMENT]-(s:SubComment)

所以我们有一个节点,它是帖子或主题,这个节点连接了带有标签:评论和关系:评论的节点,这些评论可以有带有标签的子评论:SUB_COMMENTS。您不必担心将创建的节点数量以及如何获取它们,因为一切都足够快。您可以阅读我对这个问题的回答。让我们看看为什么我更喜欢第一种方式,我正在考虑未来的潜在用例。稍后您可以有这样的事情:我是一个用户,我对另一个用户的主题的评论发表了评论。基于此操作,我可以在我的数据库中搜索该用户的相关主题并提出进一步阅读的建议。

MATCH (n:User(ID))-[:WROTE_SUB_COMMENT]-(s:SubComment)-[:SUB_COMMENT]-(c:Comment)-[:COMMENT]-(p:Post)-[:WRITTEN_BY]-(k:User)-[:WRITTEN_BY]-(g:Post) WHERE blablabla RETURN g

以一种简化的方式,我们说我们想要找到由初始用户为其撰写子评论的用户撰写的所有帖子。现在可能看起来有点混乱,但是随着你越来越深入 Neo4j,你会发现一切都会一天比一天容易。我希望这会有所帮助。

于 2014-02-01T20:10:26.917 回答