全部产品

GDB Gremlin实现的兼容性

更新时间:2020-10-15 11:08

GDB在对于Gremlin查询语言的实现细节上和TinkerPop之间有一些差异。

GDB在对于Gremlin查询语言的实现细节上和TinkerPop之间有一些差异。

版本兼容

  • GDB Gremlin兼容TinkerPop Gremlin 3.3.x以及3.4.x版本
  • 与GDB服务端进行交互时,使用GraphSON格式。GraphSON是Gremlin标准格式,使用JSON格式表示点、边和属性

DSL使用限制

在DSL的使用规则上,和TinkerPop有一些差异:

  • 所有的DSL必须以内置的变量g开头,该变量等同于TinkerPop中的Graph.traversal()
  • 不支持对于查询策略的控制,所有查询优化由GDB内置自动执行
  • 点和边的ID为字符串类型,可以由用户指定。如果用户没有指定,则自动生成UUID作为点或者边的ID。
  • GDB的属性图模型中,目前支持属性类型: Single、Set两种模式。也就是TinkerPop中的org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality.single; org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality.set
  • GDB的属性值的类型只支持简单类型,包括数字、字符串和布尔型,对应到Java编程语言中,就是byte、char、short、int、long、float、double、boolean和String,不支持日期等复杂类型

Groovy限制

不同于TinkerPop与Groovy之间的深度结合,GDB Gremlin并不支持Groovy语言的相关特性,包括:

  • Groovy风格的Lambda表达式和内嵌函数调用,例如map.findAll{it.value>3}
  • 数学表达式,例如1+1
  • 系统调用,例如System.currentTimeMillis()

事务的支持

GDB Gremlin默认支持事务

  • 不支持ThreadedTransaction(也就是跨线程,由用户自己控制开始和提交的方式),而是采用内置的sesionless方式的事务。一个DSL内部所有的操作认为在一个事务内部
  • 如果DSL内部含有更新类型的step(Mutation类别),那么就认为是一个读写事务,否则认为是一个只读事务
  • 一个DSL从开始的时候,自动开启一个事务,在结束的时候,按运行情况自动提交/回滚
  • 事务隔离的级别为Read-Committed
  • 数据导入拆分为按行的一组单条事务,事务(各数据行)之间无关联

GDB对于Gremlin各Step的支持列表

下表详细描述了GDB对Gremlin的各个Step接口的具体支持程度。其中主要不支持的部分主要为:

  • 用到了GraphComputer类的OLAP接口
  • Explain和Profiling类型
  • 其他非增删查改类型的辅助接口
