本节书摘来自异步社区出版社《图数据库(第2版)》一书中的第1章,第1.2节,作者:【美】Ian Robinson(伊恩•罗宾逊) , Jim Webber(吉姆•韦伯) , Emil Eifrem(埃米尔•艾弗雷姆),更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.2 图领域概览
近年来,无数用于管理、处理和分析图的项目和产品纷纷涌入市场。技术选择的陡增使我们难以跟进这些工具并摸清它们之间的区别,即便对我们这些一直活跃在这个领域的人来说也是如此。本节的内容对理解新兴的图领域提供了一个“高空俯览”。
从高空俯看,我们可以将图领域划分成以下两部分。
主要用于联机事务图的持久化技术,通常直接实时地被应用程序访问
这类技术被称为图数据库
,正是本书主要讨论的内容。它们和“常见的”关系型数据库世界中的联机事务处理(online transactional processing,OLTP)数据库是一样的。
主要用于离线图分析的技术,通常按一系列步骤执行
这类技术被称为图计算引擎
。它们可以和其他大数据分析技术看做一类,如数据挖掘和联机分析处理(online analytical processing,OLAP)。
我们可以从另一个视角去划分图领域,去观察各种技术使用的图模型。主流的图模型有3种,分别是属性图、资源描述框架(Resource Description Framework,RDF)三元组和超图。我们将会在附录A中对它们进行详细的说明。市场上常见的大多数图数据库使用的都是属性图模型的变体,因此,在本书接下来的部分我们也将使用这一模型。
1.2.1 图数据库
图数据库
管理系统(以下将简称图数据库)是一种在线的数据库管理系统,它支持对图数据模型的增、删、改、查(CRUD)方法。图数据库一般用于事务(OLTP)系统中。相应地,它们也对事务性能进行了优化,在设计时通常考虑了事务完整性和操作可用性。
在研究图数据库技术时,有两个特性需要多加考虑。
底层存储
一些图数据库使用原生图存储,这类存储是优化过的,并且是专门为了存储和管理图而设计的。然而并不是所有的图数据库使用的都是原生图存储,也有一些图数据库将图数据序列化,保存到关系型数据库或面向对象数据库,或是其他通用数据存储中。
处理引擎
一些定义要求图数据库使用免索引邻接
,这意味着,关联节点在数据库里是物理意义上的“指向”彼此[2]。这里如果我们看的更宽泛些:站在用户的角度,任何看起来像是图数据库的都可以称为图数据库(比如说,提供了对图数据模型的CRUD操作的数据库)。然而,我们得承认这个事实,免索引邻接带来巨大的性能优势是其他数据库无法比拟的,因此我们使用原生图处理
来代表利用了免索引邻接的图数据库。
需要注意的是,原生图存储和原生图处理并不一定比其他方式更好或更差——这不过是典型的工程取舍而已。原生图存储的好处是,它的栈是专门为性能和扩展性设计建造的。但相对的,非原生图存储通常建立在非常成熟的非图后端(如MySQL)之上,运维团队对它们的特性烂熟于心。原生图处理(免索引邻接)虽然在遍历查询时性能优势很大,但代价是一些未使用遍历的查询会比较困难,并且需要占用巨大的内存。
与那些需要额外增加像外键这样的属性或者使用map-reduce这样的额外处理来推测实体间关联的数据库管理系统不同,联系在图数据模型中是“一等公民”。图数据库通过将节点和联系的简单抽象组装为相互关联的结构,使我们能够建造任意复杂的模型,形象地映射我们的问题域。比起那些传统的关系型数据库和其他NoSQL(Not Only SQL)存储,我们所得到的模型更简单,也更具表现力。
根据存储和处理模型不同,图1-3展示了现在市场上的一些图数据库。
1.2.2 图计算引擎
图计算引擎
技术使我们可以在大数据集上使用全局图算法。图计算引擎旨在识别数据中的集群,或是回答类似于“在一个社交网络中,平均每个人有多少联系?”这样的问题。
因为偏重于全局查询,图计算引擎通常为扫描和批处理大规模信息做过优化,在这个方面,它们和其他批分析技术(如在关系型数据库世界中大家都很熟悉的数据挖掘和OLAP)类似。只有一部分图计算引擎有自己的图存储层,其他的(几乎可以说大部分)则只完全关注于如何处理外部传入的数据,然后返回结果到其他地方存储。
图1-4展示的是一个通用的图计算引擎部署架构。该架构包括一个带有OLTP属性的记录系统(SOR)数据库(如MySQL、Oracle或Neo4j),它给应用程序提供服务,请求并响应应用程序在运行中发送过来的查询。每隔一段时间,一个抽取、转换和加载(ETL)作业就会将记录系统数据库的数据转入图计算引擎,供离线查询和分析。
图计算引擎多种多样。最出名的有内存的
、单机的
图计算引擎Cassovary,以及分布式
的图计算引擎Pegasus和Giraph。大多数分布式图计算引擎都是基于Google发布的Pregel白皮书,它主要讲述了Google如何使用图计算引擎来计算网页排名。
本书重点关注图数据库
通过前面的介绍,我们对整个图领域有了一个大致的了解。在这之后,本书将主要关注图数据库。我们的目标始终是试图向读者解释清楚图数据库的概念。我们会在适当的时候穿插一些例子来说明这些概念。这些例子都来自于我们使用带标签的属性图模型和Neo4j数据库开发解决方案的过程中获得的经验。读者不必在意我们的例子中使用了什么具体的图模型或图数据库,这些关键概念对于其他的图数据库同样适用。