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

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


LOAD CSV FROM 'file:///artists.csv' AS lineCREATE (:Artist {name: line[1], year: toInteger(line[2])})
csv有标题的情况
LOAD CSV WITH HEADERS FROM 'file:///artists-with-headers.csv' AS lineCREATE (: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 lineCREATE (:Artist {name: line[1], year: toInteger(line[2])})




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


项目刚开始,大量数据导入数据库→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/
往期相关文章:




