全部产品

GDB Cypher实现的兼容性

更新时间:2020-09-30 10:22:14

协议版本

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

saveAll (Iterable entities);

Optional

findById(ID id);

boolean existsById(ID id);

Iterable

findAll();

Iterable

findAllById(Iterable ids);

long count();

void deleteById(ID id);

void delete(T entity);

void deleteAll(Iterable<? extends T> entities);

void deleteAll();

Iterable

findAll(Sort sort);

Page

findAll(Pageable pageable);

S extends T> S save(S s, int depth);

<S extends T> Iterable<S> save(Iterable<S> entities, int depth);

Optional

findById(ID id, int depth);

Iterable

findAll(int depth);

Iterable

findAll(Sort sort, int depth);

Iterable

findAllById(Iterable ids, int depth);

Iterable

findAllById(Iterable ids, Sort sort);

Iterable

findAllById(Iterable ids, Sort sort, int depth);

Page

findAll(Pageable pageable, int depth);

可视化

目前提供开源客户端使用,后续会集成在GDB DMS系统中。