我有一个中等大小的neo4j数据库,每个节点上有大约700000个节点和1-5个传出关系。
如果我使用浏览器界面查询索引属性上的节点并查找相邻节点,则需要大约1500毫秒,这对我来说很好。
MATCH (n {id_str : 'some_id'})-->(child) return child.id_str
...
Returned 2 rows in 1655 ms
但是,如果我使用Ruby Neography库运行类似的Cypher查询提及关系,则需要几分钟才能完成。
lookup_links = "MATCH (n {id_str : {id_str}})-[:internal_link]->(child) return child.id_str"
links = @neo.execute_query(lookup_links, :id_str => id_str)
此后,常规浏览器查询变得非常缓慢,每次大约需要两分钟。
MATCH (n2 {id_str : 'some_id'})-->(child) return child.id_str
Returned 2 rows in 116201 ms
我在64位ubuntu 14.04笔记本电脑上运行实验,内存为8GB ram,1GB堆用于neo4j。 Neo4j版本是从官方deb数据包安装的2.1.3。 Neography版本是1.6.0。我使用MRI-1.9.3。
我已经使用kill -3完成了一个stackdump,而neo正忙于提供查询。 https://gist.github.com/akamaus/a06bc9e04c7209c480e9
任何想法出了什么问题以及如何投资它?