当前位置: 首页 > news >正文

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

前言

在可视化图探索工具 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 用户一起交流图数据库技术和应用技能,留下「你的名片」一起玩耍呢~

相关文章:

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

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

移动架构43_什么是Jetpack

Android移动架构汇总​​​​​​​ 文章目录一 Android 开发框架演变1 MVC2 MVP3 MVVM二 什么是JetPack三 如何构建支持Jetpack项目一 Android 开发框架演变 1 MVC Model-View-Controller,模型-视图-控制器,Model负责数据管理,View负责UI显…...

TiDB的分布式事务原理探究

事务开启 获取全局授时作为startTS构建一个tikvTxn对象(包括snapshot)。 事务写 txn.Set方法本质上将kv值写入了一个内存缓存(即kv/memdb_buffer.go中的memDbBuffer)中。该内存kv数据库利用的是golevel提供的功能。 事务回滚 直接将tikvTxn的valid字段…...

【C语言】函数指针和指针函数

文章目录[TOC](文章目录)前言概述函数指针定义:使用:回调函数指针函数前言 今天学一下函数指针 提示:以下是本篇文章正文内容,下面案例可供参考 概述 函数指针:是一个指向函数的指针,在内存空间中存放的…...

Nodejs中npx简介和作用

一、npx简介npm从5.25.2版开始,增加了 npx 命令。方便了我在项目中使用全局包。二、安装Node安装后自带npm模块,可以直接使用npx命令。如果不能使用用,就要手动安装一下。npm install -g npx三、使用npx想要解决的主要问题,就是调…...

Matplotlib精品学习笔记001——绘制3D图形详解+实例讲解

3D图片更生动,或许在时间序列数据的展示上更胜一筹 想法: 学习3D绘图的想法来自科研绘图中。我从事的专业是古植物学,也就是和植物化石打交道。化石有三大信息:1.物种信息,也就是它的分类学价值;2.时间信息…...

学习ifconfig实战技巧,成为网络管理高手

文章目录前言一. ifconfig 命令介绍二. 语法格式及常用选项三. 参考案例3.1 显示网络设备信息3.2 启动和关闭指定的网卡3.3 对指定的网卡设备执行修改IP地址操作3.4 启动和关闭ARP协议3.5 使用ifconfig添加网卡总结前言 大家好,又见面了,我是沐风晓月&a…...

day38|70. 爬楼梯(进阶)、322. 零钱兑换、279.完全平方数

70. 爬楼梯(进阶) 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n 2 输出:2 解释:有两种方法可以爬到楼顶。 1. 1 阶 1 阶 2. 2…...

SpringBoot全局异常处理

一、目的 当客户端/前端向服务端发送一个请求后,这个请求并不是每次都能完全正确的处理,比如出现一些资源不存在、参数错误或者内部错误等信息的时候,就需要将异常反馈给客户端或者前端。那么这就需要程序有完整的异常处理机制。 在 Java 中所…...

SpringBoot异常处理

目录 一、 错误处理 1. 默认规则 2. 定制错误处理逻辑 二、自定义异常处理 1. 实现 ErrorController 2. RestControllerAdvice/ControllerAdvice ExceptionHandler 实现自定义异常 3. 新建 UserController.class 测试 3 种不同异常的处理 4. 最终效果如下 补充 1. 参…...

《C++ Primer Plus》(第6版)第8章编程练习

