暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Neo4j图数据库简介及几种数据加载的方法

DATA江湖 2022-03-15
1239
一、简介

  图数据库本身属于NoSql数据库中的一种,是基于数学中图论实现的一种数据库。不同于传统的关系型数据库将数据存在库表字段中,图数据库将数据和数据之间的关系存在节点和边中,在图数据库中这被称作“节点”和“关系”。没有了库表字段的概念,相当于是把数据存在了一张大宽表中。图数据库最大的优势是体现在对数据关系的检索上。传统数据库的一些特性如CRUD、处理事务的能力在图数据库中也都支持。Neo4j是由Java实现的开源NoSql图数据库,是图数据库中较为流行的一款,分为企业版与社区版。

  术语及图模型(节点,关系,属性,标签)

节点:
  • 节点是主要的数据元素
  • 节点通过关系连接到其他节点
  • 节点可以具有一个或多个属性(即,存储为键/值对的属性)
  • 节点有一个或多个标签,用于描述其在图表中的作用
关系:
  • 关系连接两个节点
  • 关系是方向性的
  • 节点可以有多个甚至递归的关系
  • 关系可以有一个或多个属性(即存储为键/值对的属性)
属性:
  • 属性是命名值,其中名称(或键)是字符串
  • 属性可以被索引和约束
  • 可以从多个属性创建复合索引
标签:
  • 标签用于将节点分组
  • 一个节点可以具有多个标签
  • 对标签进行索引以加速在图中查找节点


二、数据加载
1,create语句

创建节点与关系(创建两个同时带有标签和属性的节点)

    create(n:Person{name:'jason',title:'developer'}),  
          (m:Db{name:'neo4j',title:'graph_db'})  

    再创建关系

       match(a:Person),(b:Db) 
       where a.name='jason' and b.name='neo4j'   
      CREATE (a)-[:learn{level:'primary'}]->(b) 

      等同于

         create(n:Person{name:'jason',title:'developer'})-[:learn{level:'primary'}]->(m:Db{name:'neo4j',title:'graph_db'})
        2,LOAD CSV语句(本地)
        配置:
        文件地址D:\Neo4j\neo4j-community-4.4.4-windows\neo4j-community-4.4.4\conf\neo4j.conf
        dbms.directories.import=import
        dbms.security.allow_csv_import_from_file_urls=true
        当然了,以上两个配置是默认为import 和 true。
        首先将需要加载的csv放到import文件夹下(D:\Neo4j\neo4j-community-4.4.4-windows\neo4j-community-4.4.4\import)。


          LOAD CSV FROM 'file:///artists.csv' AS line  
          CREATE (:Artist {name: line[1], year: toInteger(line[2])})  

          csv有标题的情况

            LOAD CSV WITH HEADERS FROM 'file:///artists-with-headers.csv' AS line  
            CREATE (:Artist {name: line.Name, year: toInteger(line.Year)})  

            csv大量数据的情况

            如果 CSV 文件包含大量行(接近数十万或数百万),为了减少事务状态的内存开销。可以分批次进行提交( 默认一次提交1000条,可以设置一次提交的条数)。USING PERIODIC COMMIT可用于指定 Neo4j 在查询多行后执行提交。

              :auto USING PERIODIC COMMIT 1000 LOAD CSV FROM 'file:///artists.csv' AS line  
              CREATE (:Artist {name: line[1], year: toInteger(line[2])}) 
              3,Neo4j-admin import
              说明:PowerShell 执行策略是一项安全功能,用于控制 PowerShell 加载配置文件和运行脚本的条件。需要将ExecutionPolicy修改为RemoteSigned才可以。上传的脚本和配置文件的数字签名是受信任的。根据提示,执行流程为:set-ExecutionPolicyRemoteSignedYset-ExecutionPolicy-Scope CurrentUserRemoteSignedY;见下图。

              然后命令行输入:
              neo4j-admin import--database=import0309 --nodes=import/artists.csv
              运行过程信息如下(包括内存占用,节点数量,关系数量等)。

              然后可以看到,在databases文件夹下添加了import0309文件(数据库)

              如果进入新建的import0309数据库,需要在配置里进行修改,如下图:

              命令行输入:neo4j.bat console即可
              4,Batch Inserter与Batch Import (略)
              以下对比了几种数据导入的方法及场景

              • 项目刚开始,大量数据导入数据库→Neo4j-import;

              • 数据库投入使用,并且可以容忍Neo4j关闭一段时间→Batch Import,Batch Inserter;

              • 数据库已经投入使用,不能容忍Neo4j的临时关闭→那么LOAD CSV;

              • 插入少量的数据,且不怎么在乎实时性,那么请直接看Cypher语言。

              注:

              • 在LOADCSV前面加上USING PERIODIC COMMIT 1000,1000表示每1000行的数据进行一次Transaction提交,提升性能。

              • 建立index可以使得查询性能得到巨大提升。如果不建立index,则需要对每个node的每一个属性进行遍历,所以比较慢。并且index建立之后,新加入的数据都会自动编入到index中。index是建立在label上的,不是在node上,所以一个node有多个label,需要对每一个label都建立index。

              主要参考资料:

              [1]越来越火的图数据库究竟是什么?https://www.cnblogs.com/mantoudev/p/10414495.html

              [2]load-csv  https://neo4j.com/docs/cypher-manual/current/clauses/load-csv/

              [3] PowerShell 执行策略 https://docs.microsoft.com/zh-cn/powershell/module/microsoft.powershell.core/about/about_execution_policies?view=powershell-7.2

              [4] neo4j-admin-import https://neo4j.com/docs/operations-manual/current/tutorial/neo4j-admin-import/


              往期相关文章:

              知识图谱之python对neo4j数据库的增删改查

              知识图谱理解与Neo4j的python简单实现

              知识图谱之图数据库Neo4j安装








              文章转载自DATA江湖,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

              评论