首页 华安县 八闽新闻 关注 科技 财经 汽车 房产 图片 视频

数据

旗下栏目: 业内 数据 数码 手机

图形数据库Neo4J简介

来源:网络整理 作者:八闽 人气: 发布时间:2017-04-21
摘要:最近我在用图形数据库来完成对一个草创项宗旨撑持。在使用过程中觉得这种图形数据库实际上挺有意思的。因而在这里给各人做一个简略的介绍。 NoSQL数据库相信各人都听说过。它们每每可以用来管理传统的关系型数据库所难以处理处罚处罚的一系列问题。通常状况下,这

  最近我在用图形数据库来完成对一个草创项宗旨撑持。在使用过程中觉得这种图形数据库实际上挺有意思的。因而在这里给各人做一个简略的介绍。

NoSQL数据库相信各人都听说过。它们每每可以用来管理传统的关系型数据库所难以处理处罚处罚的一系列问题。通常状况下,这些NoSQL数据库分为Graph,Document,Column Family以及Key-Value Store等四种。这四品种型的数据库分别使用了差异的数据构造来记录数据。因而它们所适用的场景也不尽雷同。

  此中最为特另外等于图形数据库了。可以说,它和其它的一系列NoSQL数据库十分差异:丰硕的关系体现,完好的事务撑持,却没有一个纯正的横向扩展处理处罚处罚打算。

  在本文中,我们就将对业界十分风行的图形数据库Neo4J停止简略的介绍。

图形数据库简介

  相信您和我一样,在使用关系型数据库时每每会遇到一系列十分复杂的设想问题。譬喻一部影戏中的各个演员每每有主角配角之分,还要有导演,特效等人员的参预。通常状况下这些人员每每都被抽象为Person类型,对应着同一个数据库表。同时一位导演自身也可以是其它影戏或者电视剧的演员,更可能是歌手,以至是某些影视公司的投资者(没错,我这个例子确实是以赵薇为模板的)。而这些影视公司则每每是一系列影戏,电视剧的资方。这种相互关联的关系每每会十分复杂,而且在两个实体之间每每同时存在着多个差异的关系:

图形数据库Neo4J简介

  在考试测验使用关系型数据库对这些关系停止建模时,我们首先须要建设体现各种实体的一系列表:体现人的表,体现影戏的表,体现电视剧的表,体现影视公司的表等等。这些表每每须要通过一系列关联表将它们关联起来:通过这些关联表来记录一个人到底参演过哪些影戏,参演过哪些电视剧,唱过哪些歌,同时又是哪些公司的投资方。同时我们还须要创建一系列关联表来记录一部影戏中哪些人是主角,哪些人是配角,哪个人是导演,哪些人是特效等。可以看到,我们须要大量的关联表来记录这一系列复杂的关系。在更多实体引入之后,我们将须要越来越多的关联表,从而使得基于关系型数据库的处理处罚处罚打算繁琐易错。

  这一切的症结主要在于关系型数据库是以为实体建模这一根底理念设想的。该设想理念并没有提供对这些实体间关系的间接撑持。在须要形容这些实体之间的关系时,我们每每须要创建一个关联表以记录这些数据之间的关联关系,而且这些关联表每每不消来记录除外键之外的其它数据。也就是说,这些关联表也仅仅是通过关系型数据库所已有的功能来模拟实体之间的关系。这种模拟导致了两个十分糟糕的成就:数据库须要通过关联表直接地维护实体间的关系,导致数据库的执行效能低下;同时关联表的数量急剧回升。

  这种执行效能到底低下到什么程度呢?就以建设人和影戏之间的投资关系为例。一个使用关联表的设想每每如下所示:

  假如如今我们想要通过该关系找到一部影戏的所有投资人,关系型数据库每每会执行哪些利用呢?首先,在关联表中执行一个Table Scan利用(如果没有得到索引撑持),以找到所有film域的值与目的影戏id相匹配的记录。接下来,通过这些记录中的person域所记录的Person的主键值来从Person表中找到相应的记录。假如记录较少,那么这步就会使用Clustered Index Seek利用(如果是使用该运算符)。整个利用的工夫复杂度将变为O(nlogn):

图形数据库Neo4J简介

  可以看到,通过关联表组织的关系在运行时的性能并不是很好。假如我们所须要利用的数据集包孕了十分多的关系,而且主要是在对这些关系停止利用,那么可以想象到关系数据库的性能将变得有多差。

  除了性能之外,关联表数量的办理也是一个十分让人头疼的问题。刚刚我们仅仅是举了一个具有四个实体的例子:人,影戏,电视剧,影视公司。现实生活中的例子可不是这么简略。在一些场景下,我们每每须要对更多的实体停止建模,从而完好地形容某一领域内的关联关系。这种关联关系所涵盖的可能包孕影视公司的控股关系,各控股公司之间复杂的持股关系以及各公司之间的借贷款状况及担保关系等,更可能是人之间的关系,人与各个品牌之间的代言关系,各个品牌与所属公司之间的关系等。

  可以看到,在须要形容大量关系时,传统的关系型数据库已经不堪重负。它所能承当的是较多实体但是实体间关系略显简略的状况。而对于这种实体间关系十分复杂,每每须要在关系之中记录数据,而且大局部对数据的利用都与关系有关的状况,原生撑持了关系的图形数据库才是正确的选择。它不但仅可以为我们带来运行性能的提升,更可以大大进步系统开发效率,减少维护老本。

  在一个图形数据库中,数据库的最主要组成主要有两种,结点集和连贯结点的关系。结点集就是图中一系列结点的汇合,比力濒临于关系数据库中所最常使用的表。而关系则是图形数据库所特有的组成。因而对于一个习惯于使用关系型数据库开发的人而言,如何正确地了解关系则是正确使用图形数据库的关键。

  注:这里的结点集是我本人的翻译。在Neo4J官方文档中,其被称为label。原文为:A label is a named graph construct that is used to group nodes into sets; all nodes labeled with the same label belongs to the same set。我个人觉得僵直地取名为标签反而容易让他人混同,所以选取了“group nodes into sets”的意译,也好让label和node,即结点集和结点之间的关系能够更好地对应。

  但是不消担心,在理解了图形数据库对数据停止抽象的方式之后,您就会觉得这些数据抽象方式实际上和关系型数据库还是十分濒临的。简略地说,每个结点仍具有标示本人所属实体类型的标签,也既是其所属的结点集,并记录一系列形容该结点特性的属性。除此之外,我们还可以通过关系来连贯各个结点。因而各个结点集的抽象实际上与关系型数据库中的各个表的抽象还是有些相似的:

图形数据库Neo4J简介

  但是在体现关系的时候,关系型数据库和图形数据库就有很大的差异了:

图形数据库Neo4J简介

责任编辑:八闽
首页 | 华安县 | 八闽新闻 | 关注 | 科技 | 财经 | 汽车 | 房产 | 图片 | 视频

Copyright © 2015 新闻资讯门户站 版权所有 澳门百家乐官网,网上百家乐,百家乐怎么玩,现金网代理,百家乐游戏,百家乐网址,  技术支持:网站建设

电脑版 | 移动版