9537 のノードと 52846 の関係を持つデータベースがあります。ノードと関係の両方に、索引付けされた属性があります。
このデータベースに対して、多かれ少なかれ次の形式を持つ多くのクエリを実行しています。
START n0 = node:my_nodes(label='2'), n4 = node:my_nodes(label='2')
MATCH n0-[r0]-n4
WITH n0, n4, r0
MATCH n0-[r1]-n3
WHERE r1.lab - r0.lab = 0 and n3.label = 0 and id(r1) <> id(r0)
WITH n0, n4, n3, r0, r1
MATCH n0-[r2]-n2
WHERE r2.lab - r0.lab = 0 and n2.label = 2 and id(r2) <> id(r0) and id(r2) <> id(r1)
WITH n0, n4, n3, n2, r0, r1, r2
MATCH n0-[r3]-n1
WHERE r3.lab - r0.lab = -1 and n1.label= 0 and id(r3) <> id(r0) and id(r3) <> id(r1) and id(r3) <> id(r2)
RETURN id(n0), r0.lab, r1.lab, r2.lab, r3.lab;
属性値 (ノードと関係の両方) の特定の値の代わりに、変化するパラメーターがあります。MATCHの構造も変わります。
私の問題は、Java がメモリ制限に達しない場合、クエリが 30 分以上実行されることです。
この種のクエリを最適化する方法はありますか? パフォーマンスを向上させるために、いくつかの構成設定を調整する必要がありますか?
PS: FreeBSD で neo4j-1.9-RC2 を使用しています (Linux ディストリビューションがそこで動作します)。メモリ構成:
wrapper.java.initmemory=512
wrapper.java.maxmemory=8192