Neo4j作为图数据库和知识图谱伴随 2012 年 google 正式发布知识图谱搜索引擎和 2013 年 facebook 开放知识图谱搜索入口以来,知识图谱迎来了一波发展浪潮,neo4j 作为原生的图数据库,也得到广泛的重视和发展、应用。
图数据库是NoSQL数据库的一种类型,它应用图形理论存储实体之间的关系信息。Neo4j中不存在表的概念,只有两类:节点(Node)和关系(Relation),可以简单理解为图里面的点和边。最常见例子就是社会网络中社群、人等之间的关系。
我们以加油站客户关系图数据库为例,简明介绍图数据库概念。
-
标签(Label)
在Neo4j中,一个节点可以有一个以上的标签,从现实世界的角度去看,一个标签可以认为节点的某个类别,比如人(Person)、加油站(station)、车辆(car)等等。 -
节点(Node)
节点是指一个实实在在的对象,这个对象可以有好多的标签,表示对象的种类,也可以有好多的属性,描述其特征,节点与节点之间还可以形成多个有方向(或者没有方向)的关系。例如上图中张三、李四节点。 -
关系(Relationship)
用来描述节点与节点之间的关系,这也是图数据与与普通数据库最大的区别,正是因为有这些关系的存在,才可以描述那些我们普通行列数据库所很难表示的网状关系,比如我们复杂的人际关系网,所谓的六度理论,就可以很方便的用图数据库进行模拟,比如我们大脑神经元之间的连接方式,都是一张复杂的网。
有一点需要重点注意,关系可以拥有属性。 -
属性(Property)
描述节点、关系的特性,采用的是Key-Value结构,可以随意设定来描述节点的特征。
节点定义数据如下所示:
{
"identity": 7,
"labels": [
"Person"
],
"properties": {
"name": "王洪",
"Gender": "男"
}
}
查询语法(Cypher):
序号 | 关键字 | 关键字作用 |
---|---|---|
1 | CREATE | 创建 |
2 | MATCH | 匹配 |
3 | RETURN | 加载 |
4 | WHERE | 过滤检索条件 |
5 | DELETE | 删除节点和关系 |
6 | REMOVE | 删除节点和关系的属性 |
7 | ORDER BY | 排序 |
8 | SET | 添加或更新属性 |
在数据查询中,节点一般用小括号(),关系用中括号[]。
1. 安装Neo4j图数据库
在Neo4j官网上下载安装包Neo4j-3.5.x,此版本依赖jdk1.8及以上。较新较高级版本Neo4j-4.x依赖jdk1.11及以上。
在计算机属性中创建系统环境变量“NEO4J_HOME”,并把主目录(D:\neo4j)设置为变量值。
在path中添加%NEO4J_HOME%\bin。
启动数据库:neo4j console
D:\neo4j\bin>neo4j console
2021-05-20 02:33:05.993+0000 INFO ======== Neo4j 3.5.28 ========
2021-05-20 02:33:06.002+0000 INFO Starting...
2021-05-20 02:33:08.092+0000 INFO Bolt enabled on 127.0.0.1:7687.
2021-05-20 02:33:09.351+0000 INFO Started.
2021-05-20 02:33:10.112+0000 INFO Remote interface available at http://localhost:7474/
默认访问地址,http://localhost:7474/
首次登录默认用户名/密码:neo4j/neo4j
2. 在Neo4j数据库中建立客户关系图谱
我们删除数据库中以往的图,确保一个空白的环境进行操作:
MATCH (n) DETACH DELETE n
这里,MATCH是匹配操作,而小括号()代表一个节点node(可理解为括号类似一个圆形),括号里面的n为标识符。
2.1. 创建节点(实体)
首先,我们创建一个人物节点:
CREATE (a:Person {name:‘张三’}) RETURN a
CREATE是创建操作,Person是标签,代表节点的类型。花括号{}代表节点的属性,属性类似Python的字典。这条语句的含义就是创建一个标签为Person的节点,该节点具有一个name属性,属性值是’张三’。
CREATE (b:IC {sn:‘9030060000053201’}) RETURN b
2.2. 创建关系
Neo4j图数据库遵循属性图模型来存储和管理其数据。
根据属性图模型,关系应该是定向的。基于方向性,Neo4j关系被分为两种主要类型。
- 单向关系
- 双向关系
2.2.2. 现有节点+新的关系
无属性:
MATCH (a:Person) , (b:IC)
CREATE (a)-[r:OWN]->(b)
RETURN r
标签为a与标签为b的建立联系。
MATCH (a:Person) WHERE a.name = '张三', (b:IC) WHERE b.sn = '9030060000053201'
CREATE (b)-[r:OWN]->(b)
RETURN r
有属性:
CREATE
(<node1-label-name>:<node1-name>{<define-properties-list>})-
[<relationship-label-name>:<relationship-name>{<define-properties-list>}]
->(<node1-label-name>:<node1-name>{<define-properties-list>})
RETURN <relationship-label-name>
RETURN子句是可选的。 如果我们想立即看到结果,那么使用它。 否则,我们可以省略这个子句。
如图所示,在Neo4J的界面上可以看到创建成功的节点。
MATCH (<node1-label-name>:<node1-name>),(<node2-label-name>:<node2-name>)
WHERE <condition>
CREATE (<node1-label-name>)-[<relationship-label-name>:<relationship-name>
{<relationship-properties>}]->(<node2-label-name>)
例如创建人:李四与加油卡:8030060000053201的关系:
CREATE (a:Person {name:'李四'}) RETURN a
CREATE (b:IC {sn:'8030060000053201'}) RETURN b
CREATE (b:IC {sn:'7030060000053201'}) RETURN b
MATCH (a:Person) , (b:IC)
WHERE a.name = '李四' AND b.sn='8030060000053201'
CREATE (a)-[r:李四OWN]->(b)
RETURN r
增加关系,也可以这样来写,注意箭头方向和位置。
MATCH (c:car) , (b:IC)
WHERE c.sn = '鄂AU7918' AND b.sn='7030060000053201'
CREATE (c)<-[r:used]-(b)
RETURN r
3. 查询与删除
3.1. 查询节点(实体)
按WHERE条件子句条件查询,条件为:节点标签a中name=‘李四’。
MATCH(a:Person) WHERE a.name='李四' RETURN a
3.2. 查询关系
按关系id查询:
MATCH (r)
WHERE id(r) = 61
RETURN r
弄错关系了,删除掉关系id=61:
MATCH (r)
WHERE id(r) = 61
DELETE r
RETURN r
Cannot delete node<61>, because it still has relationships. To delete this node, you must first delete its relationships.
3.3. 删除关系
MATCH (r)
WHERE id(r) = 61
DETACH DELETE r
RETURN r
https://blog.csdn.net/qq_38737992/article/details/88093224
4. CSV文件导入
4.1 Cypher 命令 LOAD CSV
此命令可以处理本地或远程文件,导入本地文件,文件名前要加前缀 file:/// ,neo4j 有一个默认的安 全设置,只能从 Neo4j 的特定文件夹“import”导入(Neo4j import directory,操作系统不同,目录不同);导入远程文件,直接用其URL。
4.2. 导入节点操作
创建节点csv文件(car.csv):
sn,oil,Displacement,tank
鄂AU7910,gas,1.6,40
鄂AU0911,gas,1.5,35
鄂AU6913,gas,2.0,55
鄂AU7918,gas,1.6,50
鄂AN8911,diesel,3.0,70
导入节点操作
LOAD CSV WITH HEADERS FROM "file:///car.csv" AS line
MERGE (c:car{sn:line.sn,oil:line.oil,Displacement:line.Displacement,tank:line.tank})
4.3. 导入关系操作
创建关系操作csv文件(carrelation.csv):
from_name,to_sn,relation
张三,鄂AU7910,own
李四,鄂AU0911,own
梁红玉,鄂AU6913,own
王洪,鄂AU7918,own
王洪,鄂AN8911,used
导入关系操作:
LOAD CSV WITH HEADERS FROM "file:///carrelation.csv" AS line
match (a:Person{name:line.from_name}),(c:car{sn:line.to_sn})
merge (a)-[r:Driver{OWN:line.relation}]->(c)
5. 界面设置与显示
5.1. 界面概述
在Database Informatica界面,可以查看节点标签(Node Lables)、关系(Relationship Types)、属性(Property Keys),例如下图点击属性“OWN”,则右侧给出查询语句。
如下图,点击所有“*(15)”节点图标,图形化(Graph)显示数据库内容:
5.2. 修改显示属性
6. 总结
6.1. Neo4j与各种NoSQL特性对比
大数据更多的是关注相关性,图数据库与普通数据库相比,图数据库更关注联系,并试图从联系中找到有用信息。以下内容主要来自[4]。
分类 | 数据模型 | 优势 | 劣势 | 举例 |
---|---|---|---|---|
键值数据库 | 哈希表 | 查找速度快 | 数据无结构化,通常只被当作字符串或者二进制数据 | Redis |
列存储数据库 | 列式数据存储 | 查找速度快;支持分布横向扩展;数据压缩率高 | 功能相对受限 | HBase |
文档型数据库 | 键值对扩展 | 数据结构要求不严格;表结构可变;不需要预先定义表结构 | 查询性能不高,缺乏统一的查询语法 | MongoDB |
图数据库 | 节点和关系组成的图 | 利用图结构相关算法(最短路径、节点度关系查找等) | 可能需要对整个图做计算,不利于图数据分布存储 | Neo4j、JanusGraph |
6.2. 适用范围
图数据库应用也很广泛,特别是具有网络复杂关系特性的数据,包括社交网络、推荐、主数据管理等。
6.2.1. 社交网络应用
社交是人与人之间的连接,以图数据模型为内在的图数据库天生适用于明显的以联系为中心的领域。在社交网络中使用图数据库可以方便得识别人/群组和他们交流的事物之间的直接或间接的联系,使用户能够高效地对其他人或事物进行打分、评论、发现彼此存在的关系和共同关系的事情。可以更加直观得了解社交网络中人与人之间如何互动、如何关联、如何以群组的形式来做事情或选择。
6.2.2. 实时推荐
在零售、招聘、情绪分析、搜索和知识管理领域,社交网络和推荐引擎可以提供关键的差异化能力,有很多种办法可以实现推荐,但使用图数据库在实时性和效率上有其特有的优势。推荐算法在人和事物之间建立联系,而联系建立的基础是用户的行为,比如购买、生产、消费、打分或评论有关资源等行为。推荐引擎可以识别出某些资源会吸引特定个人或群体,或者某些个人或群体可能对特定资源感兴趣。
一个有效的推荐依赖于对事物之间关联的理解,同时也依赖于这些关联的质量和强度,而属性图是所有这些关系密切、关联紧密的数据结构的最佳表达方式。用图数据库存储和查询这些数据使得应用程序可以为最终用户呈现实时结果,反映数据最新的变化,而不是返回给用户那些预计算的状态结果。
6.2.3. 地理空间管理
地理空间类的应用程序包括公路网、铁路网等,地理空间操作依赖于特定的数据结构,简单的加权带方向的联系,复杂到空间索引如R树。和索引一样,这些数据结构天生就以图的形式呈现,尤其是层级结构,非常适合图数据库。
总的来说,通信、物流、旅游已经路由计算相关领域的地理空间应用经常会使用图数据库。
6.2.4. 主数据管理(Master Data Managerment)
主数据管理(MDM)包括的数据涉及用户、客户、产品、供应商、部门、区域、站点、成本中心和业务单元等。这些数据来源可能是多种多样的,MDM用来识别、清洗、存储和管理这些数据。其关键问题包括谁组织结构的变化、企业合并和业务规则的变化来管理这些变化;融合新的数据源,用外部源数据补充已有的数据;解决报告需求、鉴定需求和商业智能客户的需求;当数据的值和模式变化时对数据进行版本管理。图数据库的数据模型高效匹配MDM的快速演变和不断变化的业务需求。
6.2.5. 网络和数据中心管理
图数据库已经成功地使用在了电信、网络管理和分析、云平台管理、数据中心和IT资产管理以及网络影响分析等领域。在这些领域里,他们将影响分析和问题解决的时间时间从数天数小时减少到了分钟级甚至秒级。面对不断变化的网络模式,图数据库的性能和灵活性都是它适合这些领域应用的重要因素。
6.2.6. 授权和访问控制
图数据库可以存储那些复杂的、高度关联的、跨越数十亿参与者和资源的访问控制结构。尤其适用于内容管理、联合授权服务、社交网络偏好已经软件服务化提供。将这些系统从关系型数据库切换到图数据库后,性能从分钟级提升到毫秒级。
6.2.7 其他
还广泛用在金融和保险行业反欺诈、风控,电商和社交类产品防机器人作弊等领域。
参考:
[1]《Neo4j基本入门》 博客园 ,浩子同学 ,2020年4月
[2]《Neo4j : 通过节点的 id属性 对节点进行查,改,删操作》 CSDN博客 ,syrdbt ,2019年3月
[3]《手把手教你快速入门知识图谱 - Neo4J教程》知乎, 异尘 ,2019年10月
[4]《图数据库和Neo4j - 关系是第一生产力的兴起》 简书 ,李穆 ,2019年7月
[5]《Getting Started with Neo4j》