TuGraph 图数据库¶
TuGraph 是由蚂蚁集团与清华大学联合研发的高性能图数据库,本文档将介绍 TuGraph 的核心概念、架构设计和应用场景。
项目地址:https://github.com/TuGraph-family/tugraph-db
什么是图¶
我们今天介绍的图,是图论中使用点和边表示的图(Graph),而非图像的图(Image)。
图的基本元素是点和边,其中点表示事物或实体,边表示点之间的关联关系。
例如在企业图谱中,点可以表示公司、员工、项目,边则表示他们之间的关系:
- 公司和员工之间的雇佣关系
- 员工和员工之间的好友关系
- 项目和员工之间的参与关系
除此之外,点和边上可以附加属性,比如员工的工号、雇佣的时间等,这样的图称为属性图。
图有非常丰富的表达能力,可以用于金融、工业、医疗等各个领域。在实际应用中,图的规模越来越大,比如金融交易图,点边规模可能达到百亿级别。
TuGraph 简介¶
TuGraph 图数据库由蚂蚁集团与清华大学联合研发,构建了一套包含图存储、图计算、图学习、图研发平台的完善图技术体系,拥有业界领先规模的图集群。
TuGraph 解决了图数据分析面临的大数据量、高吞吐率和低延迟等重大挑战,是蚂蚁集团金融风控能力的重要基础设施,显著提升了欺诈洗钱等金融风险的实时识别能力和审理分析效率。
核心特性¶
TuGraph 是支持大数据量、低延迟查找和快速图分析功能的高效图数据库,具有以下功能特征:
数据模型
- 属性图模型
- 实时增删查改
- 多重图(点间允许多重边)
- 多图(大图与多个子图)
事务处理
- 完善的 ACID 事务处理
- 隔离级别为可串行化(Serializable)
- 点边索引
查询与计算
- 混合事务和分析处理(HTAP)
- 支持图查询、图分析、图学习
- 主流图查询语言(OpenCypher、ISO GQL 等)
- 支持 OLAP API,内置 30 多种图分析算法
- 基于 C++/Python 的存储过程
- 事务内并行 Traversal API
可视化工具
- 提供图可视化工具
- Browser 和 Explorer 网页端交互
性能与扩展性
- 千万点/秒的高吞吐率
- TB 级大容量
- 高可用性支持
- 高性能批量导入
- 在线/离线备份恢复
TuGraph 产品架构¶
TuGraph 的整体架构自下而上包括以下几层:
1. 软硬件环境¶
TuGraph 核心由 C++ 开发,默认使用 GCC 8.4 编译器,遵循 C++17 标准。
CPU 兼容性:测试过基于 X86 和 ARM 的 CPU,包括 Intel、AMD、Kunpeng、Hygon、飞腾等
操作系统兼容性:支持多个操作系统,包括:
- Ubuntu、CentOS、SUSE
- 银河麒麟、中标麒麟、UOS
硬件要求:
- 不需要特殊硬件如 GPU
- 对 RDMA、HBM 等硬件升级可以天然适配
- 默认 KV 存储使用 LMDB,需要文件系统支持 POSIX 接口
2. 存储层¶
图数据模型:
- 支持属性图模型
- 按照层次分为:子图、标签(点标签和边标签)、属性
- 使用直观的多层树状模型
存储实现:
- 多图采用数据物理隔离,每个图对应一个 LMDB 实例
- 图数据自适应映射到 KV 键值对,最大程度发挥读性能
- KV 层实现多线程写,解决 LMDB 写性能较低的劣势
- 主键索引和二级索引通过 B+ 树实现
3. 计算层¶
计算层分为三个引擎:
图事务引擎
- 处理并发的图操作(单点查询、邻居查询、路径遍历)
- 侧重 ACID 事务保证
- 性能指标:QPS(每秒查询数量)
图分析引擎
- 处理全图迭代的复杂分析任务
- 单个任务并发利用所有硬件资源
- 性能指标:任务完成总时长
图神经网络引擎
- 全图迭代 + 机器学习框架
- 集成 PyTorch、MXNet、TensorFlow 等
- 可使用 GPU 等加速硬件
4. 客户端¶
SDK 支持:
- Java、Python、C++ 等多种语言
- RPC 协议(基于 brpc,长连接,高性能)
- REST 协议(宽泛兼容,易对接)
交互方式:
- 命令行工具(
lgraph_cypher) - Browser 和 Explorer 网页端
- OGM(Object Graph Mapping)工具
5. 生态工具¶
TuGraph DataX:
- 支持 MySQL、Kafka、Hive 等多数据源导入
- 使用 SparkSQL 进行数据清洗
- 提供空库导入和增量导入模式
核心功能¶
查询语言¶
TuGraph 提供 Cypher 图查询语言,遵循 OpenCypher 标准:
- 支持 Procedure 嵌入
- 可插拔优化框架
- 可扩展安全性检查框架
存储过程(Procedure)¶
从 3.5 版本开始,TuGraph 支持新的存储过程编程范式:
- 定义标准的签名和结果
- 支持 POG(Procedures on Graph Query Languages)编程
- POG 库打破了查询语言和存储过程之间的界限
- 扩展了查询语言的使用范围
数据导入导出¶
导入功能:
- 空库导入(离线导入):吞吐率极高
- 增量导入:在线数据导入
- 空库导入性能约为增量导入的 10 倍
导出功能:
- 命令行工具:
lgraph_export - 支持格式:CSV、JSON
- 基于快照保证数据一致性
备份恢复¶
备份类型:
- 主动/定时备份
- 离线/在线备份
- 全量/增量备份
恢复功能:
- 恢复到最新状态
- 恢复到历史时间点
- 保证数据库一致性
数据预热¶
TuGraph 是基于磁盘的图数据库,仅当访问数据时才加载到内存。通过事先进行数据预热,可以改善服务器刚开启后因频繁 IO 操作导致的性能问题。
高可用¶
TuGraph 采用 RAFT 协议的多机热备机制:
- 实时多副本数据热备
- 部分副本不可用时集群仍能正常服务
- RPO 接近 0
- 主从模式:主节点处理写请求,主从节点均可处理读请求
- 写请求需同步到多于二分之一的节点才算完成
应用场景¶
金融领域¶
金融领域的实体主要涉及人、公司、账户、产品等,它们之间的关系包括交易关系、登录关系、股权关系、雇佣关系等。
| 场景 | 描述 |
|---|---|
| 贷款审核 | 通过分析申请人的关联关系、交易情况等辅助判断偿还能力和意愿 |
| 贷后管理 | 分析借款人交易情况,预警逾期风险 |
| 失联修复 | 通过社交和购物数据找出其他联系方式 |
| 担保环检测 | 检测环状、链式、家族式、交叉等特殊担保结构 |
| 信用卡团伙欺诈检测 | 通过社区发现算法检测疑似欺诈团伙 |
| 反洗钱 | 在交易和社交网络中识别洗钱行为和链路 |
| 车险反欺诈 | 分析被保人、案件地点和修理厂关系,识别骗保行为 |
工业领域¶
工业生产和制造过程中产生大量异构数据,包括设计文档、设备数据、仿真方案、实验结果等。
| 场景 | 描述 |
|---|---|
| 供应链管理 | 管理产品-部件-零件的多层次、多供应商复杂网络 |
| 文档管理 | 有机组织不同类型文档,方便查找相关信息 |
| 研发过程管理 | 管理测试流程、数据版本、算法版本等复杂关系网络 |
| 设备信息管理 | 表示设备间的供电、供料、空间等关系 |
智慧城市¶
智能化城市管理需要综合道路、管线等拓扑信息,电力、饮用水等供求信息,以及环境信息等异构数据。
| 场景 | 描述 |
|---|---|
| 智能交通 | 基于道路拓扑、容量和流量进行智能信号灯调度 |
| 智能排水 | 基于排水系统信息和雨量对排水系统进行调度 |
| 管线管理 | 全周期管理管线,包括故障排查、寿命评估等 |
| 人群疏散 | 综合多种交通方式和道路承载量,优化疏散方案 |
社会治理¶
社会治理包括公共安全、法律事务、舆论、网络安全等多方面。
| 场景 | 描述 |
|---|---|
| 犯罪团伙发现 | 通过图分析算法识别联系紧密的犯罪团伙 |
| 涉众案件调查 | 有效组织涉众案件的人员和要素,提供证据支持 |
| 违法网站甄别 | 基于 IP-域名网络建立可信度模型,判断网站合法性 |
| 法院卷宗管理 | 管理案件间的复杂关系,提高办案和查询效率 |
互联网¶
人-人关系的社交网络、人-商品的购买关系构成图,通过分析提供优质服务。
| 场景 | 描述 |
|---|---|
| ID 映射 | 统一存储用户信息和关系,识别单人多号和多人一号 |
| 好友推荐 | 基于社交网络提供"好友的好友"、"共同好友"等推荐 |
| 商品推荐 | 找出兴趣爱好类似的用户,推荐类似商品 |
| 垃圾用户识别 | 基于网络信息精准识别垃圾用户 |
快速开始¶
部署方式¶
TuGraph 提供三种部署方式:
- 云部署:基于阿里云计算巢快速部署
- Docker 部署:使用预编译的 Docker 镜像
- 安装包部署:支持 CentOS、Ubuntu 等操作系统
最新版本¶
TuGraph 最新版本为 4.5.2,提供以下安装包和镜像:
- CentOS 7/8 安装包(RPM)
- Ubuntu 18.04 安装包(DEB)
- CentOS 7 预安装镜像
- CentOS 7/8、Ubuntu 18.04 编译镜像
学习资源¶
文档资源:
视频教程:
示例场景:
- 电影图谱
- 流浪地球图谱
- 三体图谱
- 三国图谱
主要仓库¶
- TuGraph-DB:https://github.com/TuGraph-family/tugraph-db
- 可视化界面:https://github.com/TuGraph-family/tugraph-db-browser
- 性能测试(Twitter 数据):https://github.com/TuGraph-family/gdbms-microbenchmark
- 性能测试(LDBC-SNB):https://github.com/TuGraph-family/tugraph-snb-interactive
- TuGraph-Analytics:https://github.com/TuGraph-family/tugraph-analytics
本文档基于 TuGraph 官方文档整理,更多详细信息请访问 TuGraph 官方文档。