揭秘可视化图探索工具 NebulaGraph Explore 是如何实现图计算的

news2024/11/15 4:33:54

前言

在可视化图探索工具 NebulaGraph Explorer 3.1.0 版本中加入了图计算工作流功能,针对 NebulaGraph 提供了图计算的能力,同时可以利用工作流的 nGQL 运行能力支持简单的数据读取,过滤及写入等数据处理功能。

本文将简单分享下 NebulaGraph Explorer 中集成图计算的基本实现原理。

整体架构

上图 1 描述了 NebulaGraph Explorer Workflow 所涉及的相关系统及调用过程。

其中:

  • Explorer:主要负责产出工作流的配置,提供操作工作流的 HTTP API 服务,可视化展示及读取图计算工作流运行结果的能力。
  • Dag-Ctrl:主要提供独立解析工作流,下发任务的能力,提供相应的 Job(单次运行的 workflow)和 Task (Job 中的具体任务节点)日志及启停能力,具有独立 web 服务。
  • Analytics:提供运行具体任务节点的能力(运行算法,查询,写入等)
  • Datasources:目前 Explorer 支持的各类数据源。

前端交互界面

我们在 NebulaGraph Explorer 界面上利用高定制、轻量级的开源自研流程图库 NebulaGraph-VEditor 开发。通过拖拉拽的交互方式,生成 DAG(有向无环图),并生成对应的 Workflow Code(流程描述代码),其中的各种算法节点通过 JSON 配置对应到 DAG-Ctrl 和 Analytics 的算法配置,可以灵活添加新任务节点。其配置结构大致如下:

analytics_sssp:{
      name: 'SSSP',//算法名称
      input: ['src', 'dst', 'weight'],// 输入字段和列
      output: ['vid', 'count'],// 输出字段和列
      form: {// 表单配置
        root: {
          component: 'input',
          isParam: true,
          label: 'RootId',
        },
      },
      algorithm: ""// Web图算法函数
}

其中,通过设计两种锚点(参数锚点,数据锚点)来进行 Task 节点间的数据交互,中间数据格式统一抽象为 M*N 的 csv 格式

  • 对于数据锚点,可以通过连线,将上游节点的输出锚点匹配到下游节点的输入锚点上,因此对于每个节点来说,数据输出和输入都表达为列的匹配即可。例如 Query 查询节点,其输入输出可以根据 nGQL 动态变化,因此输入输出的锚点也是动态可变的,用户可以自由地将 Query 输出的结果输出到一个或多个计算任务节点中。
  • 对于参数锚点,则可以改变算法的配置参数,或 nGQL 的字符串变量,这对于经常调整算法参数的计算流程非常有用,另外参数锚点也可以来自于上游的数据锚点,例如对图进行 SSSP(单源最短路径)运算,就可以通过参数锚点动态的从上游数据锚点中获取需要进行计算的根节点 ID,如下图:

(黄色标识的为参数锚点,白色标识的为数据锚点)

可以利用这个特性,将常用的 nGQL 功能模块抽象为函数节点,快速构建图业务流程

NebulaGraph Explorer Server 任务管理

NebulaGraph Explorer Server 会存储用户的 workflow 做为模板,用户可以利用前台界面和 API 网关调用 workflow 生成对应 Job 实例,将对应的 workflow 配置逻辑传输到 DAG-Ctrl 中运行。目前只支持手动生成实例,未来会加入定时调度能力,加强对 workflow 和 job 的管理能力。

在生成 Job 实例后,NebulaGraph Explorer Server 端会定时同步 DAG-Ctrl 的 Job 运行情况。

DAG-Ctrl

DAG 对用户配置的有向图进行解析后,会下发到 Analytics 集群中并行运算。这里我们抽离了 DAG 作为独立 Server,支持和 Explorer 分离部署,通过 HTTP 进行数据互通,NebulaGraph Explorer 默认会附带 DAG-Ctrl 包一键启动,并发压力情况较小的情况下,适合部署在一台机器上运行。

由于下发任务需要登入相应的 Analytics 机器,因此需要用户先安装好 Analytics 后,对 DAG 所在机器给予 SSH 授权后才能使用。

DAG 在拿到对应的有向节点任务后会进行依赖优先级排序,依次 SSH 到 Analytics 机器中启动进行运算,并将运算结果地址传入下个节点任务中作为输入。

DAG 通过独立的 DB 用来存储运行过程中产生的任务和日志等数据。

NebulaGraph Analytics

NebulaGraph Analytics 是一款高性能的图计算工具,Explorer 不会附带 Analytics 启动,也不会感知到 Analytics 节点,主要通过 DAG-Ctrl 完成 Analytics 集群节点的交互配置,因此 NebulaGraph Explorer 提供一个配置界面供用户在线配置 DAG 需要的相关配置。

其中,Analytics 集群和 HDFS 地址通过配置直接存储在 DAG-Ctrl 中,NebulaGraph 则会默认在 NebulaGraph Explorer 登录后将登录信息加密后直接传输到 DAG-Ctrl 中。在 Analytics 计算服务运行时会从 DAG-Ctrl 下发的配置中取得需要写入或读取的数据源地址及相关的验证信息,完成计算后将数据写入到指定数据源中。关于 Analytics 的详细介绍可以参考我们之前发布的文章。

