Neo4J と Python を使用して、単純な Twitter 風の「フォロワー/フレンド」グラフを作成しようとしています。グラフは次のようになります
user_1 FOLLOWS user_2
user_1 FOLLOWS user_3
user_2 FOLLOWS user_1
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 インデックスに独自の関数を使用してインデックスを作成する必要がありますか?