neo4j-import初始化导入数据和增量导入数据为何速度相差这么大
发布于 4 个月前 作者 modop 414 次浏览 来自 问答

从关系库如mysql的使用中来说,不管是否空库,导入数据的时候无非执行sql,这点与neo4j在增量导入的时候也是一致的。无论是使用apoc,load csv,batch-import,底层应该都是执行cypher语句吧,只是具体的方式不一样所以速度有所差异。 空库的时候使用neo4j-import导入的速度是相当惊人的,跟增量导入的速度根本不在一个级别上。想请教下neo4j-import工具导入的原理是什么?底层如何实现的?麻烦详细解释下。为何能达到这样高的速度。还请解惑

4 回复

非空库,增量导入要 计算 节点 、关系的id 还要分配属性的key,应该费时间的 另外最重要的是 你是不是创建了索引,如果创建了索引插入就更慢了

@pangguoming 我是否可以这样理解:关系库中不管原来库中有多少数据,要插入的新的数据与原来的数据无关,所以是否空库不影响写入数据的速度。而图数据库在新增数据的时候,要先统计原有的数据信息,检查并建立新增数据与原有数据的联系(如自增id,并入已有label,建立节点之间的关系等),所以速度会慢。 那neo4j-import初始化数据的底层实现也是执行cypher语句来写入数据的吗?与增量导入是一致的?就是因为您说的计算节点关系id之类的原因才耗时相差这么大。我看了neo4j-import脚本里执行的是org.neo4j.tooling.ImportTool这个类,也去github上找到源码看了下。但是才疏学浅看不懂,还请指点下。

import从源数据直接创建数据库存储文件,不经过任何数据库的服务例如索引、事务等,因此速度要快几十倍。

neo4j-import 的时候数据库是空的,所有导入的数据经过排序去重后建了一个map <id, 自定义的唯一id> ,这个map在内存里,可以快速查找和定位, 增量更新的时候首先需要把文件读到内存里,然后再处理,速度肯定不是一个量级

回到顶部