开发者学堂课程【SpringBoot 实战教程: Neo4J 介绍及安装】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/651/detail/10810
Neo4J 介绍及安装
内容介绍:
一、介绍
二、安装
一、介绍
1、Neo4j 是一个高性能的,NOSQL 非关系型,redis 属于关系型数据库,图形数据库,它是一个嵌入式的、基于磁盘的、具备完全的事务特性的 Java 持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j 也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。
2、这种数据库与传统的关系型数据库有很大的差别。关系型数据库与图形数据库比较
(1)关系型数据库:
常用的像 mysql,oracle 等都是关系型数据库,在关系型数据库里面对数据的处理是这样子的,对每个对象都创建一个表,对象的属性对应表里面的列。这是一张用户表:
id |
name |
sex |
phone |
1 |
tim |
boy |
110 |
2 |
lili |
girl |
120 |
如表所示。在数据库里有条数据表示两个对象:tim,lili。在现实生活中会发现任何对象都是有某种联系的,那么关系型数据库里是怎样来表示这种关系呢?就比如tim和 lili 是好朋友,那么在数据库里怎样来表示他们的关系呢?关系型数据库里面是这样处理的,新建一个 relationship 的表,表里面有两个字段 id,friendid。
id |
friendid |
1 |
2 |
2 |
1 |
如图所示。如果要查找 tim 的朋友那么可以遍历 relationship 表就可以了。这种数据模型会有什么问题呢?其实可以对这个数据模型提个问题——tim 的朋友的朋友的朋友的朋友是谁?好,关系型数据会这样回答你的问题:首先在 relationship 表里面找到所有 id 为1(tim 的 id)的数据,然后拿到对应的 friendid,接着逐个根据friendid再进行遍历找到对应的 friendid,如此反复地遍历查询。也许10分钟也许一小时,也许它永远都无法回答你的问题。其实,这种关系只要超过5级关系型数据库就无法解决问题,这就是为什么需要图形数据库的出现了。
有些情况下并不是查它的朋友,可能会查它朋友朋友的朋友,虽然也能实现,但是查询,写 sql 语句比较麻烦,另外查询语句执行的性能会比较低,在这种情况下 Neo4j 可以解决这个问题。它把每一个用户看作一个节点,多个用户就是多个节点,用户和用户之间是有关系的,节点和节点之间有关系。
(2)图形数据库:
在图形数据库里面对数据的处理是这样子的:每个对象都表示成为一个节点(node),每个节点之间的联系表示成关系(relationship),节点与节点之间用关系关联在一起。可以看图更好理解一点。
如图所示,有三个节点(node)它们都通过 FRIEND 关系(relationship)关联起来。Tim 的朋友是 lili,lili 跟 jack 互为朋友,同时 jack 认识 tim。在图形数据库里要回答像“tim 的朋友的朋友的朋友”的问题非常简单,数据库只需要找到 tim 的关系(relationship)所对应的节点然后找到对应节点的关系(relationship),只需遍历几次,这样就可以很容易回答了上面的问题了。
圆圈表示节点,一个圆圈是一个节点,节点和节点之间,就是用户和用户之间,箭头表示它们之间的关系,表示 tim 认识 lili,lili 认识 jack,jack 认识 lili,jack 认识 tim,但是 tim 不一定认识 jack,tim 的朋友是 lili,tim 的朋友的朋友是 jack,从图形化的上面很容易找到相应的朋友,如果用关系型数据库就相对比较麻烦,甚至,比如找朋友的朋友的朋友,基本上实现不了,这就是图形数据库,最近几年之所以流行的原因。
二、安装
1、下载 windows 环境下的安装包 neo4j-community-3.3.4-windows.zip
。
2、解压,解压到某一个目录下,比如目录为 E:\neo4j。目录结构,bin 是 neo4j 的可执行文件,配置文件,conf 是数据存放的目录,data 是它自己的架包。
3、设置环境变量,配置方式和 java 一样。
(1)变量名:NEO4J_HOME
(2)变量值:E:\neo4j
(3)再修改变量 path,增加 %NEO4J_HOME%\bin
4、查看并编辑配置参数
%NEO4J_HOME%\conf\neo4j.conf
5、启动
在 DOS 命令行窗口,执行:neo4j.batconsole
2018-03-29 08:36:21.329+0000
INFO
2018-03-29 08:36:21.372+0000
INFO
Starting.
018-03- -29 08:36:23. 145+0000
INFO
Bolt enabled on 127. 0.0.1: 7687
/
2018-03-29 08: 36: 28.204+0000
INFO
Started.
2018-03- 29 08:38: 43. 999+0000 INFO
Remote interface available at http://localhost: 7474/
看到这个信息说明 neo4j 正常启动了,相当于 neo4j 服务启动了。端口是7474。
6、打开 neo4j 集成的浏览器,如果是第一次访问会要求登陆。登陆名和密码都是 neo4j,它会要求修改密码。
http://localhost:7474/
出现以下页面就证明 neo4j 安装成功并且启动成功,可以正常访问。
既然它是数据库,就像 mysql,操作 msql 需要 sql 语句,增删改查。
Cypher 语言:Cypher 是专门为图像数据库设计的语言,它浅显易懂。图形数据库,也就是 neo4j,重点就两个,一个是节点,一个是关系,创建节点的同时创建关系,另外涉及到查询,查询节点。举例,假如要创建这么一个数据模型,好友 A 与好友 B 是朋友关系,好友 B 与 C 也是朋友关系,好友 A 认识 C 但 C 不认识 A,这样的数据模型用 Cypher 描述如下:
create 建立节点
(A:Person 节点,里面指定了属性,属性的名字,和属性的值{name:'jack'})-[:Friend]->(B:Person{name:'tom'})-[:Friend]->(C:Person
这是一个节点
{name:'lucy'}),(A)-[:Know]->(C)
这是一个节点
(注:()里面的是节点,[]里面的是关系,{}里的是属性名和属性值,类似于阶层格式>表示关系的方向)中括号是关系,friend,朋友关系,说明 a 和 b 是朋友关系,箭头是指向 b,a 是认识 b 的,b 是 a 的朋友,c 是 b 的朋友。
要查询A的一个名叫”tom”的朋友:
match(a)-[:Friend]->(b)
a 的朋友用 b 代表
Where
b.name='tom'
查询条件,朋友必须叫 tom
Return
b
查询之后返回
Cypher 语言的实现用的是 match。