乐趣区

关于数据:基于GES图数据库的大规模数据追溯服务优化

摘要:利用华为云 GES 剖析,如何基于 GES 图数据库追溯服务的实现和优化。

“一分钟,我要这个人的全副信息”,王道总裁拍了拍你,并提出这个要求。秘书开始发力,找到了:姓名、年龄、联系方式、喜好,这些信息。不太够?那就再加上亲朋好友信息,近期流动信息,更残缺展示这个人。尽管是个段子,但也给与咱们一些启发:对象自身的信息可能不够“全”,周边关联的数据也是对象信息的重要组成,这些关联数据对在进行数据分析和开掘时非常有用。

现实生活中关联关系非常广泛,比方人的社交、商品生产和消费行为之间都是关联关系。数据分析时,为了更好的利用关联关系,常应用图作为数据结构,应用图构造保留数据的数据库被称为图数据库。传统的关系型数据库,以表格视角对数据进行出现,能够不便的对数据进行查问治理,而图数据库更关注节点和周边节点的分割,是一种网状结构,实用于追溯剖析、社交网络分析、异构信息开掘等等利用。华为云提供的图数据库服务就是 GES(Graph Engine Service)[1]。

基于图数据库能够做很多乏味的利用,数据追溯就是一个很常见的利用。数据追溯,就是把各环节产生的数据进行关联与溯源。疫情中,查看商品的流通过程,查看商品是否有可能有接触传染源。测试流动中,通过构建测试过程网络,分析测试流动的齐备性,用于进行品质评估。这些都是追溯的典型应用场景。若以传统关系型数据库构建数据追溯,须要独立结构和保护多个关系表,并实现多对多的关系网络,不易于了解简单的业务逻辑,与此同时,也会随同着追溯查问实现简单和查问迟缓的问题。

图 1 关系型数据库和图数据库比照

用一个例子简略阐明图数据库在数据分析畛域的劣势。图 1 是一个简略的选课零碎,记录了学生选课以及相应的课程信息。如右图所示,咱们依据图数据库的表达方式把这些信息转化为一张图。能够看出,图能够更加直观地表白选课和班级等关系,分明地出现实体之间的关系,更不便进行关联剖析。比方,依据图咱们能够很容易找到和小布一起上数学课的同学,也能够疾速找到选课趣味雷同的同学。通过图数据库能够很不便查问到周边节点信息,十分实用于追溯实现。那如何基于图数据库如何实现追溯服务?接下来咱们将以华为云 GES 为例,剖析基于 GES 图数据库追溯服务的实现和优化。

什么是图

在图数据库中,图由以下局部组成:

(1) 点:图中的实体对象,在图中体现为一个节点。例如,社会的人,流通的商品等都能够形象为图中的一个节点。

(2) 边:图中节点与节点之间的关系。如人与人的社会关系,商品的购买行为等。

(3) 属性:用于形容图中节点或者边的属性,比方编号、名称等。聚类和分类剖析中,权重是经常作为关系属性,也就是边的属性。

图 2 有向图与无向图

依据边是否有方向,能够把图分为有向图和无向图。对于有向图来说,边的终点和起点是确定的。图 2 中,城市是一个节点,城市间的间隔和城市之间交通形式为边。城市交通就是一个有向图,不同方向交通形式用不同的边示意,而城市间间隔是无向图,因为间隔和方向无关。GES 应用时,须要将点和边解决成不同的对象,点边都须要定义须要的属性。点次要就是蕴含实体的信息,而边须要指定终点与起点。

定义 GES 图

GES 建设图的步骤能够参考官网文档 [1]。次要就是对节点和边进行定义,将数据处理为点和边文件,最初导入 GES 中,可通过界面或 API 导入。解决无向图时,即不辨别边的终点和起点,通常也会设定一个默认方向,即指定边的终点和起点,这是为了解决和导入数据不便,在理论查问中能够疏忽这种方向设定。

在 GES 构建图的过程中,定义点和边以及相干属性的文件被称为元数据。点和边的类型被称为 label,每个 label 可具备多个属性,如上文提到的名称、权重等,都能够作为点或边的属性。在 GES 中,label 一旦定义并创立胜利将不被容许批改,如果必须要批改 label 定义,就须要格式化图并从新创立导入元数据文件到图中。

节点通常是由事实中的实体形象而来,GES 节点属性罕用的数据结构蕴含了 float、int、double、long、char、char array、date、bool、enum 和 string 等。通常来说节点中,字符串类型的属性较多,非字符串属性能够依据数据类型进行抉择。字符串类型有两个抉择:string 和 char array。char array 有数据长度限度,通常为 256,而 string 类型没有长度限度。然而在 GES 中应用 char array 更有劣势,这是因为 char array 数据寄存在内存中,string 类型数据寄存在硬盘中,因而 char array 查问效率更高,这也是 GES 元数据定义须要留神的中央。在咱们我的项目的场景中,节点的名称和编号都是罕用的查问条件,综合思考属性特色,如节点名称较长而节点编号较短,最终名称应用了 string 类型,而编号抉择了 char array 类型。

