GDB Cypher实现的兼容性

本文介绍图数据库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。

说明
  • 一个点/边的label一旦创建,无法修改,如果要想修改,只能删除点重建。

  • 多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

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系统中。