Paper Digest|OpenSPG 超大规模知识仓储 KGFabric 论文解读

news2025/2/23 22:10:56

本文作者:祝锦烨,蚂蚁集团开发工程师,主要研究方向是图谱存储与计算。过去一年在团队的主要工作是蚂蚁知识图谱平台和 KGFabric 相关研发,研究成果收录于 VLDB'24。

2024 年 8 月 26 日,数据管理与数据库领域顶级国际会议 VLDB 2024 在广州举办,蚂蚁集团知识引擎团队的论文《KGFabric: A Scalable Knowledge Graph Warehouse for Enterprise Data Interconnection》被收录为 Industry track 的现场展示论文 (Oral Paper)。

KGFabric 是一种基于分布式文件系统(DFS)的全量知识仓储的解决方案,使用 SPG 作为数据模型,能够更好地表达真实世界,同时优化存储和计算效率。KGFabric 支持 Graph Fabric 能力,在保护用户隐私的同时支持多域图谱的融合,有效解决了知识图谱数据孤岛的问题。与流行的关系 DBMS 和图数据库相比,KGFabric 语义关系的存储空间减少了 90% 以上。在实际工作负载中,图融合的性能提升了 21 倍。在多跳语义图分析中,KGFabric 的性能提高了 100 倍。

论文地址

https://www.vldb.org/pvldb/vol17/p3841-yi.pdf

01、概述

在蚂蚁集团内部的实践中,我们构建了蚂蚁知识图谱平台。它构建了与商户、公司、账户、产品等相关的众多领域特定知识图谱,管理着数万亿的结构化知识图谱,服务于搜索、推荐、风险控制等业务。提供基于跨领域知识复用的多种企业级知识管理能力,满足多样化图谱业务的自助接入,并支撑了多种下游服务和图推理、图分析应用,线性扩展支撑规模超千亿量级。

在平台建设迭代的过程中,随着跨域图谱融合、图匹配和图表示学习等任务对系统能力的要求日渐增高,现存的数据仓库系统(例如ODPS)和图数据库越来越难以满足需求。因此,我们提出了超大规模知识仓储的解决方案KGFabric。

KGFabric 采用 SPG(Semantic-enhanced Programmable Graph,语义增强可编程框架)作为数据模型,基于分布式文件系统(DFS)提供了原生知识图谱存储和多域知识图谱融合能力。KGFabric 为底层文件存储设计并实现了一套混合存储格式,在设计之初就考虑到同时兼容多种图模型和超级点(super-vertex)的存储和处理,并且分别为属性图和语义图实现了 CSR 索引和三元组索引。在底层完全使用 POSIX API 来实现文件 I/O 操作,实现了低成本的多云环境部署。

02、基于 SPG 的建模

KGFabric 使用 SPG 作为数据模型,其语义与属性图兼容。SPG(Semantic-enhanced Programmable Graph,语义增强可编程框架) 是一种基于属性图的语义框架,来自于蚂蚁知识图谱平台支持金融领域业务的多年沉淀。它创造性地融合了属性图结构性与 RDF 语义性,既克服了 RDF/OWL 语义复杂无法工业落地的问题,又充分继承了属性图结构简单与大数据体系兼容的优势。

为了更好的增强属性图中对于节点类型的语义表达,SPG 在属性图的节点类型和边类型之上扩展并引入更多主体分类模型对节点类型进行扩充以兼容更加多元的知识表示。在 SPG 中主体分类模型简要解释如下:

  • 实体:业务相关性比较强的客观实例,通过实体 Properties (属性、关系)刻画个体画像,如用户、企业、商户等。例如下图中的 User 包含若干属性且与 Shop 相连
  • 概念:实体从具体到一般的抽象,表述的是一组实体集合、一种分类体系。相对静态、具有较强复用性,如人群标签、领域标准类型等。例如下图中的 Concept.Prefer
  • 事件:加入时间、空间、标的等约束的实体类型,如通过 NLP、CV 等抽取出来的行业事件、企业事件、诊疗事件等。例如下图中的 TransactionEvent 事件类型

03、核心能力

3.1 基于 LSM-tree 的存储架构

KGFabric 的存储架构基于 LSM-Tree,数据层次分为 Base 和 Delta 两层,其中 Delta 层被进一步划分为 Level-0 和 Level-1,其中 Delta Level-0 为流式导入(mini-batch)优化。例如从消息队列导入;Delta Level-1 主要考虑批量导入场景,例如从 Hive 或 ODPS 导入。

为了平衡读放大,我们在后台运行 Tiering Compaction,定期将重整并压实(compact)数据。在蚂蚁集团内部,每天有超过 1000 个数据导入任务,在实际生产场景中,该 Compaction 策略将随机读和顺序读的读放大分别控制在 5 倍和 1.6 倍以下。

