Neo4j入门教程_1

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

你可能感兴趣的:(数据库研究)