Neo4j·数据导入需要注意的坑·方案对比

如果觉得写的好或对您有帮助,麻烦右边点个赞哦~~

 

  • 数据导入方案对比

    • neo4j-admin import
      • 最快的方案
      • 10s导入15w节点
    • Spark(同事)
      • 0.5h, 50w节点
    • apoc导入hdfs里的csv文件
      • 100w个节点数据0.5h导不完

 

  • CSV处理经验

    • 源数据到CSV,注意将源数据中的英文,进行提前处理
    • 字符串内部的引号不提前转义或过滤会引起导入错误
      • 如: 的合法时间“为人特让他”发顺丰 被识别为三个字符串
    • hash不是唯一映射, 自增长ID可以解决唯一性问题

 

  • .CSV说明

    • Node的类型用:Label做header
    • Edge的类型用:TYPE做header
    • 官方文档里ID用的是不带引号的字符串,ID是32位内整型(忘记在哪查到的了)
    • .CSV中的字符串不一定要有单引号' '或双引号,两种引号应该都可以。但请一定加引号,避免字段内有英文逗号。
    • header中propertyName后面的“:类型" 可以省略
    • node.csv里加了ID namespace,edge.csv里也得加上才能互相识别出来
    • Official Document. https://neo4j.com/docs/operations-manual/current/tutorial/import-tool/
      • 可以把同一个label的csv文件分成多个,比如:person-part1.csv, person-part2.csv,只要把它们写在一个--nodes参数就可以了。
      •  

neo4j 批量导入数据

  • 将大规模数据导入Neo4j的五种方法. https://blog.csdn.net/xingxiupaioxue/article/details/71747284
  • 【推荐】.http://arganzheng.life/import-json-data-into-neo4j.html
    • 内容:
      • 通过neo4j-admin import命令可以将数据从 CSV 文件批量导入到未使用的数据库。load data into a previously unused database.
      • 通过[LOAD CSV](https://neo4j.com/docs/developer-manual/3.2/cypher/clauses/load-csv/)语句 import small to medium-sized CSV files into an existing database.
  • 官方提供的 neo4j-import
    • https://neo4j.com/docs/operations-manual/current/tutorial/import-tool/
    • 步骤:
      • 不需要启动数据库可以执行
      • 默认只支持相对路径。 请将需要导入的文件放到bin目录下(其他路径没试过)
      • 执行neo4j-import命令一定要在neo4j根目录的bin文件夹下进行,否则回报参数不全这种奇怪的问题。
      • X.db不能已经存在,即使不报错,最后数据也不正确。
      • .\neo4j-import --into ..\data\databases\graph-geo.db --nodes node*.csv --relationships edge*.csv --ignore-extra-columns=true --multiline-fields=true --skip-bad-relationships=true --bad-tolerance=500
      • (windows) .\neo4j-import --into ..\data\databases\graph5.db --nodes food*.csv --nodes geography*.csv --nodes location*.csv --nodes travel*.csv --relationships:Relation edge.csv --ignore-extra-columns=true --multiline-fields=true --skip-bad-relationships=true --bad-tolerance=500
    • --ignore-extra-columns=false && --bad-tolerance=500 时,当某行列数超过头部,导入数据会直接失败,这一行不会被忽略。
    • Input error: Expected '--nodes' to have at least 1 valid item, but had 0 [] 表示文件路径不支持
      • 如果要是用缩写,结尾必须带有.csv
      • 失败的原因是geography*,location*这种写法不支持
      • geography*.csv是允许的,geography*是不允许的。
      • --nodes food*.csv --nodes geography*.csv --nodes location*.csv --nodes travel*.csv是允许的,food*.csv,geography*.csv,location*.csv,travel*.csv是不允许的
    • 如果.csv中没有:LABEL这一列,需要在命令中显示指定LABEL,如下:
      • --nodes:Entity --relationships:Relation
    • 使用绝对路径的方法. https://my.oschina.net/sunyouling/blog/882754
      • 没试过
      • 在配置文件中注释#dbms.directories.import=import
  • Load CSV 支持周期性分批导入

 

  • Linux下使用neo4j-import
    • 不需要先执行neo4j console
    • sudo /usr/bin/neo4j-import  --into  /var/lib/neo4j/data/databases/graph.db   --nodes ~/node*.csv  --relationships ~/edge*.csv 

 

 

Tips

  • 导入关系的时候最好先把节点的id索引构建了。这样在做关系节点关联查询的时候会比较快。
  • mac导入数据. http://arganzheng.life/import-json-data-into-neo4j.html

 

 

 

你可能感兴趣的:(数据库,Neo4j)