KGFabric 主要分为几个主要的目录层级:

  1. Namespace:业务数据管理的基本单位,用于实现不同领域图谱的数据隔离
  2. RelationGroup:管理图谱数据分组,通常基于实体、关系或事件时间切片来分组
  3. Base:管理周期性快照数据
  4. Delta:管理流/批更新的增量数据

KGFabric 的版本管理依赖文件系统的 put-if-not-exists 语义,使用 VersionPointer 机制解决读写冲突。当一次导入任务成功后,KGFabric 自动创建新的版本文件,通过时间戳映射相应版本文件,可实现任意快照访问,current 文件总是记录最新数据版本。

3.2 为语义图优化的 File Format

实际的图谱数据承载 RelationGroup 目录中,它包含了若干数据文件和对应的元数据。数据文件包括 PGFile 和 SGFile,它们分别存储属性图数据和语义图数据,布局如下图所示:

PGFile 和 SGFile 都由 Footer 和文件内的 BlockIndex 组成,不同的是它们内部分别存储 PGBlock 和 SGBlock。PGBlock 和 SGBlock 是基本的写入和压缩单位。我们主要采用 PGBlock 存储属性图。在 PGBlock 内部包括点边(VertexTable)和边表(EdgeTable,包含出边和入边)和属性表(PropertyTable),我们采用了 CSR 索引格式进一步压缩子图数据。属性表支持行或列存储格式,并且使用了位图矩阵来标识 NULL 值属性。PGBlock 内,我们通过点切分的方式将超级点(度数很高的边,通常超过 10 万)的稠密边分配到若干个 PGBlock 中分别存储。

如下图所示,vid2 在 block#1 和 block#95 分别触发了两次切分逻辑。基于以上逻辑,我们解决了超级点在加载和计算的内存瓶颈问题,提升了按关系类型加载边时分组 limit 的 I/O 效率。

在 KGFabric 中,语义图的存储包含三个存储组件:

  • 概念词典:提供 ConceptName 和 ConceptID 之间的双向映射能力
  • 语义属性:在 PGBlock 中,不再使用边表存储语义实体到概念的边,转而使用属性表存储 ConceptID 来记录实体与概念实例的链接,优化存储空间
  • TripleIndex:用于表示概念到语义实体的边,因为这些边通常比较稠密,我们使用了 RoaringBitmap 来优化存储空间和计算性能。我们基于 TripleIndex 实现了概念的多维索引用于支持 AND/OR/NOT 等 bitwise 算子,且支持基于分桶的并发计算。

3.3 Graph Fabric

传统的 Data Fabric(数据编织)大多是基于数据冗余实现的,这通常意味着跨集群之间数据拷贝。在 KGFabric 中我们实现了一套 Graph Fabric 框架,在避免冗余拷贝的同时实现了多域图谱融合。只需通过选取待融合的实体类型,再指定链指或融合算子,Graph Merge Tree(GMT)便可自动构造出虚拟类型 FuseType,用户可透明地使用该虚拟类型实现基于 Fuse-On-Write(FOW)或 Fuse-On-Read(FOR)的图谱融合。

GMT 是实现 Graph Fabric 的核心数据结构,在逻辑上它是一棵多叉树,FOR 的过程实际上可以抽象为对树的后序遍历。在后序遍历中,我们还集成了 AntPrivacy API,在 Graph Fabric 执行之前,对数据进行属性粒度的加密,能够有效的在图谱融合过程中确保用户数据安全。

3.4 图分析系统集成

为了优化金融场景下的负载性能,KGFabric 可以作为图分析系统的存储后端,提供原生图检索和图加载能力,避免了分布式构图场景下 shuffle 的额外开销。KGFabric 实现了以下优化:

  • 分区图加载:实现了分布式图谱数据加载,支持多种图切分方式,包括按照 VertexID 切分、按照存储 BlockSize 切分等。相较于 ODPS 或 Hive 省去了数据 shuffle 环节,大幅提升了读取性能
  • Backend Cache:主要包含 meta cache 和 data cache。
    • meta cache:RelationGroup 的 meta 缓存和 BlockIndex 缓存,为常驻任务优化
    • data cache:包含两级缓存,常驻磁盘的全量缓存和内存中的 Block 缓存,为延迟敏感的任务优化
  • 算子下推:支持 filter/aggregate/window 等图算子的下推。其中:
    • filter 算子支持实体/关系/属性类型的下推,支持将算子下推到 GMT 的叶子结点上(即 RelationGroup 的读取)
    • aggregate 支持 sum/max/min/count 等统计下推
    • window 算子支持基于时间切片的事件和索引的 filter 算子的下推
  • 零拷贝序列化/反序列化:实现了内存数据结构和磁盘数据结构的同构,降低了序列化和反序列化的开销。

