GDB在对于Gremlin查询语言的实现细节上和TinkerPop之间有一些差异。
GDB Gremlin兼容TinkerPop Gremlin 3.3.x以及3.4.x版本。与GDB服务端进行交互时,使用GraphSON格式。GraphSON是Gremlin标准格式,使用JSON格式表示点、边和属性。版本兼容
在DSL的使用规则上,和TinkerPop有一些差异: 所有的DSL必须以内置的变量g开头,该变量等同于TinkerPop中的 不支持对于查询策略的控制,所有查询优化由GDB内置自动执行。 点和边的ID为字符串类型,可以由用户指定。如果用户没有指定,则自动生成UUID作为点或者边的ID。 GDB的属性图模型中,目前支持属性类型: Single、Set两种模式。也就是TinkerPop中的 GDB的属性值的类型只支持简单类型,包括数字、字符串和布尔型,对应到Java编程语言中,就是byte、char、short、int、long、float、double、boolean和String,不支持日期等复杂类型。DSL使用限制
Graph.traversal()
。org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality.single; org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality.set
不同于TinkerPop与Groovy之间的深度结合,GDB Gremlin并不支持Groovy语言的相关特性,包括: Groovy风格的Lambda表达式和内嵌函数调用,例如 数学表达式,例如 系统调用,例如 GDB Gremlin默认支持事务。 不支持ThreadedTransaction(也就是跨线程,由用户自己控制开始和提交的方式),而是采用内置的sesionless方式的事务。一个DSL内部所有的操作认为在一个事务内部。 如果DSL内部含有更新类型的step(Mutation类别),那么就认为是一个读写事务,否则认为是一个只读事务。 一个DSL从开始的时候,自动开启一个事务,在结束的时候,按运行情况自动提交/回滚。 事务隔离的级别为Read-Committed。 数据导入拆分为按行的一组单条事务,事务(各数据行)之间无关联。 下表详细描述了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 是 – 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, 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实现的功能列表,这个列表的内容与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 FALSEGroovy限制
map.findAll{it.value>3}
。1+1
。System.currentTimeMillis()
。事务的支持
对于Gremlin各Step的支持列表
)
)
)
, Traversal<?, E2>)
, Traversal<?, E2>, Traversal<?, E2>)
)
)
)
)
)
Gremlin支持的特性细节列表