2015-02-08 57 views
0

我试图使用Batch-importer导入2000万个节点和2.5亿个关系到Neo4j。我有8GB的RAM。使用Neo4j导入大型数据集时配置设置批量导入程序

这里是我的当前设置在batch.properties

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 

花了大约7分钟,进口20万个节点。

看来,对于关系而言,导入1000万(按照控制台上的输出)需要13分钟。

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

回答

0

你应该尽量自带Neo4j 2.2.0-M03

它使用较少的内存,扩展在CPU更好的新的导入工具。

如果你想要去与我的批处理进口商:

通常它进口1M节点/ s和大约100K至500K RELS /秒。

你使用多少堆?

  • 使用速度更快的磁盘
  • 使用更多的内存
  • 指数增加了额外的开销(只是用于测试,尝试没有索引来运行它),如果你不还,如果
  • 使用Linux,你做检查磁盘调度是空操作,或无期限CFQ
  • 尝试use_memory_mapped_buffers =真
+0

谢谢迈克尔,这个优秀的秘诀! 我已经转移到使用新的导入工具,我可以在25分钟内导入完整的数据集。 你能解释一下控制台输出的含义吗? 它会打印跳过的关系数量吗? – Jay 2015-02-10 01:04:50

+0

特别是,以下不同的意思是什么意思?它每秒都在控制台上打印输出吗? '[INPUT ------ | PREPARE(| RELATIO ||] 49M' and'[Relationship - > Relationship + counts -------] 282M' 我想找每秒导入多少个节点/边缘。 – Jay 2015-02-12 03:04:30