04、实验评测

为了评估系统性能,我们进行了存储空间,图分析效率和 Graph Fabric 扩展性实验。

4.1 数据集

我们主要选用了 LDBC-Finbench 作为属性图(LPG)数据集,并且通过为 LDBC-Finbench 添加语义关系,扩展了新的数据集 LDBC-Finbench-X 作为语义图(SPG)数据集。另外我们从生产场景选取了用户图谱、商户图谱和资金图谱作为真实数据集。数据集规格如下:

各数据集的度数分布如下:

4.2 存储空间

对属性图数据集,KGFabric 的存储空间占用仅有 Neo4j 的 43.7%,为 RocksDB 的91.7%。对语义图数据集,KGFabric 得益于对强 schema 建模,大幅优化了语义关系的存储开销,空间占用仅为 RocksDB 的 7%,Neo4j 的 1.9%。

4.3 图分析效率

我们主要选用了 pairwise path 和 cycle pattern 两种典型的图分析任务,主要对比对象是 ODPS、Neo4j 和 RocksDB。在 pairwise path 实验中,随着分析任务跳数的增多,KGFabric 提供的 backend 可以大幅度提升图计算的扩展性。

在 cycle pattern 实验中,受益于低构图成本,KGFabric 最多可以将 3 跳环路分析的耗时降低 67.8%。

4.4 Graph Fabric 扩展性

对于默认链指策略(IDE),随着数据源的增多,相较于 ODPS,KGFabric 表现出了良好的扩展性。为了优化性能用户自定义链指策略(UDL)的性能,我们实现了 rindex,对数据的预排序,进一步降低了延迟。

文章推荐

OpenSPG 首个 Release 版本发布,提供成熟可靠的知识构建解决方案

蚂蚁知识图谱管理系统研究成果获国际顶会认可,KGFabric 论文入选 VLDB 2024

手把手教程,改造 GraphRAG 支持自定义 LLM

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

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

相关文章

[数据集][目标检测]红外微小目标无人机直升机飞机飞鸟检测数据集VOC+YOLO格式7559张4类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):7559 标注数量(xml文件个数):7559 标注数量(txt文件个数):7559 标注…

Hikvision综合安防管理平台isecure center文件读取深度利用

前言 远离一线很久了,很难有实战的机会。碰到Hikvision的漏洞,市面上的很多文章又很模糊,自己摸全点做个详细记录。 参考文章,向佬学习。本次测试为内部授权测试,已脱敏。https://mp.weixin.qq.com/s/zvo195UQvWwTppm…

WPF 的TreeView的TreeViewItem下动态生成TreeViewItem

树形结构仅部分需要动态生成TreeViewItem的可以参考本文。 xaml页面 <TreeView MinWidth"220" ><TreeViewItem Header"功能列表" ItemsSource"{Binding Functions}"><TreeViewItem.ItemTemplate><HierarchicalDataTempla…

TikTok直播专线服务商推荐

在追求TikTok直播的极致体验时&#xff0c;搭建稳定高效的专线网络无疑是最重要的第一步。国内市场涌现出众多TikTok直播专线服务商&#xff0c;面对如此多的选择&#xff0c;用户究竟该如何权衡利弊&#xff0c;作出明智的决策呢&#xff1f;以下是一些关键因素和TIKTOK直播专…

基于 K8S kubernetes 的常见日志收集方案

目录 1、日志对我们来说到底重不重要&#xff1f; 2、常见的日志收集方案 2.1 EFK 2.2 ELK Stack 2.3 ELKfilebeat 2.4 其他方案 2、elasticsearch组件介绍 3、filebeat组件介绍 3.1 filebeat和beat关系 3.2 filebeat是什么&#xff1f; 3.3 Filebeat工作原理 3.4 …

FEAD:fNIRS-EEG情感数据库(视频刺激)

摘要 本文提出了一种可用于训练情绪识别模型的fNIRS-EEG情感数据库——FEAD。研究共记录了37名被试的脑电活动和脑血流动力学反应&#xff0c;以及被试对24种情绪视听刺激的分类和维度评分。探讨了神经生理信号与主观评分之间的关系&#xff0c;并在前额叶皮层区域发现了显著的…

56.【C语言】字符函数和字符串函数(strtok函数)(未完)

目录 12.strtok函数(较复杂) *简单使用 总结: *优化 12.strtok函数(较复杂) *简单使用 strtok:string into tokens cplusplus的介绍 点我跳转 翻译: 函数 strtok char * strtok ( char * str, const char * delimiters ); 总结: delimiters参数指向一个字符串&#xff0…

RK3568平台(基础篇)示波器的使用

