我有以下图形结构
- 4m 节点
- 23m 房产
- 13m 关系
爪哇版
- Java(TM) SE 运行时环境 (build 1.7.0_25-b15)
- Java HotSpot(TM) 64 位服务器 VM(内部版本 23.25-b01,混合模式)
Neo4j 版本
- neo4j-community-2.0.0-M03
机器
- Mac OS X 10.8.4
- 2.5 GHz 英特尔酷睿 i5
- 8 GB 1600 MHz DDR3
问题
我正在用三个查询做一些实验。#1 需要 16 秒,#2 需要 8 分钟,#3 是“崩溃”。#2 和 #3 都将所有可用的 CPU 内核都置于 ~90% 的使用率。我正在使用 Web 界面来评估这些查询(我将使用 REST API 将应用程序与 neo4j 集成)
我想知道这些查询有什么问题以及如何优化它们。我目前正在使用默认设置。
密码查询
查询 #1(当前需要 16 秒(预热后))
START root=node:source(id="2")
MATCH root-[]->movies<-[]-others
WITH COUNT(movies) as movie_count, others as others
RETURN others.id, movie_count
ORDER BY movie_count DESC
LIMIT 10
查询 #2(8 分钟)
START root=node:source(id="2")
MATCH
root-[]->stuff<-[]-others
WITH DISTINCT(others) as dothers
MATCH dothers-[]->different
RETURN different.id, COUNT(different) as count
ORDER BY count DESC
LIMIT 10
查询 #3(OutOfMemoryError - 超出 GC 开销限制)
START root=node:source(id="2")
MATCH root-[*1..1]->stuff<-[*1..1]-other-[*1..1]->different
WHERE stuff.id <> different.id
WITH COUNT(different) as different_count, different as different
RETURN different.id, different_count
ORDER BY different_count DESC
LIMIT 10