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

kie*_*bui 5 notifications data-modeling social-networking neo4j

我用Neo4j构建了一个社交网络,它包括:

节点标签:User,Post,Comment,Page,Group

关系:LIKE,WRITE,HAS,JOIN,FOLLOW,...

就像Facebook一样.

示例:A user关注B user:当B有诸如发布,评论,跟随其他用户,关注页面,加入组等操作时,将发送操作A.类似的,C,D,E随后用户B会收到相同的通知.

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

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

Bru*_*res 5

我认为最好的方法是选项1。正如你所说,你将能够知道关注者是否已阅读通知。关于follower通知节点的数量:这个问题被称为“超级节点”或“密集节点”——连接数过多的节点。

《学习 Neo4j》一书(作者 Rik Van Bruggen,可在 Neo4j 网站下载)讨论“密集节点”或“超级节点”并说道:

“[超级节点]成为图遍历的一个真正问题,因为图数据库管理系统必须评估与该节点的所有连接关系,以确定图遍历的下一步是什么。”

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

密集节点

我想你现在不用担心。如果将来您的关注者节点出现问题,那么您将能够重构您的数据库架构。但现在让事情变得简单!

在名为“使用 Neo4j 构建 Twitter 克隆”的系列文章中,Max de Marzi 描述了构建模型的过程。也许它可以帮助您对模型做出最佳决策!