3.5.4.Graph
创作人:杨丛聿
审稿人:朱荣鑫
Graph 介绍
图作为一种现实中广泛存在的结构,与我们的生活息息相关,如社交网络、交通网络等。如何抽象的描述这些结构,并对其进行分析,获取潜在价值是一个普遍存在的问题。
相比于我们熟悉的关系数据库的建模方式,从 Graph 的角度出发,可以让一些复杂问题和场景的处理变得简单,如行为分析、个性化推荐、知识图谱等。
通常来讲,对于图的研究,分为图存储和图计算分析两个场景,二者解决的问题不同,相应的技术栈也有一些差异。
图存储
更强调图结构的建模,以及解决诸如邻居、路径等查询问题。
图计算
则是从全局或子图的角度为出发点,经过大量计算,来发现更深层次的问题,其关注的技术点,更多的是资源调度,以及各类经典图分析算法的实现。
Elasticsearch 的 Graph 功能介于二者之间,其定位是对已有的结构化数据进行分析,从图的角度去审视已有数据,并发现潜在价值。
图通常是以 vertex 和 edge 的模型管理数据,Elasticsearch 也不例外,只是区别于图数据库的先建模后存储,Elasticsearch 中 Graph 的建模逻辑,是在查询中动态填入的,其底层实现
逻辑是基于 Elasticsearch 的 terms 和 aggregations 相关功能。
相比于图数据库通常只提供基于 vertex 和 edge 的基础查询,Elasticsearch 由于本身在构建倒排索引时会统计词频,这使其在查询层面,兼具一定的分析能力。可见 Elasticsearch
Graph 本身的定位并不是图结构数据的管理(如知识图谱),而是在已有的结构化数据中,以图的视角来发现一些问题。如库中已存在用户的听歌记录,则可以根据听众偏好,为其进行歌曲的推荐。
其他图数据库概览
由于 Elasticsearch 本身从逻辑上更接近图数据库,不管是 vertices + connections 的数据模型还是查询模式,本节先介绍下目前主流图数据库的类别和实现逻辑,具体细节不进行展开。
目前主流的图数据库,以属性图和 RDF 模型为主;
RDF 相对小众,仅有 DGraph 属于此范畴;
属性图是由节点、边、属性三者构成的有向图,相比于其他数据库,其关键特征之一是边(或连接)与顶点一同被视为模型的核心组件。
基于这些理念,一般属性图数据的结构可以归纳如下:
每个顶点(vertex)包括:
l 唯一标识符
l 一组出边
l 一组入边
l 一组属性(键值对)
每条边(edge)包括:
l 唯一标识符
l 边的起点
l 边的终点
l 描述两个顶点间关系类型的标签
l 一组属性(键值对)
对于各类图数据库而言,数据建模的核心便是如何组织这些数据,从存储和索引的角度来看,目前主要分为自行实现和 Graph 层两种:
自行实现存储及索引
代表如 neo4j,其使用了免索引邻接,即每个节点都会维护其相邻节点的引用,免去了基于索引查找相邻节点的开销,这个设计理念在很多图数据库中都可以看到;
以 Graph 层的形式构建,使用外置 Nosql 存储和外置索引
代表 JanusGraph、HugeGraph,对于此类图数据库,Elasticsearch 便可作为其索引层存在。
除此以外,如何在分布式场景下,对存储和计算进行优化,是各类图数据库遇到的最大问题,针对诸如分布式场景下的分片、删除等问题,逐步诞生了 NebulaGraph、 Dgraph 等。
《Elastic Stack 实战手册》——三、产品能力——3.5 进阶篇——3.5.4.Graph (下) https://developer.aliyun.com/article/1228724