跳转到主要内容

HugeGraph Gremlin

概述

HugeGraph 原生支持 Apache TinkerPop3 的图遍历查询语言 Gremlin。 与关系型数据库使用的声明式 SQL 不同,Gremlin 是一种通用的图遍历与计算语言,能够精准控制图的拓扑路径探索,执行实体创建(Vertex 与 Edge)、属性修改、批量删除以及复杂的图分析。

HugeGraph 基于 TinkerPop 3.8.1 引擎构建。完整规范与语法参考请查阅 Apache TinkerPop 3.8.1 官方参考文档。 若习惯声明式模式匹配(类似 SQL 或 Neo4j 风格),HugeGraph 同时提供 Cypher 查询语言 支持。


TinkerPop 特性支持

HugeGraph 实现了 TinkerPop 规范核心接口,针对图存储、顶点、边以及属性数据类型的具体支持情况如下:

图级特性(Graph Features)

特性名称含义与说明支持情况
Computer是否支持基于 GraphComputer 的 OLAP 图计算引擎(HugeGraph 服务端专注实时 OLTP 遍历,大规模图计算由独立组件支持)false
Transactions是否支持事务机制(原生支持 ACID 事务提交与回滚)true
Persistence是否原生将数据持久化到磁盘介质(取决于所配置的底层存储后端,RocksDB/Cassandra/HBase 等均持久化存储)取决于后端
ThreadedTransactions是否支持通过 createThreadedTx() 在多个线程间共享同一个执行事务false
ConcurrentAccess是否支持同一底层数据实例的多连接并发访问false

顶点特性(Vertex Features)

特性名称含义与说明支持情况
UserSuppliedIds是否允许在创建顶点时由用户指定自定义标识符(HugeGraph 支持用户自定义、主键和自动生成等策略)true
NumericIds顶点内部标识符是否限定为纯数值类型false
StringIds顶点内部标识符是否支持字符串类型true
UuidIds顶点内部标识符是否原生限定为 UUID 格式false
CustomIds顶点内部标识符是否支持复合自定义对象true
AnyIds顶点内部标识符是否允许任意 Java 对象类型false
AddProperty是否支持向顶点添加或动态更新属性true
RemoveProperty是否支持从顶点移除已有属性true
AddVertices是否支持向图中添加新顶点true
MultiProperties单个顶点同一属性名下是否支持存储多个值(多值属性)true
DuplicateMultiProperties在启用多值属性时,是否允许存在相同的重复值true
MetaProperties是否支持在属性上附加元属性(属性的属性)false
RemoveVertices是否支持从图中删除指定顶点true

边特性(Edge Features)

特性名称含义与说明支持情况
UserSuppliedIds是否允许直接指定边标识符(HugeGraph 边 ID 自动由起点、标签、排序键与终点复合生成)false
NumericIds边内部标识符是否限定为纯数值类型false
StringIds边内部标识符是否支持字符串类型true
UuidIds边内部标识符是否限定为 UUID 格式false
CustomIds边内部标识符是否支持复合自定义对象true
AnyIds边内部标识符是否允许任意 Java 对象类型false
AddProperty是否支持向边添加或动态更新属性true
RemoveProperty是否支持从边移除已有属性true
AddEdges是否支持在顶点之间建立边true
RemoveEdges是否支持从图中删除指定边true

数据类型支持(Data Type Features)

特性名称含义与说明支持情况
BooleanValues布尔类型属性(boolean)true
ByteValues单字节整数(byte)true
DoubleValues双精度浮点数(double)true
FloatValues单精度浮点数(float)true
IntegerValues32 位整型(int)true
LongValues64 位长整型(long)true
MapValues是否支持直接存储嵌套 Map 键值对对象false
MixedListValues是否支持存储不同类型混合元素的列表false
BooleanArrayValues布尔数组类型(boolean[])false
ByteArrayValues二进制字节数组(byte[],常用于 Blob 或向量嵌入存储)true
DoubleArrayValues双精度浮点数组(double[])false
FloatArrayValues单精度浮点数组(float[])false
IntegerArrayValues整型数组(int[])false
LongArrayValues长整型数组(long[])false
SerializableValues是否支持直接存储任意 Java 序列化对象false
StringArrayValues字符串数组(String[])false
StringValues标准文本字符串类型(text/string)true
UniformListValues存储同类型元素的集合列表(由 Schema 中的 cardinality() 与 valueList() 机制原生支持)false(由 Schema 支持)

Gremlin 常用步骤参考

HugeGraph 支持 Gremlin 遍历规范定义的各项步骤。完整说明与高级遍历用法请参阅 TinkerPop 3.8.1 步骤参考。

步骤说明官方文档
addE在两个顶点之间添加有向边addE step
addV向图中添加新顶点addV step
and确保所有子遍历都产生有效输出and step
as为步骤输出分配变量标签的调制器as step
by与 group、order 等步骤配合使用的维度调制器by step
coalesce返回首个产生结果的子遍历coalesce step
constant生成指定常量值,常与 coalesce 配合使用constant step
count统计遍历流中元素的总数量count step
datetime构造日期时间对象或取得服务器当前时间(返回 OffsetDateTime)datetime function
dedup去除遍历流中的重复元素dedup step
discard丢弃当前流中的遍历器输出discard step
drop从图中彻底删除对应实体(顶点、边或属性)drop step
fold栅栏步骤,将流中所有项汇总折叠为一个 Listfold step
group根据指定的键与投影调制器对数据进行分组聚合group step
has属性与元素过滤,支持 hasLabel、hasId、hasNot 等变体has step
inject将外部离散值直接注入当前遍历流中inject step
is针对标量值执行布尔条件匹配与过滤is step
limit限制遍历流返回的最大项数limit step
local局部作用域执行子遍历,类似于局部子查询local step
not对子遍历匹配结果取反(必须不满足条件)not step
optional尝试执行子遍历;若有输出则返回,否则保留输入元素optional step
or确保至少有一个子遍历返回有效结果or step
order按指定字段或比较规则对元素进行排序order step
path收集并返回当前遍历所经过的历史完整路径path step
project将多个调制结果投影为结构化 Map 映射project step
properties获取指定键的 Property 实体对象properties step
range基于下标范围进行切片截取(起始索引至结束索引)range step
repeat循环执行指定的子遍历步骤repeat step
sample从当前流中进行随机抽样sample step
select从历史路径或映射投影中提取特定标签的变量值select step
mergeV按属性匹配顶点,存在则更新,不存在则创建(标准 Upsert 步骤)mergeV step
mergeE按属性与端点匹配边,存在则更新,不存在则创建(标准 Upsert 步骤)mergeE step
tree将遍历路径汇总聚合成树形层级结构tree step
unfold将集合或数组结构展开为连续的流元素unfold step
union并行执行多个子遍历并合并其输出结果union step
V顶点检索与端点跳转基础步骤:V、E、out、in、both、outE、inE 等vertex steps
where使用表达式或谓词(eq、neq、gt 等)进行条件筛选过滤where step

表格阅读