图数据库 GDB Gremlin兼容性

By | 2021年4月22日

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

请关注公众号获取更多资料

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注