社交网络中的通知数据模型?

时间:2017-05-20 10:55:02

标签: neo4j notifications social-networking data-modeling

我使用Neo4j构建社交网络,其中包括:

节点标签:UserPostCommentPageGroup

关系:LIKEWRITEHASJOINFOLLOW,......

就像Facebook一样。

示例:A user关注B user:当B执行诸如发帖,评论等操作时,请关注其他用户,关注页面,加入群组等,以便采取相应措施已发送至A。类似地,关注C的{​​{1}},DE用户将收到相同的通知。

我不知道如何为这个问题设计数据模型,我有一些解决方案:

  1. 为每个用户创建B个节点。如果执行了某项操作,请为Notification关注者创建n通知。好处:我们可以检查这个用户是否看过通知,对吧?但是,节点数量迅速增加,功率为n
  2. 为每个调用API通知创建一个查询(对于客户端应用程序),此查询仅在特殊时间(24小时或2,3天)内获取用户的操作列表。但是,关注者不会检查此通知,但此查询可能会使服务器缓慢。
  3. 创建数量有限的节点,例如每个用户20个节点。
  4. 在24小时内创建无限节点(包括操作时间),并且这些节点具有操作时间属性>将删除24小时(到期时间可能是2,3天)。 谁能帮我解决这个问题?我应该选择哪种解决方案或新方式?

1 个答案:

答案 0 :(得分:3)

我认为最好的方法是选项1.正如您所说,您将能够知道关注者是否已阅读通知。关于跟随者的通知节点的数量:这个问题被称为"超级节点"或者"密集节点" - 具有太多连接的节点。

“学习Neo4j”一书(作者Rik Van Bruggen,可用于download in the Neo4j's web site)谈论"密集节点"或者"超级节点"并说:

  

" [超级节点]成为图遍历的真正问题,因为图形   数据库管理系统将不得不评估所有连接的   与该节点的关系,以确定下一步   将在图表遍历中。"

本书提出了一个解决方案,包括在关注者和通知之间添加元节点(在您的情况下)。这个元节点最多应该有一百个连接。如果当前元节点达到100个连接,则必须创建一个新的元节点并将其添加到层次结构中,根据图中的示例,显示一个受欢迎的艺术家和粉丝的示例:

Dense node

我想你现在不担心。如果将来您的关注者节点成为问题,那么您将能够重构数据库模式。但是现在保持简单!

在一系列名为"Building a Twitter clone with Neo4j"的帖子中,Max de Marzi描述了构建模型的过程。也许它可以帮助您做出关于您的模型的最佳决策!