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

Neo4j 社交网络中通知的数据模型?,neo4j,notifications,social-networking,data-modeling,Neo4j,Notifications,Social Networking,Data Modeling,我与Neo4j建立了一个社交网络,包括: 节点标签:用户,发布,评论,页面,组 关系:像,写,有,加入,遵循 这就像Facebook 示例:A用户followB用户:当B用户有一个操作,如发布、评论、跟随另一个用户、跟随页面、加入组等,这样操作将发送到A。类似的,C,D,E遵循B的用户将收到相同的通知 我不知道如何为这个问题设计数据模型,我有一些解决方案: 为每个用户创建通知节点。如果执行了操作,则为n跟随者创建n通知。好处:我们可以检查这个用户是否看到了通知,对吗?但是,节点数量迅速增加,n

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

节点标签:
用户
发布
评论
页面

关系:
加入
遵循

这就像Facebook

示例:
A用户
follow
B用户
:当
B用户
有一个操作,如发布、评论、跟随另一个用户、跟随页面、加入组等,这样操作将发送到
A
。类似的,
C
D
E
遵循
B
的用户将收到相同的通知

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

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

  • 我认为最好的办法是选择1。正如您所说,您将能够知道跟随者是否阅读了通知。关于跟随者通知节点的数量:此问题称为“超级节点”或“密集节点”——连接过多的节点

    《学习Neo4j》一书(由Rik Van Bruggen撰写,可供下载)谈到了“密集节点”或“超级节点”,并说:

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

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

    我想你现在不用担心。如果将来您的followers节点出现问题,那么您将能够重构数据库模式。但现在要保持简单


    在一系列名为Max de Marzi的帖子中描述了构建模型的过程。也许它可以帮助你做出关于你的模型的最佳决策

    但是通知的问题,我还没有怎么设计。