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

data model for notification in social network?

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

节点标签:UserPostCommentPageGroup

关系:LIKEWRITEHASJOINFOLLOW、...

它就像 Facebook。

示例:A user 关注 B user:当 B 进行了诸如 post、评论、关注其他用户、关注页面、加入群组等操作. 因此该操作将发送到 A。类似地,CDE 关注 B 的用户将收到相同的通知。

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

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

我认为最好的方法是选项 1。如您所说,您将能够知道关注者是否已阅读通知。关于follower的通知节点数:这个问题叫做"supernodes"或者"dense nodes"——连接太多的节点。

《学习 Neo4j》一书(作者 Rik Van Bruggen,可用于 download in the Neo4j's web site)谈论 "Dense node" 或 "Supernode" 并说:

"[supernodes] becomes a real problem for graph traversals because the graph database management system will have to evaluate all of the connected relationships to that node in order to determine what the next step will be in the graph traversal."

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

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

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