当前课程知识点:高级大数据系统 > Graph Processing > Graph systems > Video
我们通过一个具体的实例
来介绍图的这种数据库
那么这个实例叫做Neo4j
那么Neo4j是从工业界来的
它提供了一个这种图的查询
图的操作的一个语言
它非常类似于sql
然后让用户可以
不用去考虑底层的具体的数据
以及底层的这种系统的实现
然后通过一个非常简单的
上层的抽象
来对这种图的数据库里面的数据
进行一个查询
那么一个Neo4j的特性
实际上在这里面已经说到
首先它是一个专门的数据库
它并不像关系数据库那样通用
它是有专门数据库
它里面包含的是
这个节点和关系的这样一个数据
那么每个节点和每一条关系
每一条边实际上它都可以包含一些属性
这些属性具有比较复杂的
这种数据结构
比如说它可以是一些基本的
这种数据类型
或者说是其他的这种结构
有用户可以自己去定义
然后它可以
处理比较复杂的这种图的算法
比如说路径
最短路径的一个搜索
比如说这种
图的这种模式的匹配
这都是Neo4j可以做得到的
那么同时
它还具有大数据系统的这些特性
它可以扩展到大量的这个服务器
那么可以把图的数据
和图的算法的load
分配到这些服务器上
同时它可以保证很高的可用性
也就是说
用户的查询可以在一定的
时间的范围内得到保证
那这是Neo4j
提供到的一个
这种数据的这样一个系统的
一个支撑
那么在我们个人的实验的
使用的体验当中
实际上Neo4j还提供了
比较好的这种接口
比如说它对数据的可视化
对于操作的一个优化
实际上相对还是比较好用的
那么我们来看一下
在Neo4j这里面
它使用了一些什么样的
数据的定义
以及语言的定义
那么在Neo4j里面
它使用节点和边对数据进行描述
那么在节点和这个边上面
它可以有这个属性
那么属性是一系列的
基本的数据结构
基本的这个数据类型
同时在Neo4j里面
定义了一种新的
叫做Cypher的这个语言
Cypher类似于SQL
它可以提供对图数据库中的数据
进行查询和进行操作
那么它可以通过定义从句的方式
比如说sql里面的
这个where
那么在Cypher里面
也可以通过类似的这个从句
进行条件的一个匹配
那我们来看一个简单的
这个Cypher它的一个例子
那么第一个例子呢
就是说我们可以从某一个
这个节点进行出发
然后去进行这个查找
就是说把这样的一个节点
给提取出来
那么它的一个基本的语句的形式
是这样的
我们可以对这个节点的一个属性
进行查找
把它用等号的方式连接起来
我们可以把这个节点给提取到
我们还可以去找这个关系
这个语句实际上给出了关系的
一个例子
用这样一个箭头的方式
把关系给匹配了出来
我们还可以进行节点的创建
当然是可以进行节点的创建的
Cypher它的一个特征
也描述在了这里
它首先是一个这种模式匹配的
这样一个语言
它可以通过从句
类似于sql这样去定义
我们要查找的这样一个方式
那么它在里面可以做数据的整合
对数据进行一个排序
然后可以对这个不同的数据
进行一个
不同的图进行联合等等
这样的一些操作
也支撑了最原始的
sql里面的一些方式
比如说创建
比如说这个读、更新
以及数据的一个删除
我们来看看这些基本的语句
它在这个Neo4j里面
它是怎么样去使用的
那这边给到的几个都是Neo4j
官方给出来的例子
我们来看
首先我们可以往整个数据库中
去创建节点
或者是创建这个关系
那我们来看创建节点
它是怎么去做的
使用的原语也是create
这边是创建了一个person
也就是类似于社交关系里面
这样一个人
它具有这样的一些属性
大家可以发现
这个属性实际上并不限制
它的长度
可以是任意多的
还有它的名字
有它来自什么地方
以及它的这个klout
这样一个值
那么create
用圆括号来表示它是一个Node
那么用这个大括号来表示
它的这些属性的一个列表
那么在这个Cypher里面
它一个独特的这从句
是叫做match
有点像我们在sql里面的这个where
那我们来看match
它能做哪些事情
首先我们是可以用它来
match这个属性
在这样的一个例子当中
但实际上这个match
你可以增加任意复杂的这种条件
比如说他可以
match一个名字
也可以match某一种关系
我们在下面一个例子去给大家
同时它可以增加where
这样的一个从句
那么where实际上是可以
和sql里面的where
直接对应起来的
它可以对简单的这种数据的
相似性 相等等等
或者是小于大于这样的关系
进行判断
那么在where里面
我们可以把刚刚需要的
这样一个条件给放进去
那么return
是将得到的结果
输出出来的一个操作
那么这里面我们就是要将
这个节点给输出出来
那么这个节点是return的
这样一个输出
我们刚刚说到
在这个match里面
我们除了去match简单的
这种条件和关系数据库类似以外
我们还可以去match图的一些模式
我们来看这个过程怎么做的
我们在where里面
还是使用了简单的条件
它的名字叫做这个Emily
然后我们在这个match里面
我们是match了一个图的
这样一个结构
这个结构是有一个节点
中间有一条关系
后面还有一个这个节点
那么有了这个东西之后
实际上我们想描述的就是说我们
要把当前这个叫做Emily的
这样一个用户
它认识的人给打印出来
所以只要它存在着这样一条关系
和Emily之间有一个认识的关系
那么这条数据就会被输出出来
同时在前面加上Emily
那么它大概会输出这样一个
两列的这样一个数据
那么这是Cypher
和sql不一样的地方
在sql里面
如果我们要做这个事情的话
我们需要去写for循环
我们需要去写复杂的这种匹配
但是在cypher里面
我们可以直接把我们想要的
一个图的一个局部的一个结构
给描述出来
所以大家可以想象
当我们把这个结构
写得更加复杂的话
实际上你是可以去做到一些
比较特殊的这种图的算法
那么这边就给了一个例子
我们可以用Cypher的写法
直接来做一个这种好友的推荐
那么这个推荐的原理是什么
我们将某一个用户
他认识的人给列出来
然后这些认识的人
再认识的人
我们进一步列出来
那么这些人就可以作为
推荐给当前用户的一个操作
那么这个原理实际上是
将好友的二度好友推荐给
某一个人的二度好友推荐给他
也就是说他认识的人认识的人
那么可能它并不一定认识
但这些人
推荐给他的话
它还是有很大的可能性
和他们建立这种社交关系的
那么这是这个推荐的原理
那我们来看他怎么做的
首先在match里面
我们写了这样的一个关系
那么这边是小括号空着
它是一个能够被匹配上的
这样一个模式
那么要求他的名字是这个约翰
也就是说我们是为这个用户
进行推荐
然后我们还要求这个推荐出来的
这个二度好友和这个约翰
可能具有相同的爱好
那么这边这个爱好叫做surfing
那么即使它的二度好友
又具有这样一个共同的一个爱好
那我们会把这些人推荐给他
我们最后会把这样的一些人
给输出出来
而且我们让他以这个
disctinct的方式输出
和sql里面一样
我们把重复的这个对象给滤掉
所以大家可以看得出来
我们用这个图数据库里面的
一些简单的这种语句
就能够实现在关系数据库里面
非常复杂的这种功能
我们可以把二度好友中
具有某一种属性的这个节点
全部找到作为推荐结果
那么在我们做其他物品的推荐
比如说电影书籍的推荐的时候
我们依然可以使用类似的办法
比如说我们想把好友看过的书
全部列出来
推荐给某一个用户
那么在关系数据库里面
很难做的一个东西
在图书类库里面
由于它提供了这样的
一个匹配的算法
我们就变得非常的容易
这是大家可以在后面
处理到类似的这种任务的时候
可以去尝试使用这个图数据库
-What is big data and what is big data system?
--Video
-Problems in big data systems?
--Video
-Overview of the course
--Video
-Principles of big data system design
--Video
-Manipulating Data on Linux
--Video
--Video
--Video
-Basics of Linux Data Processing--Manipulating Data
-Running Commands on a Single Machine
--Video
-Running Commands on a Single Machine--作业
-Using a Linux Cluster
--Video
-Using a Linux Cluster--作业
-Storage for Big Data Computing: Distributed file system
--Video
-Storage for Big Data Computing: Distributed file system--作业
-File system and GFS
--Video
-File system and GFS--作业
-Understanding HDFS using Legos
--Video
-Understanding HDFS using Legos--作业
-File System Implementation and DFS
--Video
--Video
-File System Implementation and DFS--作业
-What is MapReduce and why
--Video
-What is MapReduce and why
-Learn MapReduce by playing with cards
--Video
-Processing pattern
--Video
-Processing pattern--作业
-Hadoop
--Video
-Hadoop--作业
-Algorithms in MapReduce
--Video
-Algorithms in MapReduce--作业
-Tutorial
--Video
-Background
--Video
-Background--作业
-Spark
--Video
-Spark--作业
-Use Spark for data mining
--Video
-Use Spark for data mining--作业
-Spark data processing
--Video
-Spark data processing--作业
-Experiment in Spark
--Video
-Experiment in Spark--作业
-Introduction to streaming data processing
--Video
-Introduction to streaming data processing--作业
-Storm
--Video
--Video
--Video
-Storm--作业
-Spark streaming
--Video
--Video
-Spark streaming--作业
-NoSQL introduction
--Video
-NoSQL introduction--作业
-Common Advantages
--Video
-Common Advantages--作业
-Bigtable
--Video
-Bigtable--作业
-Master Startup
--Video
-Master Startup--作业
-HBase
--Video
-HBase--作业
-What is GraphDB and Graph data processing
--Video
-What is GraphDB and Graph data processing--作业
-Graph systems
--Video
-Graph systems
-Example of a GraphDB
--Video
-Example of a GraphDB--作业
-Mahout
--Video
-Mahout--作业
-Case Study: Recommendation
--Video
-Case Study: Recommendatio作业
-Recommendation in Mahout
--Video
-Recommendation in Mahout--作业