Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j中的朋友关系建模_Neo4j_Relationship_Bidirectional - Fatal编程技术网

Neo4j中的朋友关系建模

Neo4j中的朋友关系建模,neo4j,relationship,bidirectional,Neo4j,Relationship,Bidirectional,我需要在neo4j中模拟“朋友”关系。关系可能有“好友”或“朋友”等类型。 例如,A和B是朋友。A认为B是“伙伴”,B认为A是“朋友”。 我认为有两种方法可以对此进行建模 创建两个关系。属性“type”为“Buddy”的A-->B和属性“type”为“Friend”的B-->A 创建一个具有两个属性“向前类型”和“向后类型”的关系。如果关系是从A到B,“向前类型”=“好友”和“向后类型”将是“朋友” 请让我知道哪一个在穿越复杂性/性能方面是好的。 谢谢。 < P>当建模双向关系时,有两件事要考虑

我需要在neo4j中模拟“朋友”关系。关系可能有“好友”或“朋友”等类型。 例如,A和B是朋友。A认为B是“伙伴”,B认为A是“朋友”。 我认为有两种方法可以对此进行建模

  • 创建两个关系。属性“type”为“Buddy”的A-->B和属性“type”为“Friend”的B-->A

  • 创建一个具有两个属性“向前类型”和“向后类型”的关系。如果关系是从A到B,“向前类型”=“好友”和“向后类型”将是“朋友”

  • 请让我知道哪一个在穿越复杂性/性能方面是好的。
    谢谢。

    < P>当建模双向关系时,有两件事要考虑。 第一个是这种关系在各个方向上的语义含义。在你的情况下,仅仅给关系中的朋友打电话是不够的,因为你有不同类型的朋友

    另一个需要考虑的问题是,这种关系的含义是否可以(以直接或相反的方式)从任何一个方向暗示出来。这些关系的示例有
    PARENT
    CHILD
    关系,其中父项表示相反方向的子项。在你的情况下,它不是。传出的朋友关系并不意味着传入的朋友关系。 在Neo4j中,在任何方向上遍历关系都不会对性能产生任何影响

    因为您的关系类型不是真正的关系类型,所以您的选择取决于您的用例。 如果您对朋友关系进行建模,以使用其上的属性来指示友谊的类型,则在任何给定的节点对之间最多有两个关系,每个方向一个。如果您的用例涉及始终遍历朋友关系,无论友谊类型如何,那么这是一个良好且性能良好的模型


    如果您需要按友谊类型进行遍历,例如查找所有好友,但不查找好友,那么刚才描述的模型可能无法执行可能不,因为这完全取决于图形的形状-如果没有密集节点,那么这将不是问题。如果您这样做,那么这将是因为稠密节点中FRIEND类型的每个关系都将被其上的属性遍历以过滤。在这种情况下,有两种关系类型会更好,即代码>朋友< /代码>和<代码>好友> /代码>

    当建模双向关系时,有两件事要考虑。 第一个是这种关系在各个方向上的语义含义。在你的情况下,仅仅给关系中的朋友打电话是不够的,因为你有不同类型的朋友

    另一个需要考虑的问题是,这种关系的含义是否可以(以直接或相反的方式)从任何一个方向暗示出来。这些关系的示例有
    PARENT
    CHILD
    关系,其中父项表示相反方向的子项。在你的情况下,它不是。传出的朋友关系并不意味着传入的朋友关系。 在Neo4j中,在任何方向上遍历关系都不会对性能产生任何影响

    因为您的关系类型不是真正的关系类型,所以您的选择取决于您的用例。 如果您对朋友关系进行建模,以使用其上的属性来指示友谊的类型,则在任何给定的节点对之间最多有两个关系,每个方向一个。如果您的用例涉及始终遍历朋友关系,无论友谊类型如何,那么这是一个良好且性能良好的模型


    如果您需要按友谊类型进行遍历,例如查找所有好友,但不查找好友,那么刚才描述的模型可能无法执行可能不,因为这完全取决于图形的形状-如果没有密集节点,那么这将不是问题。如果您这样做,那么这将是因为稠密节点中FRIEND类型的每个关系都将被其上的属性遍历以过滤。在这种情况下,您最好使用两种关系类型,
    FRIEND
    BUDDY

    ,谢谢Luane,如果我要创建两种关系类型“FRIEND”和“BUDDY”,那么不管是哪种类型,是否仍然可以遍历节点?例如,无论关系类型如何,都可以找到了解A的人。是的,您可以使用:FRIEND |:BUDDY或省略关系类型。Hi Luane,我按照您的建议创建了两个关系,但在遍历节点时出现了循环问题。例如,假设A连接到B,A和B之间有两种关系类型。B也连接到C,C连接到D。现在,如果我想找到通过三级连接连接到A的人,我希望只有D。(A->B->C->D),但它也返回B。(A->B-C->B)因为C和B之间有两种关系。我在下面的线程中问了同样的问题。感谢Luane,如果我要创建两种关系类型“FRIEND”和“BUDDY”,那么不管是哪种类型,是否仍然可以遍历节点?例如,无论关系类型如何,都可以找到了解A的人。是的,您可以使用:FRIEND |:BUDDY或省略关系类型。Hi Luane,我按照您的建议创建了两个关系,但在遍历节点时出现了循环问题。例如,假设A连接到B,A和B之间有两种关系类型。B也连接到C,C连接到D。现在,如果我想找到通过三级连接连接到A的人,我希望只有D。(A->B->C->D),但它也返回B。(A->B-C->B)因为C和B之间有两种关系。我在下面的线程中问了同样的问题。