图论
图论起源 --- 柯尼斯堡(Konigsberg)七桥问题
众所周知,图论起源于一个非常经典的问题——柯尼斯堡(Konigsberg)七桥问题。1738年,瑞典数 学家欧拉( Leornhard Euler)解决了柯尼斯堡七桥问题。由此图论诞生,欧拉也成为图论的创始人
欧拉把问题的实质归于"一笔画"问题,即判断一个图是否能够遍历完所有的边(Edge)而没有重复,而柯 尼斯堡七桥问题则是一笔画问题的一个具体情境。欧拉证明这个问题不成立。
满足一笔画的图满足两个条件:
- 图必须是一个完整图
- 有零个或二个奇数点
图 和 节点
图是一组节点和连接这些节点的关系组成。图形数据存储在节点和关系所在的属性上。属性是键值对表示的数据。
在图形理论中,我们可以使用圆表示一个节点 并且可以向里面添加键值对形式的数据。
节点关系表达
简单关系表达
此处在两个节点之间创建关系名称“跟随”。 这意味着Profile1 跟随 Profile2。
复杂关系表达
这里节点用关系连接。 关系是单向或双向的。
- 从ABC和XYZ的关系是单向关系。
- 从ABC和PQR的关系是双向关系。
属性图模型规则
- 图表示节点,关系和属性中的数据
- 节点和关系都包含属性
- 关系连接节点
- 属性是键值对
- 节点用圆圈表示,关系用方向键表示。
- 关系具有方向:单向和双向。
- 每个关系包含“开始节点”或“从节点” 和 “到节点”或“结束节点”
知识图谱和图库
知识图谱
一种基于图的数据结构,由节点(Node)和边(Edge)组成。其中节点即实体,由一个全局唯一的ID标示, 边就是关系用于连接两个节点。通俗地讲,知识图谱就是把所有不同种类的信息(Heterogeneous Information)连接在一起而得到的一个关系网络。知识图谱提供了从“关系”的角度去分析问题的能力。
互联网、大数据的背景下,谷歌、百度、搜狗等搜索引擎纷纷基于该背景,创建自己的知识图谱 Knowledge Graph(谷歌)、知心(百度)和知立方(搜狗),主要用于改进搜索质量。
图数据库
一般情况下,我们使用数据库查找事物间的联系的时候,只需要短程关系的查询(两层以内的关联)。 当需要进行更长程的,更广范围的关系查询时,就需要图数据库的功能。而随着社交、电商、金融、零 售、物联网等行业的快速发展,现实世界的事物之间织起了一张巨大复杂的关系网,传统数据库面对这 样复杂关系往往束手无策。因此,图数据库应运而生。
图数据库(Graph database)指的是以图数据结构的形式来存储和查询数据的数据库。
知识图谱中,知识的组织形式采用的就是图结构,所以非常适合用图库进行存储。
图形数据库优势
在需要表示多对多关系时,我们常常需要创建一个关联表来记录不同实体的多对多关系。如果两个实体 之间拥有多种关系,那么我们就需要在它们之间创建多个关联表。而在一个图形数据库中,我们只需要 标明两者之间存在着不同的关系。如果希望在两个结点集间建立双向关系,我们就需要为每个方向定义 一个关系。 也就是说,相对于关系型数据库中的各种关联表,图形数据库中的关系可以通过关系属性这 一功能来提供更为丰富的关系展现方式。因此相较于关系型数据库,图形数据库的用户在对现实进行抽 象时将拥有一个额外的武器,那就是丰富的关系。
优势总结:
- 性能上,对长程关系的查询速度快
- 擅于发现隐藏的关系,例如通过判断图上两点之间有没有走的通的路径,就可以发现事物间的关联
Neo4j安装
Centos安装
前提环境:jdk8环境
特别提醒:neo4j4.0以上需要jdk11以上。
wget https://dist.neo4j.org/neo4j-community-3.5.17-unix.tar.gz
tar -xvf neo4j-community-3.5.17-unix.tar.gz
修改配置文件:
cd neo4j-community-3.5.17
vi conf/neo4j.conf
dbms.connectors.default_listen_address=0.0.0.0
开放对应端口:
firewall-cmd --zone=public --add-port=7474/tcp --permanent
firewall-cmd --zone=public --add-port=7687/tcp --permanent
systemctl reload firewalld
启动:
bin/neo4j start
使用浏览器 访问服务器上的 neo4j:默认账号密码都是neo4j
第一次登录后,会要求你修改密码,修改完成后,进入首页:
新建:
执行查询:
有时候在执行器中的CQL太长,需要换行时,可以按住shift+enter键。