图数据库学习总结--第一课 简介与 neo4j 安装
一、图数据库介绍
图数据库(Graph Database)是基于图论实现的一种新型NoSQL数据库。它的数据存储结构和数据的查询方式都是以图论为基础的。图论中图的基本元素为节点和边,在图数据库中对应的就是节点和关系。
在图数据库中,数据与数据之间的关系通过节点和关系构成一个图结构并在此结构上实现数据库的所有特性,如对图数据对象进行创建、读取、更新、删除(Create、Read、Update、Delete,简称:CRUD)等操作的能力,还有处理事务的能力和高可用性等。
目前市面上较为流行的图数据库产品有以下几种:
较为流行的图数据库
1.2、图数据库与关系数据库的对比
RDBMS中关系查询示意图
图数据库中关系查询示意图
复杂数据关系
二、Neo4j
Neo4j是由Java和Scala实现的开源NoSQL图数据库。自2003年开始研发,直到2007年正式发布第一版。Neo4j的源代码托管在GitHub上,技术支持托管在Stack Overflow和Neo4j Google讨论组上。Neo4j现如今已经被各种行业的数十万家公司和组织采用。Neo4j的使用案例涵盖了包括网络管理、软件分析、科学研究、路由分析、组织和项目管理、决策制定、社交网络等。
官方网站:https://neo4j.com
Github: https://github.com/neo4j/neo4j
Example: https://github.com/neo4j-examples
Neo4j具备的特性:
2.1 介绍
2.1.1、Neo4j是什么
Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。
2.1.2、Neo4j的特点
- SQL就像简单的查询语言Neo4j CQL
- 它遵循属性图数据模型
- 它通过使用Apache Lucence支持索引
- 它支持UNIQUE约束
- 它它包含一个用于执行CQL命令的UI:Neo4j数据浏览器
- 它支持完整的ACID(原子性,一致性,隔离性和持久性)规则
- 它采用原生图形库与本地GPE(图形处理引擎)
- 它支持查询的数据导出到JSON和XLS格式
- 它提供了REST API,可以被任何编程语言(如Java,Spring,Scala等)访问
- 它提供了可以通过任何UI MVC框架(如Node JS)访问的Java脚本
- 它支持两种Java API:Cypher API和Native Java API来开发Java应用程序
2.1.3 Neo4j的优点
- 它很容易表示连接的数据
- 检索/遍历/导航更多的连接数据是非常容易和快速的
- 它非常容易地表示半结构化数据
- Neo4j CQL查询语言命令是人性化的可读格式,非常容易学习
- 它使用简单而强大的数据模型
- 它不需要复杂的连接来检索连接的/相关的数据,因为它很容易检索它的相邻节点或关系细节没有连接或索引
2.2 neo4j安装
2.2.1.环境
Centos 7.4
neo4j-community-3.5.17
使用社区版本,企业版需要收费。
2.2.2.下载
下载地址 https://neo4j.com/download/other-releases/
下载
wget https://neo4j.com/artifact.php?name=
neo4j-community-3.5.17-unix.tar.gz
解压
tar -zxvf neo4j-community-3.4.1.tar.gz
2.2.3 开启远程访问
一、对于3.0以前的版本
在安装目录的 $NEO4J_HOME/conf/neo4j.conf 文件内,找到下面一行,将注释#号去掉就可以了 #dbms.connector.https.address=localhost:7473
改为 dbms.connector.https.address=0.0.0.0:7473
这样,远程其他电脑可以用本机的IP或者域名后面跟上7474 端口就能打开web界面了 如: https://:7473
当然,你的操作系统的防火墙也要确保开放了7474端口才行,防火墙怎样开放请自行针对自己的操作系统查找文档
二、对于3.1及以后的版本
在安装目录的 $NEO4J_HOME/conf/neo4j.conf 文件内,找到下面一行,将注释#号去掉就可以了 dbms.connectors.default_listen_address=0.0.0.0
2.2.4 启动
在bin目录下,执行命令:./neo4j start启动,其他命令 { console | start | stop | restart | status }
访问http://IP地址:7474/
, 出现下图即代表安装成功,顶部的$输入框用来执行下面的CQL语句。
第一次访问需要修改密码,默认的账号密码都为neo4j
三、Neo4j - 构建模块
Neo4j图数据库主要有以下构建块 -
- 节点
- 属性
- 关系
- 标签
- 数据浏览器
3.1 节点
节点是图表的基本单位。 它包含具有键值对的属性,如下所示:
这里Node Name =“Employee”,它包含一组属性作为键值对
3.2 属性
属性是用于描述图节点和关系的键值对
Key =值
其中Key是一个字符串
值可以通过使用任何Neo4j数据类型来表示
3.3 关系
关系是图形数据库的另一个主要构建块。 它连接两个节点,如下所示。
这里Emp和Dept是两个不同的节点。 “WORKS_FOR”是Emp和Dept节点之间的关系。
因为它表示从Emp到Dept的箭头标记,那么这种关系描述的一样
Emp WORKS_FOR Dept
每个关系包含一个起始节点和一个结束节点。
这里“Emp”是一个起始节点。“Dept”是端节点。由于该关系箭头标记表示从“Emp”节点到“Dept”节点的关系,该关系被称为“进入关系”到“Dept”节点。并且“外向关系”到“Emp”节点。
像节点一样,关系也可以包含属性作为键值对。
这里的“WORKS_FOR”关系有一个属性作为键值对 ID = 123 它代表了这种关系的一个ID。
3.4、标签:
Label将一个公共名称与一组节点或关系相关联。 节点或关系可以包含一个或多个标签。 我们可以为现有节点或关系创建新标签。 我们可以从现有节点或关系中删除现有标签。
从前面的图中,我们可以观察到有两个节点。
左侧节点都有一个标签:“EMP”,而右侧节点都有一个标签:“Dept”。
这两个节点之间的关系,也有一个标签:“WORKS_FOR”
注: -Neo4j将数据存储在节点或关系的属性中。
四、官方入门实例介绍
为了方便读者入门,Neo4j Web管理界面提供了一个官方入门实例“电影关系图”帮助初学者在自己电脑上一步步创建一个入门级别的图数据结构。本节将围绕这个“电影关系图”实例一步步讲解、分析其创建和查询等操作。
这个实例将指引读者学习以下入门操作:
- 创建图数据:将电影、演员、导演等图数据导入到Neo4j数据库中。
- 检索节点:检索特定电影和演员。
- 查询关系:发现相关的演员和导演。
- 查询关系路径:查询他们之间的关系路径。
检索节点
图数据结构创建完毕后,在本节中我们将要了解检索节点的相关操作。
1、查找人员
查找名为“Tom Hanks”的人物
MATCH (tom {name: "Tom Hanks"}) RETURN tom
上面指令使用MATCH指令查找匹配条件:{name: "Tom Hanks"}的节点,执行的结果为:
我们可以在结果显示区看到查询到的节点,注意在结果展示区点击节点图标,会查看到节点的属性。
2、查找电影节点
查找名为“Cloud Atlas”的电影
MATCH (cloudAtlas {title: "Cloud Atlas"}) RETURN cloudAtlas
上面指令查找匹配条件{title: "Cloud Atlas"}的节点,返回结果为:
查找多个电影
查找1990年到2000年发行的电影的名称
match (m:Movie) WHERE m.released>1990 and m.released<2000 RETURN m.title
返回结果为:
查询关系
1、查找演员参演的电影
查找"Tom Hanks"参演过的电影的名称
MATCH (tom:Person {name: "Tom Hanks"})-[:ACTED_IN]->(tomHanksMovies) RETURN tom,tomHanksMovies
返回结果为:
2、查找与“Tom Hanks”同出演过电影的人
MATCH (tom:Person {name:"Tom Hanks"})-[:ACTED_IN]->(m)<-[:ACTED_IN]-(n:Person) return n.name
3、查找与电影“Cloud Atlas”相关的所有人
MATCH (people:Person)-[relatedTo]-(:Movie {title: "Cloud Atlas"}) RETURN people.name, Type(relatedTo), relatedTo
查询关系路径
1、查找与演员“Kevin Bacon”存在4条及以内关系的任何演员和电影
MATCH (bacon:Person {name:"Kevin Bacon"})-[*1..4]-(hollywood)
RETURN DISTINCT hollywood
返回结果为:
2、查找与演员“Kevin Bacon”与“Meg Ryan”之间的最短关系路径
match p = shortestPath( (bacon:Person {name:"Kevin Bacon"})-[*]-(meg:Person {name:"Meg Ryan"})) return p
返回结果为:
3、找人将Tom Hanks介绍给Tom Cruise
MATCH (tom:Person {name:"Tom Hanks"})-[:ACTED_IN]->(m)<-[:ACTED_IN]-(coActors),
(coActors)-[:ACTED_IN]->(m2)<-[:ACTED_IN]-(cruise:Person {name:"Tom Cruise"})
RETURN tom, m, coActors, m2, cruise
结果为: