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会收到相同的通知.
我不知道如何为这个问题设计数据模型,我有一些解决方案:
Notification为每个用户创建节点.如果执行了某个操作,请n为n关注者创建通知.好处:我们可以检查这个用户是否看过通知,对吧?但是,节点数量迅速增加,功率增加n.我认为最好的方法是选项1。正如你所说,你将能够知道关注者是否已阅读通知。关于follower通知节点的数量:这个问题被称为“超级节点”或“密集节点”——连接数过多的节点。
《学习 Neo4j》一书(作者 Rik Van Bruggen,可在 Neo4j 网站下载)讨论“密集节点”或“超级节点”并说道:
“[超级节点]成为图遍历的一个真正问题,因为图数据库管理系统必须评估与该节点的所有连接关系,以确定图遍历的下一步是什么。”
这本书提出了一个解决方案,包括在关注者和通知之间添加元节点(在您的情况下)。该元节点最多应有一百个连接。如果当前元节点达到 100 个连接,则必须创建新的元节点并将其添加到层次结构中,如图所示,显示了流行艺术家和您的粉丝的示例:
我想你现在不用担心。如果将来您的关注者节点出现问题,那么您将能够重构您的数据库架构。但现在让事情变得简单!
在名为“使用 Neo4j 构建 Twitter 克隆”的系列文章中,Max de Marzi 描述了构建模型的过程。也许它可以帮助您对模型做出最佳决策!