2012-02-03 7 views
3

埋め込まれたNeo4jからのいくぶん性能の低い結果を見ています。表面上は予想よりも桁違いに遅いので、私はそれをやっていると仮定しています間違っていますが、私は何もしません。Neo4j slow?私は間違ったことをしている必要があります、それは何か教えてください

私は(https://github.com/neo4j/python-embedded)のNeo4jの最新の組み込みPythonバインディングを使用してい

from neo4j import GraphDatabase 
db = GraphDatabase('/tmp/neo4j') 

私は、単純な属性で偽1500個の製品を作成しました:

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) 

:それらのうち

fake_products = [{'name':str(x)} for x in range(0,1500)] 
...と作成したノードは、私がsubreferenceノードに接続されていること私はドキュメントで見てきたコードの見えるか、私には、ほぼ正確に同じ種類で:

PRODUCTS = db.getNodeById(1) 
for x in PRODUCTS.INSTANCE_OF.incoming: 
    pass 

...これらの1500個のノードを反復>取る私のMacBook Proの上で0.2秒。何。 (編集:私はもちろん、このクエリを複数回実行したので、少なくともPythonバインディングではコールドキャッシュの問題ではありません)

私は15kまでそれをアンペアし、2秒かかりました。私はグレムリンをダウンロードし、それがのNeo4jまたはPythonバインディングだかどうかを調査するために同等のクエリを発行:

g.v(1).in("INSTANCE_OF") 

...ほとんどすぐに完了するように見えたセカンドランで、最初の試みで約2秒かかったようです。

なぜそれほど遅いのですか?私が得ている結果は、何らかの間違いであるはずです。

答えて

1

これはレイジーではなく任意のプリフェッチを行うのNeo4jのデータのロードです。最初の実行では、ディスクに当たっています.2番目のキャッシュでは、暖かいです。実際の生産シナリオです。

+0

Peterさん、ありがとうございました。作成した方法とデータが正常に接続されたと仮定していますか? あなたの答えは、少なくとも私がPythonバインディングの結果で見たものではありません。上記のトラバーサルは、連続して複数回実行され、同じ時間がかかります。 – Wojtek

+0

gremlin/groovy/java土地では速いですが、Pythonではありませんか? –

+0

なんてこった、OSXライオンに成功せずJPypeをインストールしようと、それを再現したい:/ –

関連する問題