全部产品

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、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。

  • 数据导入拆分为按行的一组单条事务,事务(各数据行)之间无关联。

对于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()

-

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