如何将大规模数据导入Neo4j
来源:互联网 发布:鲁大师linux版 编辑:程序博客网 时间:2024/06/05 01:19
如何将大规模数据导入Neo4j
项目需要基于Neo4j开发,由于数据量较大(数千万节点),因此对当前数据插入的方法进行了分析和对比。
常见数据插入方式概览
目前主要有以下几种数据插入方式:
- Cypher CREATE 语句,为每一条数据写一个CREATE
- Cypher LOAD CSV 语句,将数据转成CSV格式,通过LOAD CSV读取数据。
- 官方提供的Java API —— Batch Inserter
- 大牛编写的 Batch Import 工具
- 官方提供的 neo4j-import 工具
这些工具有什么不同呢?速度如何?适用的场景分别是什么?我这里根据我个人理解,粗略地给出了一个结果:
速度测试
下面是我自己做的一些性能测试:
1. CREATE 语句
这里每1000条进行一次Transaction提交
CREATE (:label {property1:value, property2:value, property3:value} )
2. LOAD CSV 语句
using periodic commit 1000
load csv from "file:///fscapture_screencapture_syscall.csv" as line
create (:label {a:line[1], b:line[2], c:line[3], d:line[4], e:line[5], f:line[6], g:line[7], h:line[8], i:line[9], j:line[10]})
这里使用了语句USING PERIODIC COMMIT 1000,使得每1000行作为一次Transaction提交。
3. Batch Inserter、Batch Import、Neo4j-import
我只测试了Neo4j-import,没有测试Batch Inserter和Batch Import,但是我估计他们的内部实现差不多,速度也处于一个数量级别上,因此这里就一概而论了。
neo4j-import需要在Neo4j所在服务器执行,因此服务器的资源影响数据导入的性能,我这里为JVM分配了16G的heap资源,确保性能达到最好。
sudo ./bin/neo4j-import --into graph.db --nodes:label path_to_csv.csv
结论
- 如果项目刚开始,想要将大量数据导入数据库,Neo4j-import是最好的选择。
- 如果数据库已经投入使用,并且可以容忍Neo4j关闭一段时间,那么Batch Import是最好的选择,当然如果你想自己实现,那么你应该选择Batch Inserter
- 如果数据库已经投入使用,且不能容忍Neo4j的临时关闭,那么LOAD CSV是最好的选择。
- 最后,如果只是想插入少量的数据,且不怎么在乎实时性,那么请直接看Cypher语言。
其它的Tips
- 在LOAD CSV前面加上USING PERIODIC COMMIT 1000,1000表示每1000行的数据进行一次Transaction提交,提升性能。
- 建立index可以使得查询性能得到巨大提升。如果不建立index,则需要对每个node的每一个属性进行遍历,所以比较慢。 并且index建立之后,新加入的数据都会自动编入到index中。 注意index是建立在label上的,不是在node上,所以一个node有多个label,需要对每一个label都建立index。
2016 年 06 月 03 日
2 0
- 如何将大规模数据导入Neo4j
- 如何将大规模数据导入Neo4j
- 如何将大规模数据导入Neo4j
- 大规模数据导入Neo4j
- Neo4j Spatial数据导入
- neo4j 导入数据
- 如何使用apoc 从neo4j导出数据,gephi导入数据
- Neo4j 沙盒数据导入到本地 Neo4j 数据库
- 如何使用batch-import工具向neo4j中导入海量数据
- Neo4j 批量数据导入源码使用
- 从Excel中导入数据到Neo4j
- neo4j 大量数据的批量导入
- 如何将 Excel 数据导入 SQL Server
- 如何将 Excel 数据导入 SQL Server
- 如何将数据导入到excel里面
- 如何将 Excel 数据导入 SQL Server
- 如何将Excel中的数据导入数据库
- 如何将shp数据导入Oracle Spatial
- 腾讯,阿里等面试题(一)
- Spring的@PropertySource和@Value注解例子
- RecyclerView框架使用详解
- Java基础再回首之设计模式系列①-----StrategyPattern 策略者模式(案列教程,附带demo)
- 经验谈|如何处理好产品与开发的关系
- 如何将大规模数据导入Neo4j
- 解决MySQL别名重命名不起作用的问题
- Oracle-Replace使用小结
- 给Java新手的一些建议----Java知识点归纳(Java基础部分)
- SSH环境搭建出现NullPointerException
- Ubuntu14.04LTS使用命令行卸载软件
- Spring boot 中Spring data JPA的应用(一)
- Python实现RNN
- LUA中的一些API