zoukankan      html  css  js  c++  java
  • Neo4j百万级数据导入只需30s

    先上图:425万nodes、180万relationships只用了30s 243ms

    项目需要生成关系图,开始考虑的是用Neo4j官网提供的REST API,从solr中查出2组数据先创建节点再创建关系,过程相当痛苦,速度非常慢,一天都处理不完;

    后来改用cypher语句,通过load csv方法,先将数据生成cvs节点文件和关系文件,再通过load csv file create 语法创建,但文件超过30万条时,服务就出错了,遂放弃;

    以上2种方法适合小数据量的图库操作,和局部插入更新,不适合大量数据的导入,生成关系图;

    后来通过使用官方提供的Neo4jImport 命令行导入数据成功。命令格式在上图中最下面部分有。

    首先是要通过查库生成一定格式的csv数据,按node,relationship分别生成,这个可以通过java写代码生成,格式如下:

    例子:

    节点文件:

    文件名:person.csv

    文件内容:

    id:ID,name,sex,age

    p123,jobs,male,28

    文件名:company-header.csv

    文件内容:

    id:ID,entName

    文件名:company.csv

    文件内容:

    c111,Apple

    关系文件:

    文件名:relationship-header.csv

    文件内容:

    :START_ID,:END_ID,:TYPE

    文件名:relationship.csv

    文件内容:

    p123,c111,founder

    说明:其中一个文件可以分两部分写,一部分写文件头部信息,这些可能需要人为更改,较方便;内容部分一般是代码生成,数据量大,打开修改很费事,一般不动,所以建议分开写,如例子中company-header.csv和company.csv文件就分属于头部文件和内容文件。

    :ID表示此列的值作为接连值,并会创建索引,所以如果这列的值有重复,在创建的时候会报错;

    :START_ID表示起始节点的ID值;

    :END_ID表示结束节点的ID值;

    :TYPE表示关系值;

    例子中表示的是jobs是Apple公司的创始人;

    当然还有其他一些格式,比如:

    :LABEL 给列设置标签,可以设置多个标签,用分号分隔;

    :IGNORE该列不创建properties

    :START_ID(Company)指定该列只能是company中ID的值,前提是company中id:ID(Company)也这样写。

    另外,有问题可以留言探讨,我也是刚研究了一周。

    原文地址:https://www.jianshu.com/p/0aff60f766f3
  • 相关阅读:
    PHP开发经常遇到的几个错误
    PHP的Trait
    PHP反射API
    php split 和 explode 的区别
    php判断检测一个数组里有没有重复的值
    PHP serialize 和 JSON 解析与区别
    php 单文件上传
    php 数组 类对象 值传递 引用传递 区别
    六. 网络编程(解决黏包TCP)
    五. 网络编程(UDP 不黏包)
  • 原文地址:https://www.cnblogs.com/jpfss/p/11492543.html
Copyright © 2011-2022 走看看