美文网首页
Nosql-neo4j-海量数据导入Neo4j

Nosql-neo4j-海量数据导入Neo4j

作者: Viterbi | 来源:发表于2022-09-26 08:55 被阅读0次

[toc]

neo4j数据批量导入

目前主要有以下几种数据插入方式:(转自:如何将大规模数据导入Neo4j)

  • Cypher CREATE 语句,为每一条数据写一个CREATE
  • Cypher LOAD CSV 语句,将数据转成CSV格式,通过LOAD CSV读取数据。
  • 官方提供的Java API —— Batch Inserter
  • 大牛编写的 Batch Import 工具 (已经停止更新)
  • 官方提供的 neo4j-import 工具(https://neo4j.com/developer/guide-import-csv/#_super_fast_batch_importer_for_huge_datasets

这些工具有什么不同呢?速度如何?适用的场景分别是什么?我这里根据我个人理解,粗略地给出了一个结果:

这边重点来说一下官方最快的neo4j-import,使用的前提条件:

  • graph.db需要清空,可以指定graph.db;
  • neo4j需要停掉;
  • 接受CSV导入,而且格式较为固定;
  • 试用场景:首次导入
  • 节点名字需要唯一,ID需要唯一
  • 比较适用:首次导入,无法迭代更新

1 neo4j基本参数

1.1 启动与关闭:

bin\neo4j start
bin\neo4j stop
bin\neo4j restart
bin\neo4j status

1.2 neo4j-admin的参数:控制内存

1.2.1 memrec 是查看参考内存设置

neo4j-admin memrec [--memory=<memory dedicated to Neo4j>] [--database=<name>]

参考:

$neo4j-home> bin/neo4j-admin memrec --memory=16g

1.2.2 指定缓存–pagecache

还有–pagecache单条命令指定缓存:

bin/neo4j-admin backup --from=192.168.1.34 --backup-dir=/mnt/backup --name=graph.db-backup --pagecache=4G 指的是,再该条导入数据的指令下,缓存设置。

1.3 neo4j-admin的参数:Dump and load databases - 线下备份

执行该两步操作,需要关闭数据库。参考:10.7. Dump and load databases

dump过程:把graph.db转存到.dump 需要关闭数据库

$neo4j-home> bin/neo4j-admin dump --database=graph.db --to=/backups/graph.db/2016-10-02.dump
$neo4j-home> ls /backups/graph.db
$neo4j-home> 2016-10-02.dump

load过程:把.dumpload进来 好像可以不用关闭

$neo4j-home> bin/neo4j stop
Stopping Neo4j.. stopped
$neo4j-home> bin/neo4j-admin load --from=/backups/graph.db/2016-10-02.dump --database=graph.db --force

如果带–force,那么load之后,会更新所有的存在着的.db(any existing database gets overwritten. )

1.4 neo4j-admin的参数:backup and restore - 在线备份

参考:6.2. Perform a backup

在线备份backup :

$neo4j-home> export HEAP_SIZE=2G
$neo4j-home> mkdir /mnt/backup
$neo4j-home> bin/neo4j-admin backup --from=192.168.1.34 --backup-dir=/mnt/backup --name=graph.db-backup --pagecache=4G
backup 进临时文件夹之中。

追加备份:

$neo4j-home> export HEAP_SIZE=2G
$neo4j-home> bin/neo4j-admin backup --from=192.168.1.34 --backup-dir=/mnt/backup --name=graph.db-backup --fallback-to-full=true --check-consistency=true --pagecache=4G

2 简单demo

  • movies.csv.
movieId:ID,title,year:int,:LABEL
tt0133093,"The Matrix",1999,Movie
tt0234215,"The Matrix Reloaded",2003,Movie;Sequel
tt0242653,"The Matrix Revolutions",2003,Movie;Sequel

其中,title是属性,注意此时需要有双引号;year:int也是属性,只不过该属性是数值型的; :LABEL与:ID一样生成了一个新节点,也就是一套数据可以通过:生成双节点

  • actors.csv.
personId:ID,name,:LABEL
keanu,"Keanu Reeves",Actor
laurence,"Laurence Fishburne",Actor
carrieanne,"Carrie-Anne Moss",Actor
  • roles.csv.
    其中,:LABEL非常有意思,是节点的附属属性,其中personId:ID一定是唯一的,:LABEL可以不唯一。 而且,载入之后,:LABEL单独会成为新的节点,而且是去重的。
:START_ID,role,:END_ID,:TYPE
keanu,"Neo",tt0133093,ACTED_IN
keanu,"Neo",tt0234215,ACTED_IN
keanu,"Neo",tt0242653,ACTED_IN
laurence,"Morpheus",tt0133093,ACTED_IN
laurence,"Morpheus",tt0234215,ACTED_IN
laurence,"Morpheus",tt0242653,ACTED_IN
carrieanne,"Trinity",tt0133093,ACTED_IN
carrieanne,"Trinity",tt0234215,ACTED_IN
carrieanne,"Trinity",tt0242653,ACTED_IN

其中,这个节点的属性,role没有标注:,role是属性,可以加双引号,也可以不加。最好是指定一下格式,譬如:int为数值型,还有字符型roles:string[]

linux执行:

neo4j_home$ bin/neo4j-admin import --nodes import/movies.csv --nodes import/actors.csv --relationships import/roles.csv 其中,之前老版本批量导入是:neo4j-import,现在批量导入是:neo4j-admin。

Twitter用户关系导入

  • Twitter用户实体 twitter.csv

  • Twitter用户关系 relation.csv

  • 导入
./bin/neo4j-admin import --database twitter.db --nodes ./czg/twitter/twitter.csv --relationships ./czg/twitter/relation.csv

本文使用 文章同步助手 同步

相关文章

网友评论

      本文标题:Nosql-neo4j-海量数据导入Neo4j

      本文链接:https://www.haomeiwen.com/subject/eeidortx.html