功能概览
此文档主要介绍 TuGraph 的主要功能和特性。
1.安装部署
1.1.部署方式
TuGraph目前提供云部署、Docker部署以及安装包部署三种部署方式,用户可根据实际情况选择适合的部署方式。
1.2.软硬件环境
TuGraph核心是由C++开发,默认使用的编译器为GCC8.4,使用c++17标准。此外,存储过程中额外提供了Python Procedure API,该功能需要Python环境。TuGraph不需要特殊的硬件比如GPU,对RDMA、HBM等高延迟低带宽的通用硬件升级可以天然适配。
TuGraph测试过基于X86和ARM的CPU,包括Intel、AMD、Kunpeng、Hygon、飞腾等,也同时在多个操作系统上运行,包括Ubuntu、CentOS、SUSE、银河麒麟、中标麒麟、UOS的主流版本,对操作系统和CPU没有特殊的要求。
软硬件环境也包括依赖库的环境,由于TuGraph的存储层中默认的KV存储是LMDB,需要文件系统能够支持POSIX接口。在不同的环境下编译和参数配置会略有不同,比如在图存储的点边数据打包中,应和操作系统的页表大小匹配,默认为4KB,建议将系统的页表大小也设置为4KB。
2.存储层
在图数据模型上,TuGraph支持属性图模型,按照层次可以分为子图、标签(包括点标签和边标签)、属性。从存储层看,TuGraph使用使用直观的多层的树状模型,没有跨子图的标签,也没有跨标签的属性,仅保留图模型的核心逻辑。
在子图的存储上,TuGraph对多图做了数据的物理隔离,每个图对应一个LMDB的实例。多图的元数据描述信息,保存在meta的特殊的公共LMDB实例中。点边标签及其属性的存储,通过将图数据自适应地映射到KV键值对,最大程度发挥读性能。同时在KV层实现了多线程写,解决了LMDB写性能较低的劣势。主键索引和二级索引,对应LMDB中B+的表,支持基于比较的索引值增删查改。
存储层还保留了一些其他非核心功能的数据,包括权限数据、预编译的插件数据、监控数据等。
3.计算层
计算层在功能上分成三个部分,包括TP类的图事务引擎,AP类的图分析引擎和图神经网络引擎。
-
图事务引擎,主要用来处理并发的图操作,包括单点查询、邻居查询、路径遍历。图事务引擎侧重并发操作的ACID事务,确保操作逻辑不会互相干扰,主要性能指标为 QPS,即每秒完成的查询数量。
-
图分析引擎,操作类型通常为全图迭代。部分简单的分析任务(比如SPSP)可以由图事务引擎完成,复杂的分析任务均由图分析引擎完成,单个任务通常需要数秒至数小时。因此单个图分析任务要并发利用所有的硬件资源,性能指标为任务完成的总时长。
-
图神经网络引擎,通常也为全图迭代。图神经网络引擎除了基于图拓扑的操作,也需要集成一个机器学习的框架来处理向量操作,比如 PyTorch、MXNet、TenserFlow。
三个引擎的操作逻辑不尽相同,独立配置资源池。事图事务引擎基于RPC操作设置了一个线程池,每接受客户端的一个操作,从线程中取一个线程来处理,并发执行的数量等于RPC线程池的容量,通常配置为服务器的核数。图分析引擎有一个分析线程池,每个图分析任务会并发执行,即用所有的线程来执行一个任务,来加速操作的性能。TuGraph图分析操作串行执行的特性会一定程度限制用户的使用体验,并发的图分析的需求可以通过高可用部署的方式,增加机器资源来处理,或者接入外部的任务调度器,将数据传到实时调度的容器来计算。图神经网络操作在图上的操作会复用图事务引擎或图分析引擎的资源,向量的操作会起单独的资源,在机器学习框架中可以使用GPU等单独的加速硬 件。
4.核心功能
4.1.查询语言
TuGraph 提供 Cypher 图查询语言,遵循OpenCypher标准。
-
支持Procedure嵌入
-
可插拔优化框架 各类优化功能
-
可扩展安全性检查框架 对于cypher进行
4.2.存储过程
当用户需要表达的查询/更新逻辑较为复杂(例如 Cypher 无法描述,或是对性能要求较高)时,相比调用多个 REST 请求并在客户端完成整个 处理流程的方式,TuGraph 提供的存储过程(Procedure)是更简洁和高效的选择。
从 3.5 版本开始,TuGraph 重新设计了新的存储过程编程范式,支持定义标准的签名和结果,支持POG编程。
TuGraph 支持 POG (Procedres on Graph Query Languages) 编程和 POG 库,其中“Graph Query Languages”包含 Cypher 以及 制定中的 ISO GQL 等图查询语言。POG 库提供在查询语言中对用户定义的存储过程的访问,打破了查询语言和存储过程之间的界限,扩展了查询 语言的使用范围。
这个文档描述了 新的 Procedure 编程范式以及 POG。