我必须执行以下查询:
@Query("START whps=node:__types__(className = 'de.adma.domain.WHProcessStep'),
csd=node:__types__(className = 'de.adma.domain.CSDocument'),
whm=node:__types__(className = 'de.adma.domain.WHMachine')
MATCH whps<-[r1:RELATES_TO]-csd<-[r2:OCCURS_IN]-whm
WHERE (whps.id IN {0}) AND (csd.id IN {1})
RETURN DISTINCT whm ")
这些类(CSDocument、WHMachine、..)中的每一个都有相同的脚手架:
@NodeEntity
public class CSDocument {
@GraphId
Long nodeId;
@Indexed(unique = true)
String id;
@Indexed(indexType = IndexType.FULLTEXT, indexName = "accessUri")
String accessUri;
// .. definition of some RelatedToVia-Relationships and getter/setters
}
查询公式是否是查询 neo4j 的正确方法?
目前,这适用于最多约 100k 节点/关系的少量(查询需要 <5 秒)。我需要这个用于 ~10mio 节点/关系,但查询会运行几分钟。
我的测试环境是 VM,Xeon 2,18Ghz(六核),32GB Ram,SSD。JVM 配置:-Xmx14000m -XX:MaxPermSize=4048m -Xss3068m -XX:+UseConcMarkSweepGC 我在 Java-Spring 应用程序中使用 Neo4j 嵌入式 1.8.1。
有什么想法可以提高性能吗?使用 IN 语句时,多个起点是否有其他方法?似乎这些多个起点减慢了查询速度。
我必须定义一个索引吗?
谢谢!