我有一个包含 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