工作流结果

NebulaGraph Explorer 对结果的读取主要有两种

  1. 直接捞取数据源中的数据,如直接读取 NebulaGraph、HDFS、CSV 等,这样在海量数据下可以获取到完整的计算结果。
  2. 通过 Explorer 可视化查看,因为受限于 HTTP 的传输能力,在大数据量下,取 HDFS 数据会取指定大小的一部分文件回来进行渲染可视化,因此相当于对数据进行了采样后再展示。而对于 NebulaGraph 数据源则会通过分页在前台展示全量工作流结果。

在计算结果导入到 NebulaGraph Explorer 的画布上可视化后,由于计算结果返回的是一系列点 ID,不能展示边和详细数据,因此我们提供了一个自动补齐数据的方案,会请求导入到画布的点之间所有可能的边数据,这样我们可以大致模拟出工作流结果间的图拓扑结构。

图计算可视化

对图计算出的结果集,我们针对图算法的类别进行了针对性的可视化展示。

  • 节点重要度、聚类系数、路径长度 - 值归一化到节点尺寸
  • 聚类 - 通过颜色标记 label
  • 图特征 - 对应形状的边颜色 / 高亮

如上图进行 BNC (中介中心性计算)后,节点重要度一目了然。

Web 图计算

除了以上介绍的图计算工作流外,针对小数据量,重可视化分析的场景,NebulaGraph Explorer 额外提供了一套轻量级的 Web 端单机图计算方案,针对画布中用户已探索出的图数据进行实时图计算。

如下图所示,目前支持工作流中的所有图算法,但由于部分不稳定算法(如 LPA), 分布单机及同步异步算法间的差异,少部分图算法会和工作流图计算结果有一些差异。

性能方面,我们通过利用 Rust 将图算法编译为 WASM 在 Web 端运行,对于点边数量 1w 左右的场景, Floyd-Warshall 这类 O(n^3) 基本在 2s 左右即可完成,能实时快速的对画布图数据进行可视化分析,提升小数据量下的图算法可视化体验。

关于未来

未来 NebulaGraph Explorer Workflow 会逐渐完善并丰富目前的功能,同时在实际业务需求的基础上对现有功能进行优化,主要包含以下几个方向:

  • 加入定时调度,任务监控
  • 接入更多算子来实现数据清洗,合并等完备的ETL逻辑
  • 接入更多数据源
  • 定义完备的图计算可视化语言

欢迎免费试用我们的 NebulaGraph Explorer,体验完整的 workflow 流程。


