neo4j导入数据的不同方式比较_chenpe32cp的博客-程序员秘密

技术标签: 知识图谱  

本文转自这里,更多内容请点击原文查看

参考:https://my.oschina.net/zlb1992/blog/918243

https://blog.csdn.net/weixin_37947156/article/details/77442926

官方文档:https://neo4j.com/blog/loading-sql-neo4j-like-magic/

https://neo4j.com/developer/guide-importing-data-and-etl/

常见数据导入方式概览

 

(1) Cypher create 语句,为每一条数据写一个create

(2) Cypher load csv 语句,将数据转成CSV格式,通过LOAD CSV读取数据。

(3) 官方提供的neo4j-import工具,未来将被neo4j-adminimport代替

(4) 官方提供的Java API    BatchInserter

(5) 大牛编写的 batch-import 工具

(6) neo4j-apocload.csv +apoc.load.relationship

(7) 针对实际业务场景,定制化开发

 

这些工具有什么不同呢?速度如何?适用的场景分别是什么?

 

create语句

load csv语句

neo4j-import

BatchInster

batch-import

apoc

适用场景

 

 

初始化导入

增量更新

 

初始化导入

 

初始化导入

 

初始化导入

增量更新(有限制)

 

增量更新

导入速度

很慢1000/s

数k /s

数w/s

数w/s

数w/s

数k/s

实际测试

9.5k/s

(节点+关系)

12w/s

(节点+关系)

1w/s

(节点+关系)

1w/s

(节点+关系)

4k/s(1亿数据上增量更新) 1w/s(百万数据上增量更新)

优点

1.使用方便

2.可实时插入

1.官方ETL工具

2.可以加载本地/远程CSV

3.可实时插入

1.官方工具

2.占用资源少

1.官方API

1.可以增量更新

2.基于BatchInserter

1.官方ETL工具

2.可以增量更新

3.支持在线导入

4.支持动态传Label  RelationShip

缺点

1.速度慢

2.处理数据,拼CQL复杂

1.导入速度较慢

2.不能动态传Label  RelationShip

1.需要脱机导入 停止Neo4j数据库

2.只能用于初始化导入

1.需要脱机导入 停止Neo4j数据库

2.需要在JAVA环境中使用

 

1.需要脱机导入 停止Neo4j数据库

1.速度一般

 

注释:本次测试使用的id(不是Neo4j id)类型是String,为uuid,如果同一Label下数据不超过2^32,可以用int类型

 

结论

 

根据实际情况选用最好的方式

 

(1)  neo4j-import导入速度快,但是要求是空库,导入时要停止neo4j,也就是脱机导入,而且你要提前处理好数据,数据最好不要有重复,如果有重复,可以导入时跳过,然后根据bad.log来查看或者修正这部分数据

 

(2)  batch-import可以增量导入,但是要求导入时停止neo4j数据库(脱机导入),而且增量更新的数据不会和库里存在的数据对比,所以要求数据全是新的,否则会出现重复数据

 

(3)  load csv比较通用,而且可以在neo4j数据库运行时导入,但是导入速度相对较慢,要提前整理好数据,而且不能动态创建 Label RelationShip

 

(4) apoc挺好用的,可以动态创建Label、RelationShip,但是速度一般

 

结论2:

如果项目刚开始,想要将大量数据导入数据库,Neo4j-import是最好的选择。
如果数据库已经投入使用,并且可以容忍Neo4j关闭一段时间,那么Batch Import是最好的选择,当然如果你想自己实现,那么你应该选择Batch Inserter
如果数据库已经投入使用,且不能容忍Neo4j的临时关闭,那么LOAD CSV是最好的选择。
最后,如果只是想插入少量的数据,且不怎么在乎实时性,那么请直接看Cypher语言。
 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/chenpe32cp/article/details/104776576

智能推荐

计算机采用的主机电子器发展顺序是,计算机采用的主机电子器件的发展顺序是什么?..._知酒僧的博客-程序员秘密

计算机采用的主机电子器件的发展顺序是:电子管、晶体管、中小规模集成电路、大规模和超大规模集成电路。按照计算机采用的电子器件不同将计算机划分为电子管、晶体管、中小规模集成电路、大规模和超大规模集成电路四代。计算机采用的主机电子器件的发展顺序是:电子管、晶体管、中小规模集成电路、大规模和超大规模集成电路。计算机(computer)俗称电脑,是现代一种用于高速计算的电子计算机器,可以进行数值计算,又可以...

java动态代理(JDK和cglib)_老城根的博客-程序员秘密

原文地址JAVA的动态代理 代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。 按照代理的

