本文介绍图数据库GDB Cypher实现的兼容性。
协议版本
GDB目前支持bolt-v3协议, 建议您使用 neo4j-java-driver 4.0.0
版本,使用时除了将GDB域名配置成 bolt://gdb-endpoint:gdb-port
之外,其他与原生Cypher使用方式保持一致。
数据类型
GDB Cypher支持整数、浮点数、字符串、布尔值等基本数据类型和空间坐标Point类型,整体如下:
分类 | 类型 | 支持情况 |
---|---|---|
Property types | Number / String / Boolean / Spatial / Temporal | 不支持Temporal |
Structural types | Nodes / Relationships / Paths | 支持 |
Composite types | Lists / Maps | 支持 |
不支持或不完全兼容的类型如下:
不支持时间(temporal)类型。
GDB支持空间坐标(Point)类型,但是目前不支持使用Point类型作为点和边的属性。
List类型。
List类型只能用作点的属性值,不支持作为边属性。在使用List作为属性时,GDB内部会把List当作Set来处理,即List中多个重复的值会只会被存储一次,支持用户按List中某一元素作为条件进行索引查找。例如:
neo4j> create (n:X {p: [1,2,1]}) return n;
+------------------+
| n |
+------------------+
| (:X {p: [1, 2]}) |
+------------------+
子句
操作 | 支持情况 | 备注 |
---|---|---|
MATCH | 支持 | 无 |
OPTIONAL MATCH | 支持 | 无 |
RETURN | 支持 | 无 |
WITH | 支持 | 无 |
UNWIND | 支持 | 无 |
WHERE | 支持 | 无 |
ORDER BY | 支持 | 无 |
SKIP | 支持 | 无 |
LIMIT | 支持 | 无 |
CREATE | 支持 | 无 |
DELETE | 支持 | 无 |
SET | 支持 | GDB不支持Label修改以及多Label。 说明
|
REMOVE | 支持 | 属性操作,不支持删除Label。 |
FOREACH | 支持 | 无 |
MERGE | 支持 | 无 |
CALL {subquery} | 不支持 | Cypher 4.0新引入, GDB不支持。 |
CALL procedure | 不支持 | 取决于procedure的实现情况 |
UNION | 支持 | 无 |
USE | 不支持 | Cypher 4.0新引入多图,GDB不支持。 |
LOAD CSV | 不支持 | GDB支持基于OSS、DataWorks等导入。 |
内置函数
GDB对Cypher内置函数的支持如下:
函数 | 分类 | 支持情况 |
---|---|---|
all() | 谓词 | 不支持 |
any() | 谓词 | 不支持 |
exists() | 谓词 | 是 |
single() | 谓词 | 不支持 |
none() | 谓词 | 是 |
coalesce() | 标量 | 是 |
endNode() | 标量 | 是 |
head() | 标量 | 是 |
id() | 标量 | 是 |
last() | 标量 | 是 |
length() | 标量 | 是 |
randomUUID() | 标量 | 不支持 |
properties() | 标量 | 是 |
size() | 标量 | 是 |
startNode() | 标量 | 是 |
timestamp() | 标量 | 否 |
toBoolean() | 标量 | 是 |
toFloat() | 标量 | 是 |
toInteger() | 标量 | 是 |
type() | 标量 | 是 |
avg() | 聚合 | 是 |
collect() | 聚合 | 是 |
count() | 聚合 | 是 |
max() | 聚合 | 部分支持 |
min() | 聚合 | 部分支持 |
percentileCont() | 聚合 | 部分支持 |
percentileDisc() | 聚合 | 部分支持 |
stDev() | 聚合 | 不支持 |
stDevP() | 聚合 | 不支持 |
sum() | 聚合 | 支持 |
keys() | 列表 | 支持 |
labels() | 列表 | 支持 |
nodes() | 列表 | 支持 |
range() | 列表 | 支持 |
reduce() | 列表 | 支持 |
relationships() | 列表 | 支持 |
reverse() | 列表 | 支持 |
tail() | 列表 | 支持 |
left() | 字符串 | 不支持 |
lTrim() | 字符串 | 不支持 |
reverse() | 字符串 | 支持 |
right() | 字符串 | 不支持 |
rTrim() | 字符串 | 不支持 |
split() | 字符串 | 支持 |
subString() | 字符串 | 支持 |
toLower() | 字符串 | 支持 |
toString() | 字符串 | 支持 |
toUpper() | 字符串 | 支持 |
trim() | 字符串 | 支持 |
abs() | 数值 | 支持 |
ceil() | 数值 | 不支持 |
floor() | 数值 | 不支持 |
rand() | 数值 | 不支持 |
round() | 数值 | 支持 |
sign() | 数值 | 不支持 |
e() | 对数函数 | 不支持 |
exp() | 对数函数 | 不支持 |
log() | 对数函数 | 不支持 |
log10() | 对数函数 | 不支持 |
sqrt() | 对数函数 | 支持 |
acos() | 三角函数 | 不支持 |
atan() | 三角函数 | 不支持 |
atan2() | 三角函数 | 不支持 |
cos() | 三角函数 | 不支持 |
cot() | 三角函数 | 不支持 |
degrees() | 三角函数 | 不支持 |
haversin() | 三角函数 | 不支持 |
pi() | 三角函数 | 不支持 |
radians() | 三角函数 | 不支持 |
sin() | 三角函数 | 不支持 |
tan() | 三角函数 | 不支持 |
point() | 空间 | 支持 |
distance() | 空间 | 支持 |
max()/min()/percentileCount()/percentileDisc()四个函数只支持输入参数为相同类型的List,不支持混合类型,也不支持包含NULL的List。
GDB不支持时间类型,因此时间相关的函数没有列在表里。
不完全兼容的用法
LOAD CSV。GDB提供其他数据导入方式,因而不支持LOAD CSV子句以及相关的
linenumber()
和file()
函数。索引机制。GDB会自动为所有属性建立自动索引,用户也可通过接口进行复合索引以及点中心索引的设置。不支持通过Cypher方式建立索引。
不支持Bookmark。
GDB不支持用户自定义函数(User-defined Function)和APOC。
driver。用户可使用包括Java、Python、Go、Javascript、C#等语言的官方driver来访问GDB,也可以通过Spring方式来接入GDB。
Cypher中其他跟管理相关功能都使用和Gremlin接入兼容的方式,包括创建和删除数据库、索引管理、属性约束(constraints)、访问控制等。
事务支持
目前支持Simple和Async Session模式的事务,暂不支持Reactive Session。
Session模式 | Atomic Transaction | Transaction Function |
---|---|---|
Simple Sessions | 支持 | 支持 |
Async Sessions | 支持 | 支持 |
Reactive Sessions | 不支持 | 不支持 |
Spring支持
GDB支持通过spring方式访问,目前spring的访问接口支持程度如下:
Spring-data-neo4j 默认函数 | 支持情况 |
---|---|
S save(S entity); | 支持 |
Iterable | 支持 |
Optional | 支持 |
boolean existsById(ID id); | 支持 |
Iterable | 支持 |
Iterable | 支持 |
long count(); | 支持 |
void deleteById(ID id); | 支持 |
void delete(T entity); | 支持 |
void deleteAll(Iterable<? extends T> entities); | 支持 |
void deleteAll(); | 支持 |
Iterable | 支持 |
Page | 支持 |
S extends T> S save(S s, int depth); | 支持 |
<S extends T> Iterable<S> save(Iterable<S> entities, int depth); | 支持 |
Optional | 支持 |
Iterable | 支持 |
Iterable | 支持 |
Iterable | 支持 |
Iterable | 支持 |
Iterable | 支持 |
Page | 支持 |
可视化
目前提供开源客户端使用,后续会集成在GDB DMS系统中。