2012-04-03 94 views
10

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

+0

您还应该确保有足够的内存来存储文件的内存映射,您可能需要手动配置它(http://docs.neo4j.org/chunked/milestone/configuration-io-examples。 html) – 2012-04-10 23:15:40

回答

5

Neo4j懒惰地加载所有数据,这意味着它在第一次访问时将它们加载到内存中。缓存选项只是关于GC策略,因此何时(或如果)引用将被GCed。要将整个图加载到内存中,缓存类型必须很强,并且需要遍历整个图。你可以这样说:

// untested java code 

import org.neo4j.helpers.collection.IteratorUtil; 

// ... 

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

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

+1

谢谢,在文档中也发现了这一点。我真的希望只有一个简单的标志,而不是所有这些。 – user971956 2012-04-10 14:09:01

+1

这里的好处是,你可以微调它到你的用例,毕竟它只是2行代码:) – 2012-04-10 23:14:09

+1

迈克尔,真实,但从新手可用性的角度来看(这是一个新产品的主要部分)让这些东西变得简单死了比选择微调更重要。 – user971956 2012-04-11 17:29:13

相关问题