要查看使用Neo4J進行朋友關係的優勢,我在MySQL數據庫中創建了一個人員表(「人員」,20900集):在MySQL和Neo4J之間的朋友之間的朋友之間的朋友之間的比較
id | name
--------------
1 | Peter
2 | Max
3 | Sam
... | ...
20900 | Rudi
和一個表的關係( 「友誼」,每個人有50至100個朋友):
personen_id_1 | personen_id_2
-------------------------
1 | 2
1 | 3
2 | 56
... | ...
20900 | 201
所以,有以防萬一120萬間的關係。
現在我想現在的朋友 - 的 - 朋友 - 的 - 朋友 - 的 - 朋友的人與ID = 1,所以我製作這樣的查詢:
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
查詢了角落找尋30秒爲用戶ID 1
在Neo4J我爲每個人創建一個節點(20900節點)與一個名稱屬性。所有節點連接等於MySQL中的友誼表,所以有120萬個關係。
在這裏得到相同的frinedset,我輸入精怪:
gremlin> g.v(1).outE.inV.loop(2){ it.loops <= 4 }.name.dedup.map()
這場耗時角落找尋1分鐘。我根本沒有料到這一點!
所以我的比較正確嗎?如果是的話,如何修改這個例子來展示使用neo4j完成這個任務的優點?
你使用了什麼JVM設置?你的硬件是什麼?對於數據庫來說,JVM的默認內存設置太小了。如果這是第一次運行,它將只測量您的磁盤速度來提取數據。 –
我使用oracle jvm 1.6,堆大小設置爲'java -Xms 1G -Xmx 1G' – chris