GDB Gremlin实现的兼容性
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模式的Property。也就是TinkerPop中的
org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality.single
- 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 |
是 | |
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 |
是 | |
31 | choose(Predicate |
是 | |
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 |
是 | |
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 |
是 | |
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 |
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论