Neo4j数据建模查询



我正在一个项目(平台)上工作,我使用neo4j在用户之间建立连接。用户可以通过以下不同的方式连接到平台上的其他用户。

  1. 当一个用户登录Facebook时,我得到他已经在使用我们平台的共同朋友。在那里,我通过创建一个新节点(当前用户)在我的图形数据库中建立连接,并与他通过facebook认识的所有现有节点建立连接。

  2. 如果两个用户都在同一个社会/社区,则一个用户也可以与其他用户连接。因此,用例是,一旦用户更新了他的居住地址(社会名称,城市),我就会在graph db中进行查询,并获得所有也留在同一社会中的节点,并使用关系名称为"同一社会"的节点创建这个新用户。

  3. 如果同一用户在同一所大学或学校学习,则同一用户可能与其他用户连接。我在两个节点之间建立了关系为"同一学院/学校"的连接

在neo4j中建模上述问题的最佳方法是什么?如果我在DB中进行查询以获得给定两个节点之间所有关系的所有关系类型和最短路径,哪个模型将针对这种类型的查询进行优化?

  1. 简单地创建用户之间的关系

    (user)-[:FRIEND_OF]-(user)

    neo4j中的关系总是有方向性的,但是您可以忽略方向,因为在这种情况下,它没有多大意义。"向后"遍历关系没有性能损失。

  2. 创建一个代表您的社会/社区的节点,并将居住在那里的所有用户链接到该节点。这有几个好处:

    • 当你向社区添加新用户时,你只创建一个关系(与将用户直接链接到所有用户相比,这是N个关系),从社区删除用户也是如此。

    • 你可以在用户和社区之间创建不同的关系

    (user)-[:LIVES]-(community1) (user)-[:WORKS]-(community2)

  3. 这基本上与no相同。2. 您可以通过不同的标签/属性来区分不同类型的社区(学校等)。

在这个模型中找到两个节点之间的最短路径将给你它们最密切的联系,那种"通过某事知道"。您可以通过关系类型/社区类型等来限制路径。

最新更新