使用Neo4j批处理导入器导入大型数据集时配置设置

使用Neo4j批处理导入器导入大型数据集时配置设置,neo4j,out-of-memory,batch-processing,Neo4j,Out Of Memory,Batch Processing,我正在尝试使用导入工具将2000万个节点和2.5亿个关系导入Neo4j。我有8GB的内存 以下是我在批处理属性中的当前设置: use_memory_mapped_buffers=false neostore.nodestore.db.mapped_memory=500M neostore.relationshipstore.db.mapped_memory=2000M neostore.relationshipgroupstore.db.mapped_memory=10M neostore.pr

我正在尝试使用导入工具将2000万个节点和2.5亿个关系导入Neo4j。我有8GB的内存

以下是我在批处理属性中的当前设置:

use_memory_mapped_buffers=false
neostore.nodestore.db.mapped_memory=500M
neostore.relationshipstore.db.mapped_memory=2000M
neostore.relationshipgroupstore.db.mapped_memory=10M
neostore.propertystore.db.mapped_memory=1G
neostore.propertystore.db.strings.mapped_memory=200M
neostore.propertystore.db.arrays.mapped_memory=0M
neostore.propertystore.db.index.keys.mapped_memory=15M
neostore.propertystore.db.index.mapped_memory=50M
batch_import.node_index.users=exact
batch_import.csv.quotes=false
cache_type=none
导入2000万个节点大约需要7分钟

对于这些关系,导入1000万条(根据控制台上的输出)似乎需要13分钟


这意味着导入所有关系大约需要6个小时(250/10*13)。我们可以对此进行改进吗?

您应该尝试随附的新导入工具

它使用更少的内存,跨CPU的扩展性更好

如果您想使用我的批量进口商:

通常它每秒导入1M个节点,每秒导入100k到500k个rels

你用多少堆

  • 使用更快的磁盘
  • 使用更多的内存
  • 索引增加了额外的开销(仅用于测试,尝试在没有索引的情况下运行)
  • 如果您还没有检查磁盘调度程序是否为noop或DETALIDATE no cfq,请使用Linux
  • 尝试使用\u内存\u映射的\u缓冲区=true

谢谢Michael,非常好的提示!我已经开始使用新的导入工具,我可以在25分钟内导入完整的数据集。你能解释一下控制台输出的确切含义吗?它会打印跳过的关系数吗?特别是,以下不同的行是什么意思?它是否每秒在控制台上打印输出
[INPUT-----| PREPARE(| RELATIO | | |]49M
[Relationship-->Relationship+counts------]282M
我想知道每秒导入多少节点/边。