我正在尝试使用 Neo4J 和 Python 创建一个简单的 Twitter 式“关注者/朋友”图。该图看起来像
user_1 FOLLOWS user_2
user_1 FOLLOWS user_3
user_2 FOLLOWS user_1
经过一天的阅读,我认为最好直接使用 REST 接口,因为我使用的是 Python,py2neo。这是我的代码:
from py2neo import neo4j
def main():
g = neo4j.GraphDatabaseService()
# Create an index for our user nodes
index = g.get_or_create_index(neo4j.Node, "user")
# Create a single node, User 1
node = index.get_or_create("user", "User_1", {"id": "User_1"})
# Populate the graph with some more users just for testing
nodes = []
for user in ["User_2", "User_3", "User_4", "User_5"]:
nodes.append( index.get_or_create("user", user, {"id":user}) )
# Create a relationship between User_1 and User_2
g.get_or_create_relationships( (node, "FOLLOWS", nodes[0]) )
if __name__ == '__main__':
main()
如您所见,我使用 get_or_create_relationships 来防止重复关系,并且在添加数千个节点时,我假设这会产生某种开销。
每次运行脚本时,直接使用 "node.create_relationship_to(nodes[0], "FOLLOWERS")" 似乎都会创建重复的关系,这对于图形数据库新手来说有点让我困惑,因为关系完全相同。
创建重复关系的可能性非常低,但如果发生这种情况,这会导致图遍历出现问题吗?我应该用某种独特的功能来索引我的 FOLLOWS 索引吗?