序号 Step 支持 备注
1 addE(String)
2 addE(Traversal<?, String>)
3 addV()
4 addV(String)
5 addV(Traversal<?, String>)
6 aggregate(String)
7 and(Traversal<?, ?>…)
8 as(String, String…)
10 barrier()
11 barrier(Consumer>)
12 barrier(int)
13 both(String…)
14 bothE(String…)
15 bothV()
16 branch(Function, M>)
17 branch(Traversal<?, M>)
18 by()
19 by(Comparator)
20 by(Function, Comparator)
21 by(Function)
22 by(Order)
23 by(String)
24 by(String, Comparator)
25 by(T)
26 by(Traversal<?, ?>)
27 by(Traversal<?, ?>, Comparator)
28 cap(String, String…)
29 choose(Function)
30 choose(Predicate, Traversal<?, E2>)
31 choose(Predicate, Traversal<?, E2>, Traversal<?, E2>)
32 choose(Traversal<?, ?>, Traversal<?, E2>)
33 choose(Traversal<?, ?>, Traversal<?, E2>, Traversal<?, E2>)
34 choose(Traversal<?, M>)
35 coalesce(Traversal<?, E2>…)
36 coin(double)
37 connectedComponent() 不支持GraphComputer
38 constant(E2)
39 count()
40 count(Scope)
41 cyclicPath()
42 dedup(Scope, String…)
43 dedup(String…)
44 drop()
45 E(Object…)
46 emit()
47 emit(Predicate>)
48 emit(Traversal<?, ?>)
49 filter(Predicate>)
50 filter(Traversal<?, ?>)
51 flatMap(Function, Iterator>)
52 flatMap(Traversal<?, E2>)
53 fold()
54 fold(E2, BiFunction)
55 from(String)
56 from(Traversal<?, Vertex>)
57 from(Vertex)
58 group()
59 group(String)
60 groupCount()
61 groupCount(String)
62 has(String)
63 has(String, Object)
64 has(String, P<?>)
65 has(String, String, Object)
66 has(String, String, P<?>)
67 has(String, Traversal<?, ?>)
68 has(T, Object)
69 has(T, P<?>)
70 has(T, Traversal<?, ?>)
71 hasId(Object, Object…)
72 hasId(P)
73 hasKey(P)
74 hasKey(String, String…)
75 hasLabel(P)
76 hasLabel(String, String…)
77 hasNot(String)
78 hasValue(Object, Object…)
79 hasValue(P)
80 id()
81 identity()
82 in(String…)
83 index()
84 inE(String…)
85 inject(E…)
86 inV()
87 io(String)
88 is(Object)
89 is(P)
90 iterate()
91 key()
92 label()
93 limit(long)
94 limit(Scope, long)
95 local(Traversal<?, E2>)
96 loops()
97 loops(String)
98 map(Function, E2>)
99 map(Traversal<?, E2>)
100 match(Traversal<?, ?>…)
101 math(String)
102 max()
103 max(Scope)
104 mean()
105 mean(Scope)
106 min()
107 min(Scope)
108 not(Traversal<?, ?>)
109 option(M, Traversal<?, E2>)
110 option(Traversal<?, E2>)
111 optional(Traversal<?, E2>)
112 or(Traversal<?, ?>…)
113 order()
114 order(Scope)
115 otherV()
116 out(String…)
117 outE(String…)
118 outV()
119 pageRank() 不支持GraphComputer
120 pageRank(double) 不支持GraphComputer
121 path()
122 peerPressure() 不支持GraphComputer
123 profile()
124 profile(String)
125 program(VertexProgram<?>) 不支持GraphComputer
126 project(String, String…)
127 properties(String…)
128 property(Object, Object, Object…)
129 property(Cardinality, Object, Object, Object…) 部分 只支持Cardinality.single
130 propertyMap(String…)
131 range(long, long)
132 range(Scope, long, long)
133 read()
134 repeat(String, Traversal<?, E>)
135 repeat(Traversal<?, E>)
136 sack()
137 sack(BiFunction)
138 sample(int)
139 sample(Scope, int)
140 select(Column)
141 select(Pop, String)
142 select(Pop, String, String, String…)
143 select(Pop, Traversal)
144 select(String)
145 select(String, String, String…)
146 select(Traversal)
147 shortestPath() 不支持GraphComputer
148 sideEffect(Consumer>)
149 sideEffect(Traversal<?, ?>)
150 simplePath()
151 skip(long)
152 skip(Scope, long)
153 store(String)
154 subgraph(String)
155 sum()
156 sum(Scope)
157 tail()
158 tail(long)
159 tail(Scope)
160 tail(Scope, long)
161 timeLimit(long)
162 times(int)
163 to(Direction, String…)
164 to(String)
165 to(Traversal<?, Vertex>)
166 to(Vertex)
167 toE(Direction, String…)
168 toV(Direction)
169 tree()
170 tree(String)
171 tx()
172 unfold()
173 union(Traversal<?, E2>…)
174 until(Predicate>)
175 until(Traversal<?, ?>)
176 V(Object…)
177 value()
178 valueMap(boolean, String…)
179 valueMap(String…)
180 values(String…)
181 where(P)
182 where(String, P)
183 where(Traversal<?, ?>)
184 with(String)
185 with(String, Object)
186 withBulk(boolean)
187 withComputer()
188 withComputer(Class<? extends GraphComputer>)
189 withComputer(Computer)
190 withoutStrategies(Class<? extends TraversalStrategy>…)
191 withPath()
192 withRemote(Configuration)
193 withRemote(RemoteConnection)
194 withRemote(String)
195 withSack(A)
196 withSack(A, BinaryOperator)
197 withSack(A, UnaryOperator)
198 withSack(A, UnaryOperator<A>, BinaryOperator<A>)
199 withSack(Supplier<A>)
200 withSack(Supplier, BinaryOperator)
201 withSack(Supplier, UnaryOperator)
202 withSack(Supplier, UnaryOperator, BinaryOperator)
203 withSideEffect(String, A)
204 withSideEffect(String, A, BinaryOperator)
205 withSideEffect(String, Supplier)
206 withSideEffect(String, Supplier, BinaryOperator)
207 write()

