我正在开发一个项目(平台),我正在使用neo4j在用户之间建立连接。用户可以通过以下方式连接到平台上的其他用户。
当用户使用Facebook登录时,我会找到已经在使用我们平台的共同朋友。在那里,我通过创建一个新节点(当前用户)在我的图形数据库中建立连接,并与他通过facebook知道的所有现有节点建立连接。
如果两个用户都在同一社团/社区中,则一个用户也会与其他用户建立联系。所以用例是,一旦用户更新他的住宅地址(社会名称,城市),我就会在图形数据库中进行查询,并获得所有同样保持在同一社团中的节点,并使用关系名称为& #34;同一社会"。
如果两个用户都在同一所大学或学校学习,则用户可能与其他用户相关联。我在两个节点之间建立了关系"同一所大学/学校"。
在neo4j中模拟上述问题的最佳方法是什么?如果我在DB中进行查询以获取给定两个节点之间所有关系的所有关系类型和最短路径,那么哪个模型将针对此类查询进行优化?
答案 0 :(得分:0)
只需在用户之间建立关系
(user)-[:FRIEND_OF]-(user)
neo4j中的关系总是方向性的,但你可以忽略方向,因为在这种情况下,它没有多大意义。穿越“向后”的关系没有性能损失。
创建一个代表您的社团/社区的节点,并将居住在那里的所有用户链接到该节点。这有几个好处:
当您向社区添加新用户时,您只创建一个关系(与将用户直接链接到所有用户,即N个关系相比),同样可以将用户从社区中删除。
您可以在用户和社区之间创建不同的关系
(user)-[:LIVES]-(community1)
(user)-[:WORKS]-(community2)
这与no基本相同。 2.您可以通过使用不同的标签/属性来区分社区类型(学校等)。
在此模型中找到两个节点之间的最短路径将为您提供最接近的连接,即“通过某种东西知道”的类型。您可以按关系类型/社区类型等限制路径。