我看到了嵌入式Neo4j的一些相當不可能的性能結果,表面上它的速度比預期的要慢幾個數量級,所以我假設我在做「錯誤的「,儘管我沒有做任何複雜的事情。Neo4j慢?我一定在做錯什麼,請告訴我它是什麼
我使用Neo4j的
from neo4j import GraphDatabase
db = GraphDatabase('/tmp/neo4j')
我創建了假冒產品1500與簡單的屬性最新的嵌入式Python綁定(https://github.com/neo4j/python-embedded):
fake_products = [{'name':str(x)} for x in range(0,1500)]
...和創建的節點了出來,我連接到subreference節點:
with db.transaction:
products = db.node()
db.reference_node.PRODUCTS(products)
for prod_def in fake_products:
product = db.node(name=prod_def['name'])
product.INSTANCE_OF(products)
現在用什麼樣子,對我來說,因爲幾乎完全一樣樣的代碼,我的文檔中看到:
PRODUCTS = db.getNodeById(1)
for x in PRODUCTS.INSTANCE_OF.incoming:
pass
......通過這些節點1500迭代花費> 0.2秒對我的MacBook Pro。什麼。 (編輯:當然,我跑這個查詢一堆時間,以便至少在python綁定它不是冷緩存的問題)
我陶醉它到15K,花了2秒。我下載的Gremlin併發出等效的查詢,調查,如果它的Neo4j或Python綁定:
g.v(1).in("INSTANCE_OF")
..它似乎花了大約2秒的第一次嘗試,在第二次運行它似乎幾乎立即完成。
任何想法爲什麼它如此緩慢?我得到的結果在我看來是一種錯誤。
感謝您的答案彼得,我假設我創建和連接數據的方式是好的? 但是關於你的答案 - 這不是我在Python綁定結果中看到的 - 至少上面的遍歷連續多次都會花費相同的時間。 – Wojtek 2012-02-03 15:27:17
那麼,在gremlin/groovy/java這塊土地上它速度很快,但不是通過Python? – 2012-02-04 14:49:42
唉,試圖在OSX Lion上安裝JPype沒有成功,希望重現它:/ – 2012-02-05 16:06:00