【问题标题】:Loading all Neo4J db to RAM将所有 Neo4J 数据库加载到 RAM
【发布时间】:2012-04-03 14:57:50
【问题描述】:

我正在尝试将我所有的 Neo4j 数据库加载到 RAM 中,这样查询会更快。将属性映射传递给图形创建时,我没有看到该进程像以前那样占用更多内存空间,而且它也与磁盘上的文件空间不成比例。 可能是什么问题呢?以及如何解决.... 谢谢

【问题讨论】:

标签: neo4j


【解决方案1】:

Neo4j 会延迟加载所有数据,这意味着它会在第一次访问时将它们加载到内存中。缓存选项与 GC 策略有关,因此何时(或是否)引用将被 GC。要将整个图加载到内存中,您的缓存类型必须是强的,并且您需要遍历整个图一次。你可以这样做:

// untested java code

import org.neo4j.helpers.collection.IteratorUtil;

// ...

for(Node node : graph.getAllNodes()) {
  IteratorUtil.count(node.getRelationships());
}

这样所有节点和关系都将被使用一次,从而加载到缓存中。

【讨论】:

  • 谢谢,在文档中也找到了这个。我真的希望只有一个简单的标志可以打开而不是所有这些。
  • 这里的好处是您可以根据您的用例对其进行微调,毕竟它只是 2 行代码:)
  • Michael,没错,但从新手可用性的角度(这是新产品的主要部分)来看,让这些事情变得非常简单比微调选项更重要。
  • 我可以在没有 Java 代码的情况下通过 Gremlin g.E.count()g.V.count() 执行此操作吗?
  • 我不知道 gremlin 在内部是如何工作的,但我认为它可以工作。你可以试试看你的内存使用情况。如果它大量增长,那将是一个迹象,表明它有效;-)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-29
  • 1970-01-01
  • 1970-01-01
  • 2014-09-26
  • 2015-12-30
  • 1970-01-01
  • 2015-11-19
相关资源
最近更新 更多