GES 查问优化

定义好节点信息后,能够在图中进行查问。GES 应用的是 Gremlin[3] 进行查问。Gremlin 是一个开源的流式查询语言,查问实现灵便,不同图数据库对查问语句的合成以及优化解决都不雷同,因而,不同的写法可能查问效率可能不同。接下来咱们就一种追溯查问场景进行剖析。

图 3 多分支查问场景剖析

如图 4 所示,字母代表 label,也就是一种节点类型。能够看到该场景具备较多查问分支,依照图中的节点要求,Gremlin 查问语句间接实现如下:

基于以后 Gremlin,GES Gremlin server 会将查问合成为多个查问原子操作,并由 GES engine·执行。对于这种多跳的简单查问,会解析为较多的原子操作并频繁交互,这会导致的查问效率低下。对于这种场景,思考应用 optional 语句进行查问,效率会失去晋升。查问语句如下:

optional 在肯定水平上能够升高分支的查问范畴,从而晋升查问效率。在我的项目理论应用中,应用 optional 能够晋升查问性能 1 倍左右。然而 optional 不是所有场景都实用,Gremlin 实现须要依据查问场景、数据规模和数据特点进行优化解决,例如图中节点的稠密水平和分支的数量都是能够思考优化的点。

在对 GES 查问优化时,即便对 Gremlin 语句进行了优化,也有可能达不到冀望的查问性能。这是因为应用 Gremlin 时,解决查问过程中 Gremlin server 解析后的原子操作可能会和 GES engine 频繁交互,反而会升高查问性能,而且针对 Gremlin 查问优化解决范畴也无限。尽管 Gremlin 是图数据库通用的查问脚本定义形式,然而各个厂家对于 Gremlin 脚本优化解决不同,因而更举荐应用 GES 原生 API。原生 API 针对固定场景做了更多的优化,并且缩小了 Gremlin 解析处理过程,因而性能更优,但同时也引入了通用性和效率之间的均衡问题,毕竟 API 没有通用的定义实现。

上面咱们将介绍几种常见的追溯查问场景。这些场景都能够通过 Gremlin 查问实现,然而如果通过应用 GES 零碎 API,能够获取更好的查问性能。

  • 场景 (1) 追溯某个节点前(后)n 层节点

该查问较为常见,次要用于查问某个节点的父子节点,对于图 1 的场景能够找到班级的所有同学,该场景 Gremlin 实现如下:

g.V(id).repeat(out()).times(n).emit().path()

这种场景下,举荐应用 GES 算法文档中的_k_-hop 算法解决该问题,须要留神,这个算法接口只会返回满足查问条件的子图中的所有点,但没有节点详情和边信息,如果须要节点详情能够采纳 batch-query 批量进行节点详情查问。如果须要边信息,举荐场景 (2) 应用的 API。

  • 场景 (2) 按条件追溯某个节点之前(后)n 层节点,节点筛选条件雷同

g.V(id).repeat(outE().otherV().hasLabel(‘A’)).times(n).emit().path()

这种场景下,举荐应用 repeat-query 办法。该办法能够疾速实现某个终点前后_n_跳查问,并且能够限定节点查问条件,并且所有点的查问过滤条件雷同。在查问中,如果不同的点须要应用不同的查问条件进行过滤,能够先不指定点查问条件,待返回查问后果后再进行过滤。不指定点的查问场景能够进化为场景 (1),并且该 API 能够同时返回节点和边的详情。

  • 场景 (3) 按条件追溯某个节点之前(后)n 层节点,不同节点筛选条件不同

图 4 的例子就是一个这样的场景,每层的查问 label 不同。这种状况下,举荐应用 filtered-query 进行查问,该办法须要具体指定每个节点的过滤属性,相当于将每个查问条件都在参数中一一指定,实现齐全满足条件的查问。我的项目中,绝对于 Gremlin 查问,filtered-query 的查问性能能够晋升 10 倍左右。

上述三个场景中 repeat-query 和_k_-hop 具备更好的泛化能力,能够随便指定查问跳数_n_,须要设定的参数简略。而 filtered-query 须要具体指定查问中每层节点的属性,参数较为简单,具体应用中能够依据业务需要进行抉择。

GES 还提供了很多算法,如 Node2vec, subgraph2vec,GCN 算法,本文只介绍了基于 GES 进行节点疾速查问并提供追溯服务,后续也会思考如何基于建设好的图,进行一些数据节点交融,也能够进行类似度剖析、品质评估和流程举荐等,更好地开掘数据的价值。

【参考资料】

[1] 华为云 GES 服务用户指南 https://support.huaweicloud.com/usermanual-ges/ges_01_0002.html

[2] 图引擎(GES)业务面 API 参考 -V3.0

[3] Gremlin 官网文档:https://tinkerpop.apache.org/…

点击关注,第一工夫理解华为云陈腐技术~

退出移动版