协议版本
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} | - | 4.0新引入, GDB不支持 |
CALL procedure | - | 取决于procedure的实现情况 |
UNION | ✔ | |
USE | - | 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() | 聚合 | 部分,见说明1 |
min() | 聚合 | 部分,见说明1 |
percentileCont() | 聚合 | 部分,见说明1 |
percentileDisc() | 聚合 | 部分,见说明1 |
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系统中。
在文档使用中是否遇到以下问题
更多建议
匿名提交