Ultipa 介绍
Ultipa(Ultipa Graph HTAP System,以下简称 Ultipa Graph)是一套超高性能原生图数据库与计算系统。
Ultipa Graph 产品生态包含:
- 业界最高性能的实时图计算引擎;
- 高性能、高可用、持久化存储服务;
- 简洁、流畅的用户图形操作界面与知识图谱系统;
- 功能全面的命令行工具;
- 灵活的快速导入导出工具;
- 可一键部署的 docker 镜像;
- 各种流行编程语言的 SDK、API 开发工具;
- 本文所重点讲述的图操作语言(GQL)UQL。
Ultipa Graph 支持丰富的查询方式、大量的高性能图算法以及对海量数据的实时处理,真正意义上把非常耗时的非实时工作提升为实时(real-time)处理的操作,为用户节省大量时间成本,为图计算产品适用于更广阔的商业和大数据分析场景带来无限可能。
什么是 UQL
UQL(或 uQL)全称 Ultipa Query Language,是通用图操作语言 GQL 的一种。UQL 是 Ultipa 独有的高性能查询与管理语言,可供开发人员快速学习、上手使用 Ultipa 图系统。UQL 支持对 Ultipa 图系统的查询、删除、修改、添加、图遍历、子图匹配、schema 管理、属性管理、引擎管理、索引管理、图集管理、各类任务管理、权限管理等功能。用户可以通过 Ultipa CLI(命令行工具)、Ultipa Manager(图形界面)或者 SDK(Ultipa Software Development Kits)运行 UQL,UQL 将很快实现图灵完备,提供给开发者使用。
UQL 在整体功能与兼容性上与 GQL 国际标准保持同步。GQL 标准预计在 2024 年推出,Ultipa 团队已经开始加入标准化组织,共建标准图查询语言。
常用术语
名称 | 类型 |
---|---|
GQL | Graph Query Language,即图查询语言,也是继 SQL(Structured Query Language)之后唯一会成为数据操作标准的语言。 |
UQL (uQL) | Ultipa Query Language,属于 GQL 的一种,可以全方位地操作 Ultipa 图系统。 |
点 (node) | 图领域中用来表示实体的顶点 (vertex),在 Ultipa 图系统中称为节点 (node)。 |
边 (edge) | 连接两个节点的边,Ultipa 图系统中的边均为有向边(见下面 "入边、出边、左向边、右向边" 的解释)。 |
路径 (path) | 有确定的起点和终点、由点边交替相连构成的序列称为路径,路径中的点可以重复出现,但边不能重复出现。路径中的点、边序列即可看作路径的唯一标识符。 |
环路 (circle) | (V4.0) 考察一条路径中的非起点位置上节点,若有节点重复出现则称该路径含有环路成分。 (V4.1) 当路径的起点、终点非同一点时,只要路径上有重复节点则称该路径含有环路成分;当路径的起点、终点为同一点时,环路判断方法同 V4.0。 例如: (进行路径查询时,含有环路成分的路径在使用查询参数 no_circle() 时会被过滤掉,即不会被返回。) |
最短路径 (shortest) | 从起点经过最少的边数(至少一条边)达到终点时,称该路径为该起点到该终点的最短路径。当路径上的边带有权重时,“边数最少”应理解为“边的权重和最小”。 |
图 (graph) | 由点和边组成的数据集称为图,图可以看成由多条路径组成的数据集合,图的最小单位是点。 |
子图 (subgraph) | 子图由全图的一部分点和边组成,点查询、路径查询的结果都可以看作是一张子图。 |
图数据集 (GraphSet) | 一个图数据集(简称为图集)代表一个由点和边构成的数据集,以及在此数据集上创建的索引、用户权限、算法任务等一系列内容。一个 Ultipa 图系统中可以包含多个图集。 |
模式 (schema) | Ultipa 图系统中,点、边的模式由多个属性构成,用于描述各种点、边的结构和内容,一个点、边只能属于一个 schema。 |
属性 (property) | 一个属性隶属于某个 schema 并用来描述点、边的结构特征。属性支持各种数据类型,如整形、浮点、字符等,以及一些数据结构,如数组、字典等。 |
属性索引 (property index) | 索引机制能提高属性的查询效率,创建好的索引树存储到磁盘之上。 |
全文索引 (full-text index) | 创建全文索引(对文本进行分词)能提高长字符串的查询效率。全文索引支持不同的字典,以便针对不同的数据集作出切词优化。 |
引擎索引 (engine index) | 通过将属性加载到计算引擎来提升路径查询、深度图检索的效率,通常能使效率提升几个数量级。 |
实例 (instance) | Ultipa 图系统服务实例,即 Ultipa Server 的运行程序;每个实例一般运行在一台虚拟或者物理主机之上,多个实例可以组成一个集群系统。 |
过滤器 (filter) | 用于在图操作中对点、边进行过滤。Ultipa Filter 本质上是一个逻辑树,非常类似于编程语言中的 IF,使用各种条件操作符、逻辑操作符、数值运算符等,详见《过滤器》一章。 |
LTE | Load to Engine,将 property 加载到计算引擎。 |
UFE | Unload from Engine,从计算引擎移除 property。 |
入边 | 从其它点指向点 a 的边称为 a 的入边,或 a 的入方向的边,可表示为 a<--、-->a |
出边 | 从点 a 指向其它点的边称为 a 的出边,或 a 的出方向的边,可表示为 a-->、<--a |
左向边 | 在路径中从后一个点指向前一个点的边称为左向边,可表示为 a<--b |
右向边 | 在路径中从前一个点指向后一个点的边称为右向边,可表示为 a-->b |
ID ( _id ) | 点独有的唯一标识符,用 string 存储,最大长度 128 字节。 |
UUID ( _uuid ) | 点、边的唯一标识符,用 uint64 存储。 |
边起点 ( _from、_from_uuid ) | 有向边起点的 ID 或 UUID。 |
边终点 ( _to、_to_uuid ) | 有向边终点的 ID 或 UUID。 |
V4.1 | V4.1 版特有的功能。 |
语法概述
UQL 的设计灵感来源于对图的深度理解,并结合了工业界对图的高维性、扩展性等需求。
链式表达 + 语义组装 + 别名调用
UQL 示例:
n(1).e({time > prev_e.time})[3].n(as target)
group by target.level with count(target) as quantity
order by quantity desc
return target.level, quantity limit 10
说明:
- UQL 的增、删、改、查功能是由风格为
[命令].[参数].[参数]…
的 链式语句 执行的,即上面示例中的 n(... ).e(...)[3].n(...),一个 UQL 语句可以包含多个链式语句; - UQL 的查询结果通过 子句 来进行加工和组装,即上面示例中的 group by ...,with ...,order by ...,return ...,limit ...;
- UQL 的查询结果还可以通过 函数 来进行运算,即上面示例中的 count(...);
- UQL 的各个链式语句、子句之间通过 自定义别名 来进行数据临时存储和传递调用,即上面示例中的 target、quantity,需使用关键词 as 先定义再调用;
- 多步模板内部可通过 系统别名
prev_n
、prev_e
来传递和调用数据,即上面示例中的 ...time > prev_e.time...; - UQL 语句中支持转义符
\
、制表符\t
、回车换行符\r\n
以及注释符//
、/*
、*/
。
UQL 设计逻辑:
- 可以返回并使用多维结果
- 支持子图、路径、点、边、属性、数组、表格等高级数据结构,且定义清晰
- 可以轻松描绘子图过滤,直接对接、适配高性能图计算引擎
- 易读,易写,易学,与人脑思维模式保持一致
- 链式表达 + 语义组装,支持各种功能扩展,“链”本身就是一条路径
- 函数式风格更符合如今复杂的数据处理需求,可以提供无限的扩展空间
- 函数式风格甚至可以允许用户自定义扩展语言语法特性,满足复杂图操作的需求
UQL 不使用 SQL like 作为基础的原因:
- 无法明确表达高维数据,以及其组合,如:路径,点,边,属性,聚合运算结果的集合
- SQL 方式的路径过滤过于复杂低效,如:路径搜索,模板搜索,图遍历
- SQL 阅读起来与人脑呈相反逻辑,理解难度大,如:嵌套语句,连表搜索等
UQL 语法特性
UQL 具备 DQL、DDL、DML、DCL 语法特性:
- DQL:数据查询语法,如点、边、路径查询;
- DDL:数据定义语法,可以对图集的内容进行增、删、改、查;
- DML:数据运维语法,如增删图集、修改 schema、引控制等;
- DCL:访问控制语法,主要用于操作数据库的权限设置,如用户管理、角色管理、赋权与撤销等。
保留字 (Reserved Words)
分类 | 保留字 |
---|---|
系统属性 | _id ,_uuid ,_from ,_to ,_from_uuid ,_to_uuid |
系统表名 | _graph ,_nodeSchema ,_edgeSchema ,_nodeProperty ,_edgeProperty ,_nodeIndex ,_edgeIndex ,_nodeFulltext ,_edgeFulltext ,_statistic ,_top ,_task ,_policy ,_user ,_privilege ,_algoList ,_extaList |
系统别名 | this ,prev_n ,prev_e |
子句关键词 | in ,nin ,contains ,xor ,as ,group by ,order by ,asc , desc ,skip ,limit ,return ,with ,where ,, uncollect ,union , all ,call |
函数关键词 | case ,when ,then ,else ,end |
UQL 前缀 | exec task ,optional |