高效创建Neo4j关系索引

时间:2014-03-12 23:09:20

标签: neo4j

您能否解释一下将关系索引添加到使用BatchInserter创建的Neo4j数据库的最佳方法?

我们的数据库包含大约3000万个节点和大约3亿个关系。如果我们在没有任何索引的情况下构建它,则需要大约10个小时(只需调用BatchInserter.createNode和BatchInserter.createRelationship)。

但是,如果我们还尝试使用LuceneBatchInserterIndexProvider创建关系索引并重复调用index.add,则该过程需要12个小时才能添加所有内容,但之后会卡在indexProvider.shutdown上并且无法完成。我留下的最长时间是3天。你能解释一下它现在在做什么吗?我期望在调用index.add期间完成工作。关机期间发生了多长时间的事情?

我们的PC有64GB RAM,我们已经为JVM分配了40GB。在此关闭步骤中,Windows报告99%的内存正在使用中(远远超过分配给JVM)并且计算机几乎无法使用。

我使用的配置设置是:

neostore.nodestore.db.mapped_memory = 1G
neostore.propertystore.db.mapped_memory = 1G
neostore.propertystore.db.index.mapped_memory = 1M
neostore.propertystore.db.index.keys.mapped_memory = 1M
neostore.propertystore.db.strings.mapped_memory = 1G
neostore.propertystore.db.arrays.mapped_memory = 1M
neostore.relationshipstore.db.mapped_memory = 10G

我们已尝试更改其中一些但似乎没有任何区别。

我们还尝试在首次构建没有任何索引的数据库之后将关系索引添加为单独的步骤。在本例中,我们使用了GraphDatabaseFactory.newEmbeddedDatabaseBuilder和GraphDatabaseService.index()。forRelationships。这样做似乎有效,尽管估计需要大约6天才能完成。我们已尝试以各种不同的时间间隔调用提交,这会产生一些差异但不重要。大部分时间似乎只花费在迭代关系上。

我能想到的唯一可能是我们的数据不正确的是关系中有大约20个属性。但即使只在其中一个属性上创建索引也行不通。

没有任何索引的文件大小为:

neostore.nodestore.db  400MB
neostore.propertystore.db  100GB
neostore.propertystore.db.strings  2GB
neostore.relationshipstore.db  10GB

您能否在BatchInserter流程中或单独的步骤中向我们提供一些有关如何使其工作的建议?

我们正在使用Neo4j罐的2.0.1版本。

谢谢,达蒙

0 个答案:

没有答案