乐趣区

关于数据库:复杂场景数据处理的-OLTP-与-OLAP-融合实践

本文首发于 NebulaGraph 公众号

Dag Controller 介绍

Dag Controller 是 NebulaGraph 企业版的零碎,通过重复测试无误后进行了公布,它次要解决的是 OLTP 和 OLAP 的交融问题,以及简单场景下的图计算问题。也欢送大家来具体理解下:https://docs.nebula-graph.com…。

上面是我对 Dag Controller 做的一些分享,欢送大家留言一起探讨。

置信大家对 OLTP 和 OLAP 都不生疏,我这里再简略介绍下: OLTP 是一种疾速响应、实时在线的一种数据处理形式 。与之对应的 OLAP,是一种离线的、简单场景的数据计算形式 。对 NebulaGraph 来说,OLTP 有多种多样的查问语句,如:go、match 等。OLAP 有各种各样的图算法,如:pagerank、louvian、wcc、kcore、jaccard 等。

OLTP 和 OLAP 并不是一个一个独立存在的,举例来说,咱们能够将 match 跑进去的子图喂给 pagerank 算法,pagerank 跑进去的后果能够写入到 NebulaGraph,继续执行 match 语句或其它算法。就像拼积木一样,能够将各种各样的 OLTP 和 OLAP 组装起来,造成一种更加简单场景的数据处理形式。

Dag Controller 就是解决这种场景的零碎,它负责 OLTP、OLAP 的串联和执行。

架构

Dag Controller 的职责:

1)向内部提供了 http 接口。

用于 Job 的提交、进行、删除等操作,以及零碎环境的配置等。

2)DAG 的执行。

Dag Controller 在执行 DAG 时,OLAP 局部会调用 NebulaGraph Analytics 零碎,OLTP 局部会调用 graphd 实现 nGQL 的执行。

NebulaGraph Analytics 是咱们的图计算零碎,反对 pagerank、wcc、louvain、jaccard 等图剖析算法,反对 hdfs 和 NebulaGraph 数据源。

graphd、metad、storaged 是 NebulaGraph 中的组件,graphd 次要负责 nGQL 的解析,storaged 负责数据的存储,metad 负责元数据的存储。

案例

案例 1

上图是一个对子图跑 PageRank 算法的 DAG 模型,首先用 nGQL 语句获取一个子图,而后再对这个子图跑 PageRank 算法。

当咱们的图规模特地大的状况下,且咱们只想对局部图数据跑算法,就能够应用这种形式。

案例 2

上图是一个对两类顶点计算最短门路的模型。

首先,别离用 nGQL 别离获取两个类别的顶点 ID。而后再把这两类顶点 ID 交给 ShortestPath 算法,ShortestPath 会在全图中计算这两类顶点之间的门路。

每个算法是能够设置基于全图跑算法,也能够基于子图跑算法。

DAG 模型有多种多样,能够依据不必的业务场景搭建不同的 DAG 模型。

技术实现

DAG 模型

DAG(有向无环图)指的是一个没有回路的有向图。DAG 的一个实例看作是一个 Job,一个 Job 有多个 Task。

Dag Controller 中的 Task 能够是一个 nGQL,也能够是一个图算法,如 pagerank、louvain、sssp 等。

Job 执行时候须要先对 Task 排序,网上有很多相干的代码,这里不再赘述。

并行执行

为了保障 DAG 的执行效率,多个 DAG 须要做到并行执行。同时,在一个 DAG 的外部,无上下游依赖关系的 Task 也须要并行执行。

如何做到多个 DAG 并行执行以及 Task 的并行执行?简略的说,通过两个线程池别离解决 DAG 和 Task。

具体形容如下:

1)系统启动时,调配 Job 线程池和 Task 线程池,别离解决 Job 的执行和 Task 的执行。

2)定时地从数据库中获取未执行的 Job,交由 Job 线程池运行。

3)Job 执行时依照上下游的依赖关系对 Task 排序,而后顺次判断每个 Task 的所有上游是否执行实现,上游执行实现后将此 Task 交给 Task 线程池执行,如果上游未执行完则期待。

4)在 Job 执行过程中,如果 Job 线程池满了之后,定时获取未执行 Job 时须要做期待解决。Task 线程池满了之后,也同样做期待解决。

类型校验

Task 之间的数据输出与输入存在数据类型校验问题,这里须要留神。比方:Task2 是 Task1 的上游,Task2 的输出须要的是 int 类型,而 Task1 输入也必须是 int 类型。

DAG 进行

在进行 Job 的时候,须要对多个并行运行的 Task 进行进行。一个 Task 的有筹备阶段、运行阶段,并且运行阶段会存在跨机器、多过程的状况。进行 Job 须要防止孤儿过程的问题。

自定义算法反对

咱们反对将客户的算法当作一种 Task,用于 DAG 的搭建。首先,在零碎中配置算法相干的参数信息。在执行 Job 时,由零碎负责运行与 Task 绝对应的算法。

——————————————————————————————————————————————————————————————————
原文链接:https://www.nebula-graph.com….

交换图数据库技术?退出 NebulaGraph 交换群请先填写下你的 NebulaGraph 名片,NebulaGraph 小助手会拉你进群~~

NebulaGraph 的开源地址:https://github.com/vesoft-inc… 感觉应用体验还不错的话,给咱们的 GitHub 点个 ❤️ 激励下开源路上的咱们呢~

退出移动版