一.示波器面板介绍 示波器的横轴表示的是时间,在横轴上有10个小格,每个小格的时间是200us。 示波器的纵轴表示的是电压,在纵轴上有8个小格,每个小格的电压表示1V。 以上是个方波,方波在纵轴上占5个小格,每个小格的电压是500mv,所以这个方波的电压为2500mv。 方波在横…

每日OJ题_牛客_dd爱框框(滑动窗口)

目录 dd爱框框&#xff08;滑动窗口&#xff09; 解析代码 dd爱框框&#xff08;滑动窗口&#xff09; dd爱框框_牛客题霸_牛客网 解析代码 基础同向双指针算法。关于滑动窗口的介绍可看这篇&#xff1a;Offer必备算法02_滑动窗口_八道力扣OJ题详解&#xff08;由易到难&am…

【我的 PWN 学习手札】Largebin Attack(<= glibc-2.38可利用)

目录 前言 一、Largebin Attack的通用利用方法 二、再次 Largebin Attack 三、测试与模板 前言 早期的 Largebin Attack&#xff0c;通过修改 largebin 中 free chunk 的 bk 和 bk_nextsize 指针域&#xff0c;能够实现任意地址写堆地址。然而在 glibc > version2.30 后…

Mycat搭建读写分离

启动Mycat 进入 /mycat/conf/datasources目录下&#xff0c;修改prototypeDs.datasource.json文件 去mycat/bin目录用启动mycat ./mycat start (关闭mycat ./mycat stop)连接mycat 默认端口8066 用户名root 密码123456 注意&#xff1a;这里ip设为null表示任何ip都可以访问…

【学习笔记】SSL/TLS安全机制之CAA

1、概念界定 CAA全称Certificate Authority Authorization&#xff0c;即证书颁发机构授权&#xff0c;每个CA都能给任何网站签发证书。 2、CAA要解决的问题 例如&#xff0c;蓝色网站有一张橙色CA颁发的证书&#xff0c;我们也知道还有许多其他的CA&#xff1b;中间人可以说服…

JACM23 - A New Algorithm for Euclidean Shortest Paths in the Plane

前言 如果你对这篇文章感兴趣&#xff0c;可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」&#xff0c;查看完整博客分类与对应链接。 本文关注的问题为计算几何学中的经典问题&#xff0c;即「在平面上给定一组两两不相交的多边形障碍物&#xff0c;寻找两点…

Redis(redis基础,SpringCache,SpringDataRedis)

文章目录 前言一、Redis基础1. Redis简介2. Redis下载与安装3. Redis服务启动与停止3 Redis数据类型4. Redis常用命令5. 扩展数据类型 二、在Java中操作Redis1. Spring Data Redis的使用1.1. 介绍1.2. 环境搭建1.3. 编写配置类&#xff0c;创建RedisTemplate对象1.4. 通过Redis…

助力数字农林业发展服务香榧智慧种植,基于嵌入式端超轻量级模型LeYOLO全系列【n/s/m/l】参数模型开发构建香榧种植场景下香榧果实检测识别系统

作为一个生在北方但在南方居住多年的人&#xff0c;居然头一次听过香榧&#xff08;fei&#xff09;这种作物&#xff0c;而且这个字还不会念&#xff0c;查了以后才知道读音&#xff08;fei&#xff09;&#xff0c;三声&#xff0c;这着实引起了我的好奇心&#xff0c;我相信…

C++入门基础知识75(高级)——【关于C++ Web 编程】

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于C Web 编程的相关内容&#xff01; 关于…

HomeAssistant显示节假日

先看效果 步骤&#xff1a; 新建卡片时选择“Markdown 卡片”代码在文章最下方&#xff0c;当然你也可以自己修改 点击保存/完成 ### {% if now().hour > 6 and now().hour < 9 -%} 早上好&#xff0c; {%- elif now().hour > 9 and now().hour < 12 -%} 上午好…

【SSM-Day2】第一个SpringBoot项目

运行本篇中的代码&#xff1a;idea专业版或者idea社区版本&#xff08;2021.1~2022.1.4&#xff09;->这个版本主要是匹配插件spring boot Helper的免费版(衰) 【SSM-Day2】第一个SpringBoot项目 框架->Spring家族框架快速上手Spring BootSpring Boot的作用通过idea创建S…

【iOS】引用计数

引用计数 自动引用计数引用计数内存管理的思考方式自己生成的对象&#xff0c;自己所持有非自己生成的对象&#xff0c;自己也能持有不再需要自己持有的对象时释放无法释放非自己持有的对象 自动引用计数 自动引用计数(ARC,Automatic Reference Counting)是指内存管理中对引用…

最新多模板测算系统源码 测算系统海外多语言版

最新多模板测算系统源码 测算系统海外多语言版 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/89763600 更多资源下载&#xff1a;关注我。