谢谢你读完本文 (///▽///)

NebulaGraph Desktop,Windows 和 macOS 用户安装图数据库的绿色通道,10s 拉起搞定海量数据的图服务。通道传送门:http://c.nxw.so/aved3

想看源码的小伙伴可以前往 GitHub 阅读、使用、(з)-☆ star 它 -> GitHub;和其他的 NebulaGraph 用户一起交流图数据库技术和应用技能,留下「你的名片」一起玩耍呢~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/382984.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学习记录 --- Pytorch优化器

文章目录参考文献什么是优化器optimizer的定义optimizer的属性defaultsstateparam_groupsoptimizer的方法zero_grad()step()add_param_group()state_dict()、load_state_dict()优化一个网络同时优化多个网络当成一个网络优化当成多个网络优化只优化网络的某些指定的层调整学习率…

总结对Dva数据流向的简单理解

在刚刚接触Dva时,我最想知道的第一个问题就是: 1. Dva是什么? Dva官网文档的介绍是: dva 是体验技术部开发的 React 应用框架,将上面三个 React 工具库包装在一起,简化了 API,让开发 React 应…

[Datawhale][CS224W]图神经网络(八)

目录一、图神经网络1.1 为什么卷积神经网络 (CNN) 在图形上失败?1.2 一个GNN网络的结构如图:![在这里插入图片描述](https://img-blog.csdnimg.cn/20210606150918449.png?x-oss-processimage/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cH…

MySQL实战解析底层---事务隔离:为什么你改了我还看不见

目录 前言 隔离性与隔离级别 事务隔离的实现 事务的启动方式 前言 和数据库打交道的时候,总是会用到事务最经典的例子就是转账,你要给朋友小王转 100 块钱,而此时你的银行卡只有 100 块钱转账过程具体到程序里会有一系列的操作&#xff0…

高可用/性能

文章目录1.数据库系统架构发展(1)单库架构(2)主备架构(3)主从架构2.主从复制主从同步配置主从复制模式(1)异步复制(2)半同步复制(3)全…

用spectralayers 简单去一下人声做个伴奏

最近有个同事说有个工作要一个歌的伴奏不会下载问我能不能给下一个。问题是我五音不全,也不咋关注伴奏这方面的事儿,然后巧了,当天晚上就有个网上的大哥在群里聊天的时候说有个去人声比较给力的软件,我马上给要来了。 软件叫啥sp…

【代码随想录训练营】【Day29】第七章|回溯算法|491.递增子序列|46.全排列|47.全排列 II

递增子序列 题目详细:LeetCode.491 注意这道题求的是子序列,而不是子数组,子数组要求其数组是原数组的子集,且元素是连续的,而子序列只需要保证至少有两个元素即可,不需要关系元素是否连续。 所以一开始…

测试人员如何在测试环境数据库批量生成测试数据?方案分享

测试人员为了测试某个特定场景,往往需要在测试环境数据库中插入特定的测试数据来满足需求;性能测试时,常需要在测试环境生成大量可用测试数据来支持性能测试;建设持续集成持续交付体系时,我们往往也需要在测试环境生成…

【网络】套接字 -- TCP

🥁作者: 华丞臧. 📕​​​​专栏:【网络】 各位读者老爷如果觉得博主写的不错,请诸位多多支持(点赞收藏关注)。如果有错误的地方,欢迎在评论区指出。 推荐一款刷题网站 👉 LeetCode刷题网站 文章…

记录一次nginx转发代理skywalking白屏 以及nginx鉴权配置

上nginx代码 #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; …

【2023】某python语言程序设计跟学第二周内容

本文说明: 案例内容为北理工python语言程序设计课程,如有不妥请联系! 目录蟒蛇绘制案例:执行结果:代码分析:举一反三:绘制一个五角星图案执行结果:turtle库根据案例简单说明&#xf…

linux(Centos)安装docker

官网地址:Install Docker Engine on CentOS 首先检查linux系统版本及内核: 安装docker要求系统版本至少为7.x版本,内核至少为3.8以上 cat /etc/redhat-release # 查看系统版本号uname -r #查看linux系统内核 检查系统是否能连上外网&#…

3.基于Label studio的训练数据标注指南:文本分类任务

文本分类任务Label Studio使用指南 1.基于Label studio的训练数据标注指南:信息抽取(实体关系抽取)、文本分类等 2.基于Label studio的训练数据标注指南:(智能文档)文档抽取任务、PDF、表格、图片抽取标注等…

NJU数电实验-1

实验一 选择器 2选1多路选择器 逻辑表达式:y(∼s&a)∣(s&b)y(\sim s\&a)|(s\&b)y(∼s&a)∣(s&b) 逻辑电路: 数据流建模 数据流建模主要是通过连续赋值语句 assign 来描述电路的功能 module m_mux21(a,b,s,y);input a,b,s;…

这是一篇很好的互动式文章,Framer Motion 布局动画

重现framer的神奇布局动画的指南。 到目前为止&#xff0c;我最喜欢 Framer Motion 的部分是它神奇的布局动画–将 layout prop 拍在任何运动组件上&#xff0c;看着该组件从页面的一个部分无缝过渡到下一个部分。 <motion.div layout /> 在这篇文章中&#xff0c;我们…

【测试岗】那个准点下班的人,比我先升职了...

前言 陈双喜最近心态很崩。和他同期一道进公司的陈琪又升了一级&#xff0c;可是明明大家在进公司时&#xff0c;陈琪不论是学历还是工作经验&#xff0c;样样都不如自己&#xff0c;眼下不过短短的两年时间便一跃在自己的职级之上&#xff0c;这着实让他有几分不甘心。 程双…

linux常用命令介绍 03 篇——常用的文本处理工具之grep和cut(以及部分正则使用)

linux常用命令介绍 03 篇——常用的文本处理工具之grep和cut&#xff08;以及部分正则使用&#xff09;1 常用命令01篇 和 02篇1.1 Linux命令01篇——Linux解压缩文件常用命令1.2 Linux命令02篇——linux日常常用命令介绍2. 正则表达式2.1 基本定义2.2 正则中常用的元字符3. gr…

【python】异常详解

注&#xff1a;最后有面试挑战&#xff0c;看看自己掌握了吗 文章目录错误分类捕捉异常实例finally的使用捕捉特定异常抛出异常用户自定义异常&#x1f338;I could be bounded in a nutshell and count myself a king of infinite space. 特别鸣谢&#xff1a;木芯工作室 、I…

项目质量管理有哪些不同阶段?其中“质量“指的是什么?

项目质量管理是指在整个项目中管理和保持质量的过程。 "质量 "不是意味着 "完美"&#xff0c;通常更多的是指在整个项目中确保质量的一致性。然而&#xff0c;"质量 "的确切含义取决于客户或利益相关者对项目的需求&#xff0c;因此在每个项目可…

Ubuntu开机自动挂载硬盘

查看挂载信息&#xff0c;命令台输入 df -h能够看到/dev/nvme0n1p2是我们要挂在的硬盘&#xff0c;其路径是/media/lkzcswq/Data 找到要挂载磁盘的UUID sudo blkid /dev/nvme0n1p2观察到这个磁盘的UUID为72922DF0922DBA0D&#xff0c;type为ntfs 4. 编辑/etc/fstab文件 #如…