什么是Neo4J? | 带你读《SpringBoot实战教程》之三十

上一篇:SpringBoot实现批量文件上传 | 带你读《SpringBoot实战教程》之二十九
下一篇:SpringBoot如何整合Neo4j? | 带你读《SpringBoot实战教程》之三十一

本文来自于千锋教育在阿里云开发者社区学习中心上线课程《SpringBoot实战教程》,主讲人杨红艳,点击查看视频内容

Neo4J介绍及安装

Neo4j是一个高性能的,NOSQL图形数据库,它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。

这种数据库与传统的关系型数据库有很大的差别。为了更好地帮助大家理解,来将关系型数据库与图形数据库作个比较。
关系型数据库:
我们常用的像mysql,oracle等都是关系型数据库,在关系型数据库里面对数据的处理是这样子的:对每个对象都创建一个表,对象的属性对应表里面的列
什么是Neo4J? | 带你读《SpringBoot实战教程》之三十
如图所示。在数据库里有条数据表示两个对象:tim,lili。在现实生活中我们会发现任何对象都是有某种联系的,那么关系型数据库里是怎样来表示这种关系呢?就比如tim和lili是好朋友,那么在数据库里怎样来表示他们的关系呢?关系型数据库里面是 这样处理的——新建一个叫relationship的表,表里面有两个字段id,friendid。
什么是Neo4J? | 带你读《SpringBoot实战教程》之三十
如图所示。如果我们要查找tim的朋友那么我们可以遍历relationship表就可以了。
这种数据模型会有什么问题呢?其实我们可以对这个数据模型提个问题——tim的朋友的朋友的朋友的朋友是谁?关系型数据会这样回答你的问题:首先在relationship表里面找到所有id为1(tim的id)的数据,然后拿到对应的friendid,接着逐个根据friendid再进行遍历找到对应的friendid,如此反复地遍历查询......
也许10分钟也许一小时,也许它永远都无法回答你的问题。
其实,这种关系只要超过5级关系型数据库就无法解决问题,这就是为什么需要图形数据库的出现了。
图形数据库:
在图形数据库里面对数据的处理是这样子的:每个对象都表示成为一个节点(node),每个节点之间的联系表示成关系(relationship),节点与节点之间用关系关联在一起。我们可以看图更好理解一点。
什么是Neo4J? | 带你读《SpringBoot实战教程》之三十
如图所示,有三个节点(node)它们都通过FRIEND关系(relationship)关联起来。Tim的朋友是lili,lili跟jack互为朋友,同时jack认识tim。在图形数据库里要回答像“tim的朋友的朋友的朋友”的问题非常简单,数据库只需要找到tim的关系(relationship)所对应的节点然后找到对应节点的关系(relationship),只需遍历几次,这样就可以很容易回答了上面的问题了。

安装

1、官网下载windows环境下的安装包
2、解压,比如目录为E:neo4j
3、设置环境变量
变量名:NEO4J_HOME
变量值:E:neo4j
再修改变量path,增加%NEO4J_HOME%bin
4、查看并编辑配置参数
%NEO4J_HOME%confneo4j.conf
5、启动
在DOS命令行窗口,执行:neo4j.bat console
什么是Neo4J? | 带你读《SpringBoot实战教程》之三十
出现此界面,证明可以正常启动。
6、 打开neo4j集成的浏览器
http://localhost:7474/
第一次打开需要登录。默认的登录名和密码都是:neo4j
什么是Neo4J? | 带你读《SpringBoot实战教程》之三十

使用Cypher语言:Cypher是专门为图像数据库设计的语言,它浅显易懂。举个例子,假如要创建这么一个数据模型——好友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)

(注:()里面的是节点,[]里面的是关系,{}里的是属性, >表示关系的方向)

要查询A的一个名叫”tom”的朋友:

match (a)-[:Friend]->(b)
where b.name='tom'
return b

配套视频

上一篇:一文读懂ML中的解析解与数值解


下一篇:外部表的导入导出问题