友人関係に Neo4J を使用する利点を確認するために、MySQL データベースに Persons ("Persons"、20900 データセット) 用の 1 つのテーブルを作成しました。
id | name
--------------
1 | Peter
2 | Max
3 | Sam
... | ...
20900 | Rudi
関係 (「Friendships」、50 から 100 の友人を持つ各人) の 1 つのテーブル:
personen_id_1 | personen_id_2
-------------------------
1 | 2
1 | 3
2 | 56
... | ...
20900 | 201
したがって、約120万の関係があります。
ここで、id=1 の Person の友達の友達の友達の友達を探したいので、次のようなクエリを作成しました。
select distinct P.name
from Friendships f
join Friendships f2 ON f.personen_id_2 = f2.personen_id_1
join Friendships f3 ON f2.personen_id_2 = f3.personen_id_1
join Friendships f4 ON f3.personen_id_2 = f4.personen_id_1
join Persons P ON f4.personen_id_2 = P.id
where f.personen_id_1 = 1
user-id 1 のクエリには約 30 秒かかりました
Neo4J では、1 つの名前プロパティを持つ 1 つのノード (20900 ノード) を各人に作成しました。すべてのノードは MySQL の Friendship テーブルに等しく接続されているため、120 万の関係があります。
ここで同じ frinedset を取得するために、gremlin を入力しました。
gremlin> g.v(1).outE.inV.loop(2){ it.loops <= 4 }.name.dedup.map()
これには約1分かかりました。私はこれをまったく期待していませんでした!
私の比較は正しいですか?はいの場合、この例を変更して、このタスクにneo4jを使用する利点を示すにはどうすればよいですか?