当前位置: 首页 > 科技观察

如何使用批量导入工具将海量数据导入neo4j

时间:2023-03-15 15:05:25 科技观察

【引自T_SevenS的博客】在开发neo4j的过程中,经常有同学问如何将大量的历史数据导入neo4j,这些数据一般都存在在关系型数据库方面,现结合自己的导入经验,把导入过程和挖过的一些坑分享给大家,让以后的同学少走弯路,废话少说,直接上干货。1.批量导入原项目地址:https://github.com/jexp/batch-import本工具由neo4j的作者之一MichaelHunger编写,在neo4j自带的批量导入工具的基础上进一步优化,但是在导入.gz压缩包的时候,关系是导入不了的,所以如果你想使用.gz压缩包导入,请使用我修改过的版本:https://github.com/mo9527/batch-import2、环境准备jdk:7个以上内存:8G以上,如果导入大量数据,会消耗大量内存。我导入了将近1.5亿个节点和3亿个关系,使用了32G内存3.导入步骤a)从github上克隆代码,使用maven打包。将jar文件打包后,连同项目本身的依赖jar一起放到lib文件夹下。batch.properties文件和执行导入的脚本放在lib同级目录下。***的目录结构如下:ps:文件夹是我要导入的csv文件和.gz压缩包。b)组装csv文件说到这一步,您可能需要根据自己的实际业务需要,手动编写导入csv文件的代码。这里我只讲csv文件格式的一些关键点:1)、节点csv文件的*节点csv文件**列是固定的,列值是这个节点的标签名,第二列是index,它的列头是id:string:indexName的格式,请说明,id是这个列的属性名,你可以根据需要自己命名,string是字段的数据类型,indexName是neo4j数据库中要导入的索引名称,我自己的文件格式如下:然后,后面几列是节点的属性,没有特殊要求2)、关系csv文件先看我的关系csv文件:特别注意关系csv文件的前两列。***列是关系的起始节点,第二列是关系的结束节点,第三列是关系类型,后面几列是关系的属性,可以随意。他的github上的描述没有提到一些注意点。这里要特别标注一下:***列起始节点的列头,也就是id:string:buyerId,这个东西必须和节点csv文件(上图)完全一样第二列定义的,必须和端节点的csv文件中的一致,否则他找不到对应关系。3)修改batch.properties文件主要修改两个地方。如果是在已有的neo4j数据库中导入,请设置:batch_import.keep_db=true将节点csv文件中的所有索引名称添加到文件中,比如上面这个节点csv文件中的索引名称为buyerId,然后添加batch_import.node_index.buyerId=准确到文件。以下是我自己的配置文件:4、linux和win环境的导入类似,只是执行的脚本不同。同上,这里以win环境为例。文件都准备好了,现在开始导入。打开cmd,cd到import脚本所在目录,即import.bat所在目录,执行命令:import.battest.dbnode.csvrel.csv解释一下命令的几个参数:最后一个参数是数据库的目录,可以绝对指定任意位置的路径。第二个参数是节点csv文件。多个csv文件以逗号分隔。如果是压缩包,一定要注意。这里有一个坑。您不能将所有类型的节点都放在一个压缩包中,每一类节点都要单独压缩,否则只会导入第一类节点节点。同样,关系的压缩包也要单独压缩,然后导入时用逗号分隔.gz文件。好吧,如果你的csv文件没有问题,内存也足够的话,现在就开始等待吧。如果要修改导入工具的Heap大小,可以在脚本文件中修改setHEAP=4G。一栏是中文,最长的汉字不超过4个汉字。导入超过2000万条记录需要2个小时。注意我有32G内存。其他4000万个没有汉字的节点,基本用时不超过2分钟。