我是Neo4j的新手,使用4M个节点和10M个关系进行过很少的图查询。到目前为止,我对我的查询的性能完全感到惊讶。
SCHEMA
.......
(a:user{data:1})-[:follow]->(:user)-[:next*1..10]-(:activity)在这里,数据为1的用户正在关注另外100,000个用户。这100,000个用户中的每一个都连接了2-8个next节点(假设用户的活动)。现在我想获取用户的活动,直到下一级3:下一级*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.relationshipstore.db.mapped_memory=50M neostore.propertystore.db.strings.mapped_memory=130M neostore.propertystore.db.arrays.mapped_memory=130M neostore.nodestore.db.mapped_memory=25M neostore.propertystore.db.mapped_memory=90M
请告诉我哪里做错了。我阅读了neo4j网站上的所有文档,但查询时间并没有改善。
请告诉我如何配置高性能缓存?我应该怎么做才能让所有的图形都加载到内存中?当我看到我的RAM使用率时,它总是像4 Gb中的1.8 GB。我在Neo4j( windows 2.0)上使用企业许可证。请帮帮忙。
发布于 2014-02-02 23:11:06
您实际上遵循的不是100k *3,而是100k * (2-10)^10,这意味着10^15条路径。
在你的机器中有更多的内存是很有意义的,所以试着获得8 GB或更多的内存。
然后可以增加堆大小,例如增加到6 6GB:
wrapper.java.initmemory=6000
wrapper.java.maxmemory=6000neo4j.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 50https://stackoverflow.com/questions/21511898
复制相似问题