复杂场景下图数据库的 OLTP 与 OLAP 融合实践
在一些图计算的场景下,我们会遇到同时需要处理 OLTP 和 OLAP 的问题。而本文就给了一个 OLTP 与 OLAP 融合实践的指导思路,希望给你带来一点启发。
Dag Controller 介绍
Dag Controller 是 NebulaGraph 企业版的图系统,经过反复测试无误后已经发布,它主要解决的是 OLTP 和 OLAP 的融合问题,以及复杂场景下的图计算问题。
欢迎大家来详细了解下:https://docs.nebula-graph.com.cn/3.2.1/graph-computing/0.deploy-controller-analytics/。
下面,我对 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 的职责:
- 向外部提供了 http 接口,用于 Job 的提交、停止、删除等操作,以及系统环境的配置等。
- DAG 的执行:Dag Controller 在执行 DAG(有向无环图)时,OLAP 部分会调用 NebulaGraph Analytics 系统,OLTP 部分会调用 graphd 完成 nGQL 的执行。
NebulaGraph Analytics 是 NebulaGraph 的图计算系统,支持 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。
具体描述如下:
- 系统启动时,分配 Job 线程池和 Task 线程池,分别处理 Job 的执行和 Task 的执行。
- 定时地从数据库中获取未执行的 Job,交由 Job 线程池运行。
- Job 执行时按照上下游的依赖关系对 Task 排序,然后依次判断每个 Task 的所有上游是否执行完成,上游执行完成后将此 Task 交给 Task 线程池执行,如果上游未执行完则等待。
- 在 Job 执行过程中,如果 Job 线程池满了之后,定时获取未执行 Job 时需要做等待处理。Task 线程池满了之后,也同样做等待处理。
类型校验
Task 之间的数据输入与输出存在数据类型校验问题,这里需要注意。比如:Task2 是 Task1 的下游,Task2 的输入需要的是 int 类型,而 Task1 输出也必须是 int 类型。
DAG 停止
在停止 Job 的时候,需要对多个并行运行的 Task 进行停止。一个 Task 的有准备阶段、运行阶段,并且运行阶段会存在跨机器、多进程的情况。停止 Job 需要避免孤儿进程的问题。
自定义算法支持
我们支持将客户的算法当作一种 Task,用于 DAG 的搭建。首先,在系统中配置算法相关的参数信息。在执行 Job 时,由系统负责运行与 Task 相对应的算法。
谢谢你读完本文 (///▽///)
要来近距离体验一把图数据库吗?现在可以用用 NebulaGraph Cloud 来搭建自己的图数据系统哟,快来节省大量的部署安装时间来搞定业务吧~ NebulaGraph 阿里云计算巢现 30 天免费使用中,点击链接来用用图数据库吧~
想看源码的小伙伴可以前往 GitHub 阅读、使用、(^з^)-☆ star 它 -> GitHub;和其他的 NebulaGraph 用户一起交流图数据库技术和应用技能,留下「你的名片」一起玩耍呢~

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
如何使用 Kubernetes 实现应用程序的弹性伸缩
本篇文章利用 KEDA 使用 Prometheus 采集 APISIX 暴露出来的指标作为伸缩器,进而实现基于流量的应用程序弹性伸缩。 作者张晋涛,API7.ai 云原生工程师,Apache APISIX PMC。 原文链接 介绍 通常情况下,每个应用可以承载的压力都是固定的,我们可以通过提前进行压测来了解单应用程序副本的负载能力。如果在业务高峰,或者业务的请求压力增加时候,对应用进行横向扩容可以保证更好的为用户提供服务。 Apache APISIX 是一个高性能的云原生 API 网关,所有发送到上游应用程序的流量都将通过 APISIX,所以我们可以根据 APISIX 提供的流量指标,来判断应用程序是否需要进行弹性伸缩。 本文中将使用 KEDA 作为弹性伸缩的控制组件,用 Prometheus 采集 APISIX 提供的流量指标来进行应用的弹性伸缩。 KEDA 中如何使用 Prometheus 实现伸缩 KEDA 是一个 Kubernetes 中基于事件的自动伸缩组件,可以配置多种伸缩器。本文将使用 Prometheus 作为伸缩器 ,获取 APISIX 暴露出来的 metrics(指...
- 下一篇
数据采集 & 流批一体计算工具 bboss v6.8.2 发布
数据采集ETL&流批一体化计算工具 bboss v6.8.2 发布。 bboss-datatran由bboss开源的数据采集同步ETL工具,提供数据采集、数据清洗转换处理入库以及流批一体化数据指标统计计算处理功能。 v6.8.2功能改进 FTP文件输入/输出插件改进:ftp/sftp协议增加socketTimeout配置,sftp协议增加connectionTimeout配置 FTP输出插件改进:增加生成文件异常上传FTP机制,默认同步发送。数据量比较多,同时切割文件的情况下,启用异步发送文件,会显著提升数据采集同步性能 数据采集重大功能扩展:增加指标计算输出插件,提供流批一体指标统计计算功能,支持两种模式的指标计算: 1) 在采集和处理数据时,同时对数据进行大数据指标统计聚合计算,最终将加工后的数据和指标计算结果进行持久化处理 2)只对采集的数据进行指标计算,最终将指标计算结果进行持久化处理 可以将聚合计算结果保存的各种指标数据库:Eleasticsearch/Mongodb/HBase/Clickhouse/Doris/DB(Oracle、Mysql、postgresql、...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2配置默认Tomcat设置,开启更多高级功能