neo4j如何将所有节点和与RAM的关系用于导入查询性能

时间:2016-09-02 07:32:41

标签: neo4j

我已经安装了APOC程序并使用了#34; CALL apoc.warmup.run。"

结果如下:

pageSize
8192

nodesPerPage  nodesTotal  nodesLoaded  nodesTime
546           156255221   286182       21

relsP‌erPage   relsTotal   rel‌sLoaded   relsTime
240           167012639   695886       8

tot‌alTime
30

看起来neo4j服务器只缓存部分节点和关系。 但我希望它能够缓存所有节点和关系,以提高查询性能。

1 个答案:

答案 0 :(得分:2)

首先,对于要缓存的所有数据,您需要page cache large enough

然后,问题不在于Neo4j没有全部缓存它,它更像是apoc.warmup.run过程中的一个错误:它检索数据库中的节点数(resp。关系),并期望它们所有人都有ids between 1 and that number of nodes(分别为relationships)。但是,如果您在数据库中有一些流失,那就不是真的,比如创建更多节点然后删除其中一些节点。

我相信可以通过使用其他查询来修复:

MATCH (n) RETURN count(n) AS count, max(id(n)) AS maxId

作为分析,它显示的节点数与节点数相同,并且在我的机器上需要大约650毫秒才能获得140万个节点。

更新:我已就该主题打开issue

更新2

虽然id的问题是真实的,但我错过了程序报告读取节点少得多的真正原因:它只读取one node per page(假设它们是按顺序存储的),因为它是缓存的页面。使用当前值,这意味着尝试每546个节点读取一个节点。它发生在 156255221÷546 = 286181 ,并且节点0使其加载了286182个节点。