neo4j导入数据的不同方式比较

本文详细对比了Neo4j中六种常见的数据导入方式,包括Cyphercreate、Cypherloadcsv、neo4j-import、BatchInserter、batch-import及apoc等工具的适用场景、导入速度与优缺点,帮助读者根据实际需求选择最佳导入策略。

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

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

https://blog.youkuaiyun.com/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语言。
 

### Neo4j 数据导入方法 在使用 Neo4j 进行数据导入时,需遵循特定的操作流程以确保数据能够成功加载至数据库中。以下是关于如何在 Neo4j导入数据的具体说明: #### 1. 停止 Neo4j 服务 为了安全地执行数据导入操作,在开始之前需要停止正在运行的 Neo4j 服务。可以通过以下命令实现这一目标: ```bash sudo neo4j stop ``` 此步骤对于防止数据冲突以及保障导入过程的安全性至关重要[^1]。 #### 2. 准备数据文件 在进行实际的数据导入前,应准备好待导入数据文件。这些文件通常包括节点(Nodes)关系(Relationships)。常见的文件格式为 CSV 文件,其中每列代表不同的属性或字段。例如: - 节点文件可能命名为 `product_clean_admin1.csv` 或 `consumerinfo_admin.csv`。 - 关系文件则可以是类似于 `relation_combine.csv` 的结构化文档。 确保所有相关文件已放置于 Neo4j 安装目录下的适当位置,通常是 bin 文件夹内[^3]。 #### 3. 使用 `neo4j-admin import` 工具 Neo4j 提供了一个强大的命令行工具——`neo4j-admin import` 来批量处理大规模数据集的导入工作。其基本语法如下所示: ```bash ./neo4j-admin import \ --database=neo4j \ --nodes=<path_to_node_file_1>,<path_to_node_file_2>... \ --relationships=<path_to_relationship_file> ``` 具体参数解释如下: - `--database`: 指定要使用数据库名称,默认情况下为 `neo4j.db`。 - `--nodes`: 列举用于创建节点的所有 CSV 文件路径。 - `--relationships`: 明确描述节点间关联性的 CSV 文件地址。 附加选项还包括但不限于: - `--skip-duplicate-nodes`: 当检测到重复节点时跳过它们而不抛出错误。 - `--skip-bad-relationships`: 遇见不合法的关系记录时忽略而非终止整个进程。 #### 示例代码片段 假设存在三个节点文件 (`product_clean_admin1.csv`, `consumerinfo_admin.csv`, `city_admin.csv`) 及一个关系文件 (`relation_combine.csv`) ,那么完整的导入指令可写成这样: ```bash ./neo4j-admin import \ --database=neo4j \ --nodes=/path/to/product_clean_admin1.csv,/path/to/consumerinfo_admin.csv,/path/to/city_admin.csv \ --relationships=/path/to/relation_combine.csv \ --skip-duplicate-nodes=true \ --skip-bad-relationships=true ``` 以上命令将按照指定配置完成相应数据的载入动作。 ### 注意事项 - **兼容模式**: 如果当前数据库并非全新建立而是已有内容,则上述方式可能会覆盖原有数据;此时建议采用 Cypher 查询语句逐条插入新纪录作为替代方案[^2]。 - **权限管理**: 确认拥有足够的访问权限去读取源文件并修改目标存储区域设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值