2013-03-15 7 views
5

私はhereの例をいくつかのマイナーな変更の後で試しました。主に、一致のないwhere節を実験的な目的で追加しました。 ( - Javaの6u43 - Ubuntuの12.04 - 1.9.M04 AMDのPhenom II-X6 1090T)私のシステムでNeo4j cypher query slow performance

データベースでちょうど1ノード(また、埋め込まれた)で単純なクエリ

は262ミリ秒を要しました。明らかに何かが間違っている。何が問題なの?

おかげ

public void test() 
    { 
     GraphDatabaseService db = g = new GraphDatabaseFactory().newEmbeddedDatabase("./neo4j1test"); 

     long id; 
     Transaction tx = db.beginTx(); 
     try 
     { 
      Node refNode = db.createNode(); 
      id = refNode.getId(); 
      refNode.setProperty("name", "reference node"); 
      tx.success(); 
     } 
     finally 
     { 
      tx.finish(); 
     } 


     ExecutionEngine engine = new ExecutionEngine(db); 
     ExecutionResult result = engine.execute("start n=node("+id+") where (n.name = \"reference node\") return n.name"); 
     long time = System.currentTimeMillis(); 
     result = engine.execute("start n=node("+id+") where (n.name = \"reference node\") return n.name"); 
     time = (System.currentTimeMillis() - time); 
     System.out.println("Time taken : " + time + " ms."); 
    } 
+0

はたぶんそれは、あなたが私は実行時間が大幅に低くすべきだと思います、その場合には、クエリ回以上繰り返してみてくださいだけのNeo4jのブートストラップのオーバーヘッドです:Get the full neo4j power by using the Core Java API

そして、この:

この記事を参照してください。 。 – remigio

+0

最初にキャッシュをウォームアップしようとします。 'start n = node(*)return count(n); start r = rel(*)return count(r)'このコマンドを何度か実行します。秒、どのように時間を測定するのですか?それはサイファー出力によって与えられた時間か、単に特定のコード行の前後の時間ですか? 2番目のケースでは、待ち時間はあなたのアプリとサーバーの間にある可能性があります – ulkas

+0

これはどのように動作するのですか?すでに2番目のクエリの実行時間のみを測定しています(最初の実行が内部キャッシュを初期化するなど)。しかしここでそれは異なっている。 3回目以降の実行では時間が大幅に短縮されます。同じクエリに対して3回目の実行について特別なものは得られません。私は埋め込みモードで使用しています – Shilu

答えて

0

あなたはおそらく(indexingを参照してください)nameプロパティインデックスを作成します。その後、あなたは次のようにクエリを実行できます:インデックス経由

START n=node:your_index_name("name:the_indexed_name") RETURN n; 

ルックアップノードは、WHERE句を経由してフィルタリングよりもはるかに高速になります。

+0

はい、私はそれを知っています。クエリは実験的な目的のためにのみ - それがどのように動作するかを見るためです。 – Shilu

+0

こんにちは@tstorms、私はneo4jと同様の問題があります。私はインデックス付きのノードをいくつか作成し、それをリレーションに接続しました。今私は相互カウントをしようとしたとき、それは非常に遅い実行しています。私のクエリは、neo4jから約150レコードをフェッチするのに2〜3秒かかった。 –