GDB Gremlin支持的特性细节列表

以下是GDB Gremlin实现的功能列表,这个列表的内容与TinkerPop的Graph.features()返回的内容相同。

序号 分类 特性 支持
1 Graph Transactions TRUE
2 ThreadedTransactions FALSE
3 Computer FALSE
4 Persistence TRUE
5 ConcurrentAccess TRUE
6 Variable Variables TRUE
7 SerializableValues FALSE
8 UniformListValues FALSE
9 BooleanArrayValues FALSE
10 DoubleArrayValues FALSE
11 IntegerArrayValues FALSE
12 StringArrayValues FALSE
13 BooleanValues TRUE
14 ByteValues TRUE
15 DoubleValues TRUE
16 FloatValues TRUE
17 IntegerValues TRUE
18 LongValues TRUE
19 MapValues FALSE
20 MixedListValues FALSE
21 StringValues TRUE
22 ByteArrayValues FALSE
23 FloatArrayValues FALSE
24 LongArrayValues FALSE
25 Vertex MetaProperties FALSE
26 DuplicateMultiProperties FALSE
27 AddVertices TRUE
28 RemoveVertices TRUE
29 MultiProperties FALSE
30 UserSuppliedIds TRUE
31 AddProperty TRUE
32 RemoveProperty TRUE
33 NumericIds FALSE
34 StringIds TRUE
35 UuidIds FALSE
36 CustomIds FALSE
37 AnyIds FALSE
38 Vertex Property UserSuppliedIds FALSE
39 AddProperty TRUE
40 RemoveProperty TRUE
41 NumericIds FALSE
42 StringIds TRUE
43 UuidIds FALSE
44 CustomIds FALSE
45 AnyIds FALSE
46 Properties TRUE
47 SerializableValues FALSE
48 UniformListValues FALSE
49 BooleanArrayValues FALSE
50 DoubleArrayValues FALSE
51 IntegerArrayValues FALSE
52 StringArrayValues FALSE
53 BooleanValues TRUE
54 ByteValues TRUE
55 DoubleValues TRUE
56 FloatValues TRUE
57 IntegerValues TRUE
58 LongValues TRUE
59 MapValues FALSE
60 MixedListValues FALSE
61 StringValues TRUE
62 ByteArrayValues FALSE
63 FloatArrayValues FALSE
64 LongArrayValues FALSE
65 Edge AddEdges TRUE
66 RemoveEdges TRUE
67 UserSuppliedIds TRUE
68 AddProperty TRUE
69 RemoveProperty TRUE
70 NumericIds FALSE
71 StringIds TRUE
72 UuidIds FALSE
73 CustomIds FALSE
74 AnyIds FALSE
75 Edge Property Properties TRUE
76 SerializableValues FALSE
77 UniformListValues FALSE
78 BooleanArrayValues FALSE
79 DoubleArrayValues FALSE
80 IntegerArrayValues FALSE
81 StringArrayValues FALSE
82 BooleanValues TRUE
83 ByteValues TRUE
84 DoubleValues TRUE
85 FloatValues TRUE
86 IntegerValues TRUE
87 LongValues TRUE
88 MapValues FALSE
89 MixedListValues FALSE
90 StringValues TRUE
91 ByteArrayValues FALSE
92 FloatArrayValues FALSE
93 LongArrayValues FALSE