美文网首页
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