本文介紹圖數據庫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系統中。