如何快速为一组节点和关系预热Neo4J页面缓存

时间:2019-04-02 09:32:36

标签: neo4j cypher neo4j-apoc

我正在建立一个由复杂数据的Neo4J实例支持的REST API,该实例的存储大小约为400 GB,并且需要为一组节点和关系预热页面缓存。

对一组输入数据有一些特定的要求,这需要大量时间来查询和获得响应。因此,我想要一种仅为这些调用访问的节点和关系预热缓存的方法。我尝试使用 APOC.warmup.run(true,true)(大约15分钟,这对我来说是可以接受的),但是它确实将整个存储区加载到内存中,因为我已经拥有了我试图编写一个穿越这些路径的简单Cypher,但是它要花很多时间才能执行,并且当我检查Neo4J实例的内存增长时,与APOC预热相比这非常慢。

我还在考虑是否有一种方法可以扩展/自定义APOC预热以仅加载商店的特定部分,但想看看是否有人在那里之前已经尝试过类似的操作。

我希望为商店的特定部分而不是整个商店进行热身的快速方法。

1 个答案:

答案 0 :(得分:0)

您还应该为此配置足够的页面缓存(400G)

如果您使用apoc.warmup.run(true,true,true),还将预热架构索引。

我想这只花了15分钟,因为您的磁盘读取性能可能会降低?还有多少个CPU?

您不能真正加载商店的特定部分。

但是,最近的Neo4j版本跟踪页面缓存使用情况,并在重新启动后将其还原。 这样您就可以运行查询,重新启动后,相同的页面将位于页面缓存中。

如果您的查询中有 page-faults ,您还会看到PROFILE