《C Primer Plus》(第6版)第8章编程练习《C Primer Plus》(第6版)第8章编程练习1. 打印字符串2. CandyBar3. 将string对象的内容转换为大写4. 设置并打印字符串5. max5()6. maxn()7. SumArray()《C Primer Plus》(第6版…...

RAD Studio 11.3 Alexandria Crack

RAD Studio 11.3 Alexandria Crack 瞄准最新平台版本-此版本增加了对Android 13和Apple macOS Ventura的官方支持。它还支持Ubuntu 22 LTS和Microsoft Windows Server 2022。 使用生物特征认证-New为FireMonkey移动应用程序提供了新的移动生物特征认证组件。 部署嵌入式InterBa…...

Stm32 iic 协议使用

/* 第1个参数为I2C操作句柄 第2个参数为从机设备地址 第3个参数为从机寄存器地址 第4个参数为从机寄存器地址长度 第5个参数为发送的数据的起始地址 第6个参数为传输数据的大小 第7个参数为操作超时时间 */ HAL_I2C_Mem_Write(&hi2c2,salve_add,0,0,PA_BUFF,sizeof(PA_BUFF…...

Malware Dev 02 - Windows SDDL 后门利用之 SCManager

写在最前 如果你是信息安全爱好者,如果你想考一些证书来提升自己的能力,那么欢迎大家来我的 Discord 频道 Northern Bay。邀请链接在这里: https://discord.gg/9XvvuFq9Wb我拥有 OSCP,OSEP,OSWE,OSED&…...

每日一题29——山峰数组的顶部

符合下列属性的数组 arr 称为 山峰数组&#xff08;山脉数组&#xff09; &#xff1a; arr.length > 3 存在 i&#xff08;0 < i < arr.length - 1&#xff09;使得&#xff1a; arr[0] < arr[1] < ... arr[i-1] < arr[i] arr[i] > arr[i1] > ... &g…...

Linux- 系统随你玩之--好用到炸裂的系统级监控、诊断工具

文章目录1、前言2、lsof介绍2.1、问题来了&#xff1a; 所有用户都可以采用该命令吗&#xff1f;3、 服务器安装lsof3.1、安装3.2、检查安装是否正常。4、lsof 命令4.1、常用功能选项4.2、输出内容4.2.1 、FD和 TYPE列5、 lsof 命令实操常见用法6 、常用组合命令7、 结语1、前言…...

第十三节 继承

什么是继承&#xff1f; java中提供一个关键字extends&#xff0c;用这个关键字&#xff0c;我们可以让一个类和另一个类建立父子关系。 public class Student extends People{} student为子类&#xff08;派生类&#xff09;&#xff0c;people为父类&#xff08;基类或者超类…...

【优化】性能优化Springboot 项目配置内置Tomcat使用Http11AprProtocol(AIO)

Springboot 项目配置内置tomcat使用Http11AprProtocol(AIO) Windows版本 1.下载Springboot对应版本tomcat包 下载地址 Apache Tomcat - Apache Tomcat 9 Software Downloads 找到bin目录下 tcnative-1.dll 文件 2 放到jdk的bin目录下 Linux版本 在Springboot中内嵌的Tomcat默…...

SpringBoot之@ConfigurationProperties、@EnableConfigurationProperties

ConfigurationProperties 这个注解不仅可以为yml某个类注入还可以为第三方bean绑定属性 为yml某个类注入 只要将对应的yml类对象声明实体pojo并交给spring容器管理&#xff0c;再在类上使用ConfigurationProperties绑定对应的类名即可 涉及到两个知识点&#xff0c;这个类对…...

数组一次性删除多条数据

需求描述 最后提交时删除表格中的空行 实现方法 单行删除 - 并不是一次性删除 表格每行的最后设置删除按钮&#xff0c;点击时将当前行的索引传递给方法&#xff0c;splice 删除当前行。 <el-table :data"tableData" class"myTable" border>..…...

相机删除照片如何恢复?一键解决它

相机删除照片如何恢复&#xff1f;喜欢用相机拍照的人&#xff0c;总会在空闲时多拍几张&#xff0c;这使我们相机中会储存大量的、各种各样的照片。等到回家后&#xff0c;在进行删除&#xff0c;并选出比较好的照片。但也很容易就误删了一些好看的照片。碰到这种意外事&#…...

vue3搭建教程(基于webpack+create-vue+ element-plus)

前言使用vue脚手架搭建vuetswebpack项目搭建步骤&#xff1a;下载node 版本可以 12 或者14或者 16.0&#xff0c;此次使用的>16.0版本&#xff0c;vue-cli通过npm i -g vue/cli 升级到了 vue cli v5.0.8建目录&#xff0c;如&#xff08;vue3Study&#xff09;用IDE工具打开…...

代码随想录算法训练营第四十二天 | leetcode 1049. 最后一块石头的重量 II,494. 目标和,474.一和零

代码随想录算法训练营第四十二天 | leetcode 1049. 最后一块石头的重量 II&#xff0c;494. 目标和&#xff0c;474.一和零1049. 最后一块石头的重量 II494. 目标和474.一和零1049. 最后一块石头的重量 II 题目&#xff1a; 有一堆石头&#xff0c;每块石头的重量都是正整数。…...

Java8中Lambda表达式之Collection 的常见用法

背景 在java8中引入了Lambda表达式。其实&#xff0c;他就是一个匿名函数。我们经常会用到一些循环遍历&#xff0c;起始完全就可以通过Lambda来简化我们不必要的操作&#xff0c;下面我们来看一下Lambda常用的方法。 准备条件 DataBuilderprivate static class Person {priv…...

SpringCloud系列知识快速复习 -- part 2(Sentinel微服务保护,Seata分布式事务,Redis分布式缓存和多级缓存)

SpringCloud系列知识快速复习 -- part 2&#xff08;Sentinel微服务保护&#xff0c;Seata分布式事务&#xff0c;Redis分布式缓存和多级缓存Sentinel微服务保护什么是雪崩问题&#xff1f;解决方法服务保护技术对比流量控制簇点链路Sentinel流控模式流控效果热点参数限流隔离和…...

设置CentOS7的时间与网络同步

1.设置时区为北京时间 [rootlocalhost ~]# timedatectl set-timezone Asia/Shanghai 2.查看系统时间 [rootlocalhost ~]# timedatectl Local time: 四 2023-03-02 17:40:41 CST #系统时间 Universal time: 四 2023-03-02 09:40:41 UTC …...

java开发手册之编程规约

文章目录编程规约命名风格常量定义代码格式OOP规约集合处理并发处理控制语句注释规约其它编程规约 命名风格 1.代码中的命名均不能以下划线或者美元符号开始&#xff0c;也不能以下划线或者美元符号结束 例如&#xff1a;_name | name__ | name$ | $name2.代码中的命名严…...

Camera | 5.Linux v4l2架构(基于rk3568)

上一篇我们讲解了如何编写基于V4L2的应用程序编写&#xff0c;本文主要讲解内核中V4L2架构&#xff0c;以及一些最重要的结构体、注册函数。 厂家在实现自己的摄像头控制器驱动时&#xff0c;总体上都遵循这个架构来实现&#xff0c;但是不同厂家、不同型号的SoC&#xff0c;具…...

机房PDU如何挑选?

PDU PDU(Power Distribution Unit,电源分配单元),也就是我们常说的机柜用电源分配插座,PDU是为机柜式安装的电气设备提供电力分配而设计的产品,拥有不同的功能、安装方式和不同插位组合的多种系列规格,能为不同的电源环境提供适合的机架式电源分配解决方案。PDU的应用,…...

lab备考第二步:HCIE-Cloud-Compute-第一题:FusionCompute

第一题 FusionCompute 一、题目介绍 1.1. 扩容CAN节点与对接共享存储&#xff08;必选&#xff09; 题目及【考生提醒关键点】 扩容一台CNA节点&#xff0c;配置管理地址设置为&#xff1a;192.168.100.212。密码设置为&#xff1a;Cloud12#$。【输入之前确认自己的大小写是否…...

做数据ppt模板下载网站/seo搜索引擎优化简历

原文地址&#xff1a;http://www.uml.org.cn/zjjs/201108111.asp 1.集群 1.1定义&#xff1a;是一组独立的计算机系统构成一个松耦合的多处理器系统&#xff0c;它们之间通过网络实现进程间的通信。应用程序可以通过网络共享内存进行消息传送&#xff0c;实现分布式计算机。 是…...

群晖可以做网站服务器吗/小说百度风云榜

从A表随机取2条记录,用SELECT TOP 10 * FROM ywle order by newid() order by 一般是根据某一字段排序,newid()的返回值 是uniqueidentifier ,order by newid()随机选取记录是如何进行的 newid()在扫描每条记录的时候都生成一个值, 而生成的值是随机的, 没有大小写顺序. 所以…...

微信小网站制作/网站服务器是什么意思

1. 没有Timer控件 解决方案&#xff1a;  第一步&#xff1a;申明一个DispatcherTimer 类的变量&#xff0c; private DispatcherTimer timer; //定时控件 第二步&#xff1a;初始化这个类 timer new System.Windows.Threading.DispatcherTimer(); timer.Tick new EventHand…...

福步外贸网站/杭州seo论坛

文章目录前言&#x1f680; 1.端午节起源&#x1f680; 2.献礼端午节&#x1f308; 2.1 Python画一盘粽子&#x1f308; 2.2 html5数粽子小游戏前言 2022年6月3日&#xff0c;每年一度的端午节来临了&#xff0c;在这里程序猿用特殊的表达来献礼端午节 &#x1f680; 1.端午节…...

wordpress 4.8 主题/国产最好的a级suv88814

之前写过一篇关于echarts-tree的文章&#xff0c;那时候是在echarts没有升级为4.1.0之前&#xff0c;附上我之前写的效果图&#xff0c;死丑。 这是echarts版本升级记录&#xff0c;可以看优化了哪些功能 4.1.0&#xff1a;[Feature] 支持树图的布局&#xff1a;从右向左&…...

衍艺武汉网站设计公司/国内网站建设公司

1.项目使用vue-cli vant less axios 开发 2.安装 amfe-flexible ,并在main.js 主入口文件引入 amfe-flexible, 它会自动设置html的font-size为屏幕宽度除以10&#xff0c;也就是1rem等于html根节点的font-size。假如设计稿的宽度是750px&#xff0c;此时1rem应该等于75px。假…...