私は中規模の neo4j データベースを持っており、ノード数は約 700000 で、ノードごとに 1 ~ 5 の発信リレーションがあります。
インデックス属性でノードをクエリし、隣接するノードを見つけるためにブラウザー インターフェイスを使用すると、約 1500 ミリ秒かかりますが、これは私にとっては問題ありません。
MATCH (n {id_str : 'some_id'})-->(child) return child.id_str
...
Returned 2 rows in 1655 ms
しかし、Ruby Neography ライブラリを使用して関係に言及する同様の Cypher クエリを実行すると、完了するまでに数分かかりました。
lookup_links = "MATCH (n {id_str : {id_str}})-[:internal_link]->(child) return child.id_str"
links = @neo.execute_query(lookup_links, :id_str => id_str)
その後、通常のブラウザ クエリも非常に遅くなり、それぞれ約 2 分かかります。
MATCH (n2 {id_str : 'some_id'})-->(child) return child.id_str
Returned 2 rows in 116201 ms
私はneo4j用に8GBのRAMと1GBのヒープを備えた64ビットのubuntu 14.04ラップトップで実験を実行しました。Neo4j のバージョンは、公式の deb パケットからインストールされた 2.1.3 です。Neography のバージョンは 1.6.0 です。私はMRI-1.9.3を使用しています。
neo がクエリの処理で忙しいときに、kill -3 を使用してスタックダンプを作成しました。 https://gist.github.com/akamaus/a06bc9e04c7209c480e9
何がうまくいかないのか、それを調査する方法はありますか?