背景知识

Ultipa 介绍

Ultipa 图中台(Ultipa Graph Platform,以下简称 Ultipa Graph)是一套超高性能图计算服务框架与存储设施。 Ultipa Graph 产品生态包含:

  1. 业界最高性能的实时图计算引擎;
  2. 高性能、高可用、持久化存储服务;
  3. 简洁、流畅的用户图形操作界面与知识图谱系统;
  4. 功能全面的命令行工具;
  5. 灵活的快速导入导出工具;
  6. 可一键部署的 docker 镜像;
  7. 各种流行编程语言的 SDK,API 开发工具。
  8. 本文所重点讲述的 UQL。

Ultipa Graph 支持丰富的查询方式,大量的高性能图算法,支持对海量数据的实时处理,真正意义上把非常耗时的非实时工作提升为实时(real-time)处理的操作,为用户节省大量时间成本,为图计算产品适用于更广阔的商业和大数据分析场景带来无限可能。

什么是 UQL

UQL(或 uQL)全称 Ultipa Query Language,是 Ultipa Graph 独有的高性能查询与管理语言, 规则简洁,支持对 Ultipa 图系统的查询,删除,修改,添加,属性管理,引擎管理,索引管理,图集管理,各类任务管理,权限管理等功能。用户可以通过 Ultipa-CLI 命令行工具、Ultipa-KG 图形界面、或者 SDK(Ultipa Software Development Kits)运行 UQL。

注:uQL是一种图操作语言,即Graph Query Language, 且在整体功能与兼容性上与GQL国际标准保持同步。 GQL标准预计在2022年推出,Ultipa团队会密切关注其发展态势。

一些术语

名称 类型
UQL(uQL) Ultipa Query Language,即 Ultipa 的查询与管理语言
点(node) 图领域中称之为顶点(Vertex),在 Ultipa 图系统中,我们统一 称之为 点(node)
边(edge) 连接两个点(node)的边,分为 1)无方向,2)有方向(见下面 "方向"的解释)
路径(path) 多个相连的边(包括边连接的点)构成的一个序列称为一条路 径,例如 a--b--c,单独的一条边也是一个路径
子图(subgraph) 子图相对于全图(完整图数据集)而言,是由全图的部分顶点 和边组成,例如每一次查询结果可以作为一张子图。
属性(property) Ultipa 图系统中的数据属性,分为点属性(node property)和 边属性( edge property)
实例(instance) Ultipa 图系统服务实例,每个 Ultipa 进程称之为一个实例,在 一个集群当中,可能会包含多个 ultipa 实例
图数据集(graphSet) 一个图数据集,或者简称为图集,代表一个完整的由点和边构 造的数据集,以及在此基础上的权限设置,算法结果等一系列 内容。一个 Ultipa 图系统中可以包含多个图集。
过滤器(filter) 用于属性的过滤,在查询中经常用到,详见《过滤器》章节
LTE Load to Engine, 用于将 property 加载进内存中用于计算
UFE Unload From Engine, 用于从内存中释放 property
方向 (左) 表示边的方向,向左,即在图中的点的入方向,例如 a<--,
方向 (右) 表示边的方向,向右,即在图中的点的出方向,例如 a-->
Ultipa ID ( _id ) 表示Ultipa系统对点或边赋予的ID。
原始 ID ( _o ) 表示用户数据在导入 Ultipa 图系统之前的原始 ID
* 标有* 的内容表示正在研发中
实验功能,试运行

语法规范

UQL 设计的初衷是帮助任何人可以快速的掌握 Ultipa 图中台的使用。Ultipa Query Language 的使用遵循以下规范, 本节旨在让大家对 UQL 的基本框架有个大概了解。

链式 & 函数式 风格

所有的 UQL 都遵循函数链式风格。 即 a().b().c().d()…的样式。

UQL是大小写敏感的操作语言。

为什么不使用 Cypher like 或者 SQL like 作为 UQL 的基础?

  • 无法表达高维数据,以及其组合,如,路径,点,边,属性,聚合运算结果集。
  • SQL 方式的路径过滤过于复杂且性能低效,如路径搜索,模板搜索,图遍历。
  • SQL 阅读起来与人脑呈相反逻辑,如嵌套语句,连表搜索等。

UQL 设计逻辑:

  • 可以返回并使用多维结果
  • 支持子图路径,点边,属性,table 等高级数据结构
  • 可以轻松描绘子图过滤,且保证性能零损耗。
  • 阅读与书写方式与人脑一致。
  • 链式调用&函数式风格,天然支持功能扩展,“链”本身就是一条路径。

命令,参数,配置,返回

UQL 由 【命令】 【参数】 【配置】 【返回】来组成,每个 UQL 操作包含,且只包含一个【命令】。 大部分 UQL 包含【参数】,查询相关的 UQL 会包含【返回】,算法相关的 UQL 会包含【配置】 具体可以参考《查询》章节中的查询机制,与图算法文档《Ultipa图分析与图算法》中的介绍。

驼峰命令

驼峰命令,符合驼峰风格的【命令】,

  • 如:
    • 创建索引:createIndex()
    • 查看索引:showIndex()
    • 查看任务:showTask()
  • 除属性操作,元数据操作(点,边的 CRUD)以外,都是遵循驼峰命令的风格。

组合命令

针对属性,元数据(点,边), 采用组合命令的方式来执行,旨在区分这是对元数据的操作。

  • 例如

    • 查找点:find().nodes()
    • 查看点属性:show().node_property()
    • 删除边:delete().edges()
  • 具体请参考 《实例,图集与属性》章节中 元数据 的相关的部分。

参数

参数是 UQL 中常用的概念,一个 UQL 中包含 >= 0 个参数。 这些参数描述着这条 UQL 的入参。

  • 例如:
    • find().nodes(<ultipa_filter>).limit(<int>)
      • 参数为 nodes、 limit
    • ab().src(<id>).dest(<id>).depth(<int>).limit(<int>).select(*)
      • 参数为 src、 dest、 depth、 limit
    • showTask()
      • 无参数

配置

配置是算法中特殊的概念,配置也是参数的一种,算法的配置定义了算法的运行依据。

  • 例如:

    • algo(degree).params({id: <id>, edge_property_name: <string>})
      • 配置项为: id、edge_property_name
    • algo(page_rank).params({loop_num:<int>, damping:<float>})
      • 配置项为:loop_num、damping
    • algo(degree_all)
      • 无配置项
  • 以上都包含了参数 params

保留字(reserved words)

UQL 设定了一系列保留字,用于系统逻辑运行。其中分为:

  1. 属性保留字
  2. 模板别名保留字

属性保留字(Reserved Property Name)

在所有的条件过滤当中,属性 _o, _id _from_id, _to_id 为 Ultipa 系统级服务保留属性(Reserved Properties)。

  • _o : 原始 ID,在数据迁移到 Ultipa 之前,点的原始 id
  • _id: 点的 ID,或者 边的 ID
  • _from_id, 为边的起始点的 ID
  • _to_id, 为 边的结束 点的 ID
  • # 开头的属性,为系统自动生成的属性,如:算法回写所自动创建的属性
  • ~ 开头的属性代表全文搜索引擎保留属性

模板别名保留字(Reserved Alias Name)

  • prev_n
    • 模板路径查询中,上一个点
  • prev_e
    • 模板路径查询中,上一条边