第一部分 图 和
Neo4j
1.1
图论
1.1.1
图论起源
---
柯尼斯堡(
Konigsberg
)七桥问题
众所周知,图论起源于一个非常经典的问题
——
柯尼斯堡(
Konigsberg
)七桥问题。
1738
年,瑞典数
学家欧拉
( Leornhard Euler)
解决了柯尼斯堡七桥问题。由此图论诞生,欧拉也成为图论的创始人。
欧拉把问题的实质归于
"
一笔画
"
问题,即判断一个图是否能够遍历完所有的边
(Edge)
而没有重复,而柯
尼斯堡七桥问题则是一笔画问题的一个具体情境。欧拉证明这个问题不成立。
满足一笔画的图满足两个条件
:
图必须是一个完整图
有零个或二个奇数点
1.1.2
图 和 节点
图是一组节点和连接这些节点的关系组成。图形数据存储在节点和关系所在的属性上。属性是键值对表
示的数据。
在图形理论中,我们可以使用圆表示一个节点
并且可以向里面添加键值对形式的数据。
1.1.3
节点关系表达
简单关系表达
此处在两个节点之间创建关系名称
“
跟随
”
。 这意味着
Profifile1
跟随
Profifile2
。
复杂关系表达
这里节点用关系连接。 关系是单向或双向的。
从
XYZ
到
PQR
的关系是单向关系。
从
ABC
到
XYZ
的关系是双向关系。
1.1.4
属性图模型规则
图表示节点,关系和属性中的数据
节点和关系都包含属性
关系连接节点
属性是键值对
节点用圆圈表示,关系用方向键表示。
关系具有方向:单向和双向。
每个关系包含
“
开始节点
”
或
“
从节点
”
和
“
到节点
”
或
“
结束节点
”
1.2
知识图谱和图库
1.2.1
知识图谱
一种基于图的数据结构,由节点
(Node)
和边
(Edge)
组成。其中节点即实体,由一个全局唯一的
ID
标示,
边就是关系用于连接两个节点。通俗地讲,知识图谱就是把所有不同种类的信息(
Heterogeneous
Information
)连接在一起而得到的一个关系网络。知识图谱提供了从
“
关系
”
的角度去分析问题的能力。
互联网、大数据的背景下,谷歌、百度、搜狗等搜索引擎纷纷基于该背景,创建自己的知识图谱
Knowledge Graph
(谷歌)、知心(百度)和知立方(搜狗),主要用于改进搜索质量。
1.2.2
图数据库
一般情况下,我们使用数据库查找事物间的联系的时候,只需要短程关系的查询(两层以内的关联)。
当需要进行更长程的,更广范围的关系查询时,就需要图数据库的功能。而随着社交、电商、金融、零
售、物联网等行业的快速发展,现实世界的事物之间织起了一张巨大复杂的关系网,传统数据库面对这
样复杂关系往往束手无策。因此,图数据库应运而生。
图数据库
(Graph database)
指的是以图数据结构的形式来存储和查询数据的数据库。
知识图谱中,知识的组织形式采用的就是图结构,所以非常适合用图库进行存储。
1.2.3
图形数据库优势
在需要表示多对多关系时,我们常常需要创建一个关联表来记录不同实体的多对多关系。如果两个实体
之间拥有多种关系,那么我们就需要在它们之间创建多个关联表。而在一个图形数据库中,我们只需要
标明两者之间存在着不同的关系。如果希望在两个结点集间建立双向关系,我们就需要为每个方向定义
一个关系。 也就是说,相对于关系型数据库中的各种关联表,图形数据库中的关系可以通过关系属性这
一功能来提供更为丰富的关系展现方式。因此相较于关系型数据库,图形数据库的用户在对现实进行抽
象时将拥有一个额外的武器,那就是丰富的关系。
优势总结
:
性能上,对长程关系的查询速度快
擅于发现隐藏的关系,例如通过判断图上两点之间有没有走的通的路径,就可以发现事物间的关联
1.3 Neo4j
基础
1.3.1
什么是
Neo4j
Neo4j
是一个开源的 无
Shcema
的 基于
java
开发的 图形数据库,它将结构化数据存储在图中而不
是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的
Java
持久化引擎。程序数据是
在一个面向对象的、灵活的网络结构下,而不是严格、静态的表中
,
但可以享受到具备完全的事务
特性、企业级的数据库的所有好处。
https://db-engines.com/en/ranking
1.3.2 Neo4j
模块构建
Neo4j
主要构建块
节点
属性
关系
标签
数据浏览器
节点
节点是图表的基本单位。 它包含具有键值对的属性
属性
属性是用于描述图节点和关系的键值对
Key =
值
其中
Key
是一个字符串
值可以通过使用任何
Neo4j
数据类型来表示
关系
关系是图形数据库的另一个主要构建块。 它连接两个节点,如下所示。
这里
Emp
和
Dept
是两个不同的节点。
“WORKS_FOR”
是
Emp
和
Dept
节点之间的关系。
因为它表示从
Emp
到
Dept
的箭头标记,那么这种关系描述的一样
Emp WORKS_FOR Dept
每个关系包含一个起始节点和一个结束节点。
这里
“Emp”
是一个起始节点。
“Dept”
是端节点。
由于该关系箭头标记表示从
“Emp”
节点到
“Dept”
节点的关系,该关系被称为
“
进入关系
”
到
“Dept”
节点。
并且
“
外向关系
”
到
“Emp”
节点。
像节点一样,关系也可以包含属性作为键值对。
标签
Label
将一个公共名称与一组节点或关系相关联。 节点或关系可以包含一个或多个标签。 我们可以为现
有节点或关系创建新标签。 我们可以从现有节点或关系中删除现有标签。
从前面的图中,我们可以观察到有两个节点。
左侧节点都有一个标签:
“EMP”
,而右侧节点都有一个标签:
“Dept”
。
这两个节点之间的关系,也有一个标签:
“WORKS_FOR”
注:
-
Neo4j
将数据存储在节点或关系的属性中。
1.3.3 Neo4j
的主要应用场景
社交媒体和社交网络
当使用图形数据库为社交网络应用程序提供动力时,可以轻松利用社交关系或根据活动推断关系。
查询社区聚类分析,朋友的朋友推荐,影响者分析,共享和协作关系分析等
推荐引擎和产品推荐系统
图形驱动的推荐引擎通过实时利用多种连接,帮助公司个性化产品,内容和服务。
内容和媒体推荐,图形辅助搜索引擎,产品推荐,专业网络,社会推荐。
身份和访问管理
使用图形数据库进行身份和访问管理时,可以快速有效地跟踪用户,资产,关系和授权。
查询访问管理,资产来源,数据所有权,身份管理,互连组织,主数据,资源授权
金融反欺诈多维关联分析场景
通过图分析可以清楚地知道洗钱网络及相关嫌疑,例如对用户所使用的帐号、发生交易时的
IP
地址、
MAC
地址、手机
IMEI
号等进行关联分析。
1.3.4 Neo4j
环境搭建
Neo4j
环境
Linux
下搭建
(1).
切换到
Linux
下 到安装目录
neo4j
上传安装包 或者 下载安装包
使用
ftp
工具上传
neo4j-community-3.5.17.tar
到
liunx
下
或者
wget
https://neo4j.com/artifact.php?name=neo4j-community-3.5.17-unix.tar.gz
(2).
解压
tar -xvf neo4j-community-3.5.17.tar
(3).
修改配置文件
neo4j.conf
vi conf/neo4j.conf
主要是修改
允许远程访问的地址
把对应的注释打开即可
dbms.connectors.default_listen_address=0.0.0.0
(4).
开放对应的访问端口
默认要开放
7474
和
7687
fifirewall-cmd --zone=public --add-port=7474/tcp --permanent
fifirewall-cmd --zone=public --add-port=7687/tcp --permanent
systemctl reload fifirewalld
(5).
启动
./bin/neo4j start
(6).
使用浏览器 访问服务器上的
neo4j
http://192.168.211.133:7474
默认的账号是
neo4j
密码
neo4j
这里第一次登录的话会要求修改密码
Windows
下的安装
(1).
从
https://neo4j.com/download-center/#community
下载最新的
Neo4j Server
安装文件
可以看到
neo4J
软件
exe
或
zip
格式的所有版本
(2).
下载
Neo4j 3.5.17 (zip)
(3).
解压
(4).
修改配置文件
dbms.connectors.default_listen_address=0.0.0.0
(5) .
通过
neo4j.bat install-service
安装
neo4j
服务
注意的问题
如果是
4.0
以及以上版本需要
jdk11
修改文件
bin/neo4j.ps1
Import-Module "neo4j
的主目录
\bin\Neo4j-Management.psd1"
(6).neo4j.bat
启动
neo4j.bat start
(7).
使用浏览器 访问服务器上的
neo4j
http://127.0.0.1:7474
默认的账号是
neo4j
密码
neo4j
这里第一次登录的话会要求修改密码
1.3.5 Neo4j
数据浏览器
数据浏览器访问
一旦我们安装
Neo4j
,我们可以访问
Neo4j
数据浏览器使用以下
URL
http:// localhost:7474/browser/
Neo4j
数据浏览器用于执行
CQL
命令并查看输出输出。
这里我们需要在美元提示符处执行所有
CQL
命令:
“$”
如
CREATE(cc:CreditCard)
在美元符号后键入命令,然后单击
“
执行
”
按钮运行命令。
它与
Neo4j
数据库服务器交互,检索和显示下面的结果到那个美元提示。
使用
“VI
视图
”
按钮以图形格式查看结果。 上图以
“UI
视图
”
格式显示结果。
导出
CSV
或者
JSON
单击
“
导出
CSV”
按钮以
csv
文件格式导出结果
第二部分
Neo4j CQL
2.1 CQL
简介
CQL
代表
Cypher
查询语言。 像关系型数据库具有查询语言
SQL
,
Neo4j
使用
CQL
作为查询语言。
Neo4j CQL
它是
Neo4j
图形数据库的查询语言。
它是一种声明性模式匹配语言。
它遵循
SQL
语法。
它的语法是非常简单且人性化、可读的格式。
常用的
Neo4j CQL
命令
/
条款如下:
S.No.
CQL
命令
/
条
作用
1
CREATE
创建
创建节点,关系和属性
2
MATCH
匹配
检索有关节点,关系和属性数据
3
RETURN
返回
返回查询结果
4
WHERE
条件
提供条件过滤检索
MATCH
数据
5
DELETE
删除
删除节点和关系
6
REMOVE
移除
删除节点和关系的属性
7
SET
设置
添加或更新标签
8
ORDER BY
排序
对结果排序
9
SKIP LIMIT
分页
分页
10
DISTINCT
排重
排重
完成上面的语法 我们基于庆余年电视剧人物关系图片
:
2.2 CREATE
语法元素
描述
< node-name>
它是我们将要创建的节点名称。
< label-name>
它是一个节点标签名称
< property1-name>...< propertyn
name>
属性是键值对。 定义将分配给创建节点的属性的名
称
< property1-value>...< propertyn
value>
属性是键值对。 定义将分配给创建节点的属性的值
语法说明:
举例
:
2.3 MATCH RETURN
命令语法
CREATE (
<node-name>:<label-name>
[{
<property1-name>:<property1-Value>
........
<propertyn-name>:<propertyn-Value>
}]
)
CREATE
(person:Person)
CREATE
(person:Person {cid:1,name:"
范
闲
",age:24,gender:0,character:"A",money:1000});
CREATE
(person:Person {cid:2,name:"
林婉
儿
",age:20,gender:1,character:"B",money:800});
CREATE
(person:Person {cid:3,name:"
庆
帝
",age:49,gender:0,character:"A",money:8900});
MATCH