Neo4j配置4M节点10M关系

时间:2014-02-02 14:46:38

标签: cypher neo4j

我是Neo4j的新手,并且很少有4M节点和10M关系的图形查询。直到现在我对我的查询表现完全感到惊讶。

SCHEMA
.......

(a:user{data:1})-[:follow]->(:user)-[:next*1..10]-(:activity)

此处有数据的用户:1跟随另一个100,000用户。这100,000个用户中的每一个都有2-8个下一个节点(比如用户的活动)。现在我想将用户的活动提取到下一级别3 [:next * 1..3]。每项活动都有财产相关编号。

所以现在我有100,000 * 3个节点要遍历。

CYPHER
.......


match (u:user{data:1})-[:follow]-(:user)-[:next*1..3]-(a:activity)
return a order by a.relevance desc limit 50

此查询几乎每次都需要72000毫秒。由于我是Neo4j的新手,我确信我还没有完成操作系统的调整。

我正在使用以下参数 -

初始Java堆大小(以MB为单位)

wrapper.java.initmemory = 2000

最大Java堆大小(以MB为单位)

wrapper.java.maxmemory = 2456

低级图引擎的默认值

neostore.nodestore.db.mapped_memory = 25M neostore.relationshipstore.db.mapped_memory = 50M neostore.propertystore.db.mapped_memory = 90M neostore.propertystore.db.strings.mapped_memory = 130M neostore.propertystore.db.arrays.mapped_memory = 130M

请告诉我我做错了什么。我阅读了neo4j网站上的所有文档,但查询时间没有改善。

请告诉我如何配置高性能缓存?我应该怎么做才能将所有图形加载到内存中?当我看到我的RAM使用情况时,它总是像4 Gb中的1.8 GB。我在Windows上使用企业许可证(Neo4j 2.0)。请帮忙。

1 个答案:

答案 0 :(得分:1)

你实际上不是100k * 3,而是100k *(2-10)^ 10意味着10 ^ 15路径。

你机器中的更多内存会很有意义,所以尝试获得8或更多GB。

然后你可以增加堆,例如到6GB:

wrapper.java.initmemory=6000
wrapper.java.maxmemory=6000

neo4j.properties

neostore.nodestore.db.mapped_memory=100M
neostore.relationshipstore.db.mapped_memory=500M
neostore.propertystore.db.mapped_memory=200M     
neostore.propertystore.db.strings.mapped_memory=200M 
neostore.propertystore.db.arrays.mapped_memory=10M

如果您想提取数据,则很可能想要反转您的查询。

match (a:activity),(u:user{data:1})
with a,u
order by a.relevance 
desc limit 100
match (followed:user)-[:next*1..3]-(a:activity)
where (followed)-[:follow]-(user)
return a 
order by a.relevance 
desc limit 50