【技术架构】分布式系统的特点以及设计理念_分布式技术特点_笑起来贼好看的博客-程序员秘密

本文转载于王璞 http://www.infoq.com/cn/articles/features-and-design-concept-of-distributed-system论文分布式系统并不是什么新鲜词,在上个世纪七八十年代就已经有各种分布式系统出现。只是在互联网时代,分布式系统才大放异彩,尤其是Google更是把分布式系统运用到了极致。Google整个的软件构架都是基于各种各样的分布式系统

基于JavaGUI深度优先算法的自动走迷宫游戏_ShervenLee的博客-程序员秘密

程序描述使用深度优先算法实现自动走迷宫功能描述随机迷宫、读取本地文件迷宫程序环境技术标签等Java GUI Eclipse-GBK编码 JDK8演示文件(GIF因为跳帧问题,画面显示异常,程序正常使用,如上图一致)联系有任何疑问可联系邮箱:[email protected]:535798943...

java泛型-类型通配符_Nobody A的博客-程序员秘密

java泛型-类型通配符类型通配符类型通配符一般是用“?”代替具体的类型实参所以,类型通配符是类型实参,而不是类型形参通配符的上限语法类/接口 <? extends 实参类型>要求该泛型的类型,只能是是实参类型,或实参类型的子类型代码示例//bean对象,泛型类public class Box<E> { private E first; public E getFirst() { return first; } public v

C语言面试题大汇总之华为面试题 Eddy整理_weixin_30436891的博客-程序员秘密

1、局部变量能否和全局变量重名?   答:能,局部会屏蔽全局。要用全局变量,需要使用"::" ;局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。  2、如何引用一个已经定义过的全局变量...

随便推点

编程易错点_选择语句编程易错点_邵琼的博客-程序员秘密

托运行李分为快件和慢件两种 快件是随自己所乘坐的列车或到达时间与这趟列车最接近的同一路线的其它列车运走的行李。对于旅客来说,快件托运速度快,人到行李就到了,不影响自己的使用。但是托运的费用也相对较高些,一些急需的又不是太重的物品,适合于快件托运。 慢件是按照列车货物运输的程序,通过列车的合理编组,在一定日期内将物品运到目的地的一种托运方式。慢件托运的一个突出特点就是价格比较低,运量可以很大,但运

Spring的FactoryBean接口_factorybean接口作用_亘易的博客-程序员秘密

Spring的FactoryBean 接口1 介绍FactoryBean接口有三个待实现的方法:T getObject() Class getObjectType();boolean isSingleton(); FactryBean与普通的bean差别在于,普通bean通过ID从容器中拿到的是class注明的类对象,而FactryBean的实现类则获取到的则是getObject()对象;2

几个关于GetMemory的经典问题_canvass的博客-程序员秘密

TEST1void GetMemory1(char *p){ p = (char *)malloc(100);}void Test1(void) { char *str = NULL; GetMemory1(str); strcpy(str, "hello world"); printf(str);}调用GetMemory( str )后,str并未产生变化,依然是NULL。改变的只是str的一个拷贝的内存的变化 。 strcpy(...

video-player实现hls播放全过程_spring-video-player-hls_Corey_Mxd的博客-程序员秘密

安装依赖npm install vue-video-player --save 引入样式// 第一个是videoJs的样式,后一个是vue-video-player的样式,因为考虑到我其他业务组件可能也会用到视频播放,所以就放在了main.js内require('video.js/dist/video-js.css')require('vue-video-player/src/c...

Intellij IDEA的下载和使用(针对学生的免费使用计划)_idea yalu.edu_dongmeima_coder的博客-程序员秘密

一、下载和使用授权(针对学生)1、下载可以在Intellij IDEA官网上下载需要的版本。下载地址:https://www.jetbrains.com/idea/2、学生免费试用首先,你得现有你们学校的官方邮箱账户,例如[email protected]其次,打开产品免费试用申请指南:学生授权申请 按照指南,注册自己的JetBrains账号。最后,在安装好IDEA后,使用你的J

matlab多变量优化,matlab - Matlab使用fminsearch优化多变量 - 堆栈内存溢出_无敌米修的博客-程序员秘密

我正在使用Matlab fminsearch来最小化带有两个变量的方程sum((interval-5).^2, 2)*factor间隔是一个包含5个值的向量。 只能从1到30的步长为1的顺序选择它们。因子是0.1到0.9的值。代码如下。 我认为区间值是正确的,但因子值是错误的。间隔值:[3 4 5 6 7]因子值:0.6最终输出:6我认为因子值应为0.1,最终输出应为1作为全局最小值。%% i...

推荐文章

热门文章

相关标签