图应用开发
语法介绍
语法编写规范
语法示例
CREATE GRAPH [ IF NOT EXISTS ] <name>
[ PARTITION_NUM = <integer> ]
[ COMMENT = <string> ]
[ CHARSET = {UTF8 | UTF8MB4 | GBK | GB2312 | GB18030} ];
详细说明
大写单词
: 关键字。例如:CREATE
,GRAPH
。< >
:语法片段或子句。例如:<name>
,<integer>
。[ ]
:方括号内的内容是可选的。例如:[IF NOT EXISTS]
表示该片段可以省略。[ ]...
:方括号后跟省略号表示该片段可以出现零次或多次。|
:选择符,表示需要从提供的选项中选择一个。例如:{UTF8 | UTF8MB4 | GBK | GB2312 | GB18030}
表示需要从这几种字符集中选择一个。
语法介绍
数据类型
ArcGraph 图数据库中支持的属性数据类型如下。
英文 | 中文 | 说明 |
---|---|---|
Byte | 字节类型 | 用于表示二进制数据或存储小的整数值,包括 BYTE。 |
Integer | 整数 | 用于存储整数数据,包括 INT32、INT64 和 BIGINT。 |
Float | 单精度浮点数 | 用于存储小数数据,包括 FLOAT。它遵循 IEEE-754 浮点数标准,提供约 7 位十进制有效数字的精度。 |
Double | 双精度浮点数 | 用于存储非常大或非常小的浮点数值的数据类型,包括 DOUBLE。它遵循 IEEE-754 浮点数标准,提供约 16 位十进制有效数字的精度。 |
Boolean | 布尔值 | 用于存储布尔值(True/False),包括 BOOL 或 BOOLEAN。 |
Timestamp | 时间戳 | 用于存储日期和时间数据,包括 TIMESTAMP。 |
Date | 日期 | 用于存储日期数据,包括 DATE。 |
Time | 时间 | 用于存储时间数据,包括 TIME。 |
DateTime | 日期时间 | 用于存储日期和时间数据,包括 DATETIME。 |
JSON | - | 用于存储结构化的复杂数据,包括 JSON。 说明: 当对该数据类型的属性创建索引时,应使用 ->> 操作符明确指定 JSON 路径,例如 idx_person(name->>'$.last_name') 。 |
String | 字符串 | 用于存储文本数据,包括 String。 |
UUID | 通用唯一标识符 | 是一个 128 位长的标识符,通常用于在分布式系统中唯一标识实体,包括 UUID。 说明: 不支持对该数据类型的属性创建索引。 |
Array | 数组数据类型 | 数组数据类型是一种用于存储和操作一组有序元素的数据结构。在图数据库中,数组数据类型可以作为点或边的属性,以存储相同类型的多个值或其他需要按顺序存储的数据。语法定义如下:
不支持对该数据类型的属性创建索引。 |
BigDecimal | 高精度小数类型 | 用于存储和处理高精度的小数数值,遵循 BIGDECIMAL(prec,scale) 规范。其中,prec 表示总位数精度,取值范围是[10, 50];scale 表示小数部分的刻度,取值范围是[0, 30]。默认精度设置为 BIGDECIMAL(35, 18) 。说明: - 允许用户自定义精度范围,当数值超出指定的范围时系统会截断多余部分并以 0 填充,对于超出范围的第一位,系统将根据四舍五入原则进行处理,确保数值在指定精度内以精确格式展示。 - 该类型支持从 String 到 BigDecimal 的隐式类型转换,便于在插入语句中直接使用字符串表示小数,如 INSERT (:sample1 {id: 1, val: '124567890.098765438978967987'}); 。-不支持对该数据类型的属性创建索引。 -仅 ArcGraph >= v2.1.1 版本支持此类型。 |
ST_GEOMETRY | 地理空间类型 | 用于存储地理空间数据的数据类型。 说明: 仅 ArcGraph >= v2.1.2 版本支持此类型。 |
ArcGraph 图数据库中支持的非属性数据类型如下。
英文 | 中文 | 说明 |
---|---|---|
List | 列表数据类型 | 用于存储一组有序的元素,元素可以是任意数据类型。在 ArcGraph 图数据库中,列表数据类型由“[]”符号和多个元素组成,各个元素间使用英文逗号(,)分隔。请注意,列表数据类型不可以作为点或边的属性。 |
模式
ArcGraph 图数据库对 Cypher 查询语言中的模式(Patterns)提供了广泛的支持,以下将介绍 ArcGraph 图数据库中常用的几种模式。
分类 | 说明 |
---|---|
Nodes | 表示图数据库中的点,在 ArcGraph 图数据库中用 Vertex(点)表示。 |
Related nodes | 表示多个点以及它们之间的关系。如 (a)-[]->(b) 。 |
Specifiying properties | 表示在点或边上使用属性以进行精确匹配或查询。 |
Relationships | 表示图数据库中各点间的关联关系,在 ArcGraph 图数据库中用 Edge(边)表示。 |
Variable-length patterns | 表示允许使用可变长度的模式来匹配具有特定长度的路径。 |
Path variable | 表示允许将匹配到的整个路径作为一个整体进行操作或返回。 |
-
描述点(Vertex)
表达方式 说明 ()
匿名的点 (John)
指定变量名的点 (:person)
指定点类型的点 (John:person)
指定变量名和点类型的点 (John:person {name: "John"})
有变量名、点类型和属性值的点 (John:person {name: "John", age: 30})
有变量名、点类型和联合属性值的点 -
描述边(Edge)
使用
一
对短横线(即“--”
)表示一个无方向边,有方向的边则在其中一端加上一个箭头(即“<--”
或“-->”
)。方括号表达式“[…]”
可用于添加详情,表达式中可以包含变量、属性、类型等信息。边的常见表达方式如下:表达方式 说明 --
无向边 -->
正向边 <--
反向边 -[r]->
指定变量名的正向边 -[:like]->
指定边类型的正向边 -[r:like]->
带有变量名和边类型的正向边 -[r:like {name: "喜欢"}]->
带有变量名、边类型、属性值的边
在 ArcGraph 图数据库中,使用类 Cypher 代码将两个简单的模式(Pattern)连接在一起,示例如下:
(:person) -[:like]-> (:person)
子句
ArcGraph 图数据库支持 Cypher 查询语言中的多种子句(Clauses),这些子句为数据查询提供了强大的功能。以下将介绍 ArcGraph 图数据库中常用的几种子句,关于子句的详细介绍请参见 子句 章节。
子句 | 说明 |
---|---|
MATCH | 用于根据指定的模式(pattern)查询图。详情请参见 基本查询 章节。 |
OPTIONAL MATCH | 与 MATCH 子句类似,但不同之处在于,当查询结果为空时,该子句会对缺失部分返回 null 值。 |
RETURN | 用于指定查询结果的返回格式。详情请参见 RETURN 章节。 |
WITH | 用于在查询过程中将中间结果传递给后续的查询子句,即通过 WITH 子句,将一个查询的输出直接作为下一个查询的输入。详情请参见 WITH 章节。 |
UNWIND | 用于将列表元素展开为独立的记录序列。详情请参见 UNWIND 章节。 |
WHERE | 用于指定过滤条件,可以与 MATCH 、OPTIONAL MATCH 或 WITH 子句组合使用。详情请参见 WHERE 章节。 |
ORDER BY | 用于对(中间)结果进行排序,可以与 RETURN 或 WITH 子句组合使用。详情请参见 ORDER BY 章节。 |
SKIP | 用于跳过查询结果中的前 n 个记录。详情请参见 SKIP 章节。 |
LIMIT | 用于限制查询结果返回的个数。详情请参见 LIMIT 章节。 |
CREATE | 用于在图数据库中创建点、边等。 |
DELETE | 用于删除指定的点、边等。 |
SET | 用于修改已存在的点、边的属性值或类型。 |
CALL[...YIELD] | 用于调用图数据库内置过程。 |
UNION | 用于合并多个查询的结果。详情请参见 UNION 章节。 |
表达式
ArcGraph 图数据库支持 Cypher 查询语言中的多种表达式(Expressions),以下将介绍 ArcGraph 图数据库中常用的几种表达式,关于表达式的详细介绍请参见 表达式 章节。
表达式 | 说明 |
---|---|
常量 | 常量表示固定的数值或文本。例如,数字 42 、字符串 "hello" 、布尔值 true 或 false 等。 |
变量 | 变量是一种用于指代图数据库中点、边及其属性值的标识符。例如,n:person 中,n 是一个变量,它指代了一个 person 类型。 |
属性 | 属性是对象的一部分,用于描述对象的特性,例如,一个 Person 对象可能有一个 name 属性。 |
函数调用 | 函数调用是执行特定函数并向其传递必要参数以执行特定任务的过程。例如,sum(2, 3) 是一个函数调用,其中 sum 是一个函数,2 和 3 是参数。 |
聚合函数 | 聚合函数是用于对一组值做聚合运算的函数。例如,SUM() 、AVG() 、MAX() 、MIN() 和 COUNT() 。 |
计算表达式 | 计算表达式由数据和运算符组成,用于执行计算并返回结果,例如,2 + 3 * 4 是一个计算表达式。 |
谓词表达式 | 谓词表达式返回一个布尔值(true 或 false ),通常用于条件判断。例如,x > 10 是一个谓词表达式。 |
操作符
ArcGraph 图数据库支持 Cypher 查询语言中的多种操作符,以满足用户对于数据查询、计算、比较和逻辑判断的需求。以下将介绍 ArcGraph 图数据库中常用的几种操作符。
操作符 | 描述 |
---|---|
通用操作符 | 用于执行基本的查询操作,如 DISTINCT (用于返回唯一不同的值)、. (用于属性访问)。 |
数学运算操作符 | 用于在 Cypher 查询中执行基本的数学运算,如 + (加法)、- (减法)、* (乘法)、/ (除法)和 % (取模)。 |
比较运算操作符 | 用于在 Cypher 查询中比较两个值,如 = (等于)、<> (不等于)、!= (不等于)、< (小于)、> (大于)、<= (小于等于)和 >= (大于等于)。 |
字符串比较操作符 | 用于处理字符串类型的比较操作,如 STARTS WITH (用于检查字符串是否以指定子串开始)、ENDS WITH (用于检查字符串是否以指定子串结束)或 CONTAINS (用于检查字符串是否包含指定子串)。 |
布尔运算操作符 | 用于在 Cypher 查询中执行逻辑运算,如 AND (逻辑与)、OR (逻辑或)和 NOT (逻辑非)。 |
字符串操作符 | 主要用于处理字符串类型的值,如 + (用于字符串连接操作)和 IN (用于检查一个值是否存在于一个字符串列表中)。 |
内置函数
ArcGraph 图数据库支持丰富的内置函数,这些函数为用户提供了强大的数据处理能力。以下将介绍 ArcGraph 图数据库中常用的几种内置函数,关于内置函数的详细介绍请参见 内置函数 章节。
函数类型 | 说明 |
---|---|
字符串函数 | 对字符串进行操作的函数,如 concat() 、concat_ws() 等。详情请参见 字符串函数 章节。 |
数学函数 | 包括常见的数学运算,如 abs() 、cos() 等。详情请参见 数学函数 章节。 |
日期时间函数 | 提供关于时间和日期处理的函数,如 timestamp() 、date() 等,详情请参见 日期时间函数 章节。 |
工具函数 | 提供一些通用函数,如 randomUUID() 等,详情请参见 工具函数 章节。 |
聚合函数 | 用于对一组值进行计算,并返回单个值作为结果的函数,如 avg() 、sum() 等,详情请参见 聚合函数 章节。 |
Graph 函数 | 用于图数据处理的函数,如 id() 、pk() 等,详情请参见 Graph 函数 章节。 |
转换函数 | 用户数据类型之间相互转换的函数,如 toBoolean() 、toFloat() 等,详情请参见 转换函数 章节。 |
对数函数 | 用于对数计算的函数,如 log() 、log10() 等,详情请参见 对数函数 章节。 |
Partial 函数 | 用于数据脱敏的函数,详情请参见 Partial 函数 章节。 |
路径函数 | 用于查询和分析路径的函数,如 startNode() 、endNode() 等,详情请参见 路径函数 章节。 |
列表与数组函数 | 用于对列表和数组进行操作的函数,如 size() 、head() 等,详情请参见 列表/数组函数 章节。 |
条件表达式函数 | 主要用于根据条件判断返回不同的结果,详情请参见 条件表达式函数 章节。 |
字符集和排序规则
字符集和排序规则是数据库中字符数据处理的两个重要概念。了解字符集和排序规则对于正确处理数据库中的字符数据至关重要。
- 字符集是计算机系统中用于编码字符的集合,不同的字符集可能包含不同的字符和符号,并且使用不同的编码规则。在图数据库中字符集用于存储和表示文本数据的一组字符编码规则。ArcGraph 系统默认编码方式为 UTF8mb4。
- 排序规则是字符集中用于比较每个字符的一套规则,它决定了字符在数据库查询中的比较和排序行为。每种字符集可对应一到多个排序规则,每种排序规则对应一种字符集。在涉及字符串比较或排序的操作时,系统会调用对应指定的排序规则算法来确保正确的处理结果。
支持类型
ArcGraph 支持的字符集及排序规则如下:
字符集
类型 | 说明 |
---|---|
UTF-8 | UTF-8(Unicode Transformation Format-8 bits)是 UNICODE 的变长编码方式,用于表示 Unicode 字符集中的字符。UTF-8 以 8 位字节为单元对 Unicode 字符集进行编码,不使用大尾序和小尾序形式,每个使用 UTF-8 存储的字符,除了第一个字节外,其余字 节的前两个比特都是以"10"开始,使文字处理器能快速找出每个字符的开始位置。为了与 ASCII 码兼容,UTF-8 使用可变长度字节来存储 Unicode,用 1~4 个字节表示一个 Unicode 字符编码,可以表示 Unicode 的所有字符。 |
GBK/GB18030 | GB18030(全称为:国家标准GB18030-2005《信息技术中文编码字符集》)是中华人民共和国当前最新的内码字集,兼容 GB2312 和 GBK,支持 Unicode 的全部汉字,收录 70244 个汉字。采用多字节编码,支持少数民族文字和日韩汉字,最多可定义 161 万个字符。其字节结构包括单字节、双字节和四字节。 |
排序规则
排序规则 | 排序结果 | 对应字符集 |
---|---|---|
gb18030_bin | gb18030 二进制编码排序 | gb18030 |
gb18030_chinese_ci | 按拼音排序 | gb18030 |
gbk_bin | gbk 二进制编码排序 | gbk |
gbk_chinese_ci | 按拼音排序 | gbk |
utf8_bin | utf8 二进制编码排序 | utf8 |
utf8_pinyin | utf8编码拼音排序 | utf8 |
设置字符集/排序规则
ArcGraph 仅支持在图中设置字符集和对应的排序规则,且设置后不支持修改。
语法详情请参见 创建图 章节。
说明:
- 设置的字符集和排序规则需一一对应,例如字符集设置为
GBK
,则排序规则不可设置为UTF8_BIN
。对应情况请参见 支持类型 章节中的“排序规则”表。 - 设置的字符集和排序规则大小写不敏感。
示例
创建图 graph
并设置字符集为 GBK
,排序规则为 GBK_BIN
,命令如下:
CREATE GRAPH IF NOT EXISTS graph
CHARSET = GBK
COLLATION = GBK_BIN
COMMENT = '新图';
DDL 与 Online DDL
在大多数数据库系统中,执行 DDL 操作(如添加表结构、修改列属性等)时,为了维护数据的一致性和完整性,系统通常会暂时禁止或限制并发的 DML 操作(如数据的增、删、改、查)。对于包含大量数据的表而言,这种 DDL 操作可能会导致 DML 操作长时间被阻塞,从而影响业务流畅性和客户体验。为了解决这一问题,ArcGraph 图数据库自 v2.1.2 版本起支持 Online DDL(即在线数据定义语言)操作,有效降低了 DDL 操作对 DML 操作的影响。
Online DDL
Online DDL 操作通过对 DDL 执行流程的深入优化和改进,实现了在操作执行期间几乎不阻塞或仅在极短时间内阻塞 DML 操作,从而保障了 ArcGraph 图数据库的高可用性和业务的连续无中断运行。
优势与特点
- 提高可用性
在调整图数据结构时,Online DDL 允许 ArcGraph 图数据库持续处理查询和更新请求,从而大幅减少了因 DDL 操作导致的系统停机时间,确保了业务的连续运行。 - 支持复杂操作
Online DDL 操作(如添加索引、修改属性列等)可以在不影响业务正常运行的前提下,在后台静默执行,极大地增强了数据库维护的灵活性与效率。 - 优化用户体验
用户在 ArcGraph 图数据库维护期间,仍能正常使用应用程序,提高了用户体验。
支持的操作
- 清空/删除图:自 ArcGraph 图数据库 v2.1.2 版本起,将
TRUNCATE GRAPH
和DROP GRAPH
命令由 DDL 操作升级为 Online DDL 操作,详情请参见 删除图 章节。 - 删除点/边类型:自 ArcGraph 图数据库 v2.1.2 版本起,将
Drop Vertex
和Drop Edge
命令由 DDL 操作升级为 Online DDL 操作,详情请参见 删除点类型/删除边类型 章节。 - 删除索引:自 ArcGraph 图数据库 v2.1.2 版本起,将
Drop Index
命令由 DDL 操作升级为 Online DDL 操作,详情请参见 删除索引 章节。 - 创建索引:自 ArcGraph 图数据库 v2.1.2 版本起,支持通过 Online DDL 操作执行
Create Index
命令创建索引,详情请参见 创建索引 章节。 - 修改点/边类型:自 ArcGraph 图数据库 v2.1.2 版本起,支持通过 Online DDL 操作修改除属性名称外的其他点/边类型属性,详情请参见 修改点类型/修改边类型 章节。
Schema GC 机制
在 Online DDL 执行过程中,ArcGraph 图数据库采用 Schema GC(Schema Garbage Collection)机制,尽可能的减少 DDL 语句对锁等系统资源的占用。该机制不仅实时清除内存中冗余的缓存数据,实现高效的逻辑删除,还针对磁盘上的物理数据实施延迟清理策略,选择合适时机再进行处理,从而确保数据管理的灵活性与系统资源的优化利用。
Schema GC 通过版本控制来确保数据的一致性和可追踪性。每当执行受 Schema GC 支持的操作时,系统都会相应的增加 Schema 的版本号,并记录操作时间和状态变化。在查询操作中,系统会根据当前的 Schema 版本和状态,对存储在键值存储(KV)中的数据进行实时转换,合并内存中的最新数据后返回至 ArcGraph 图数据库的客户端,以确保查询结果的准确性和时效性。
Schema GC 执行策略
在执行 Schema GC 操作时,系统遵循以下检查策略:
- 检查图是否被删除。
- 检查图中点和边类型的 Schema 版本数量。
- 检查图中是否存在被删除的索引。
- 检查图中边类型上是否存在被删除的关联点类型。
- 检查被删除的点和边类型个数。
支持的操作
Schema GC 支持的操作与 Online DDL相同,详情请参见 支持的操作 章节。
Schema GC 参数介绍
Schema GC 的行为可以通过相关参数进行配置,以下是这些参数及其默认值的详细说明:
参数 | 说明 | 默认值 | 单位 |
---|---|---|---|
meta_schema_gc_interval | 设置 ArcGraph 图数据库定期检查是否需要执行 Schema GC 操作的周期。 | 43200 (即 12 小时) | 秒 |
meta_schema_grace_period | 设置图及其内部所有 Schema 修改后等待执行 Schema GC 操作的阈值。 | 3600 (即 1 小时) | 秒 |
meta_schema_version_gc_limit | 设置图内点/边类型 Schema 版本的最大阈值。超过该阈值时,系统将对该图进行 Schema GC 操作,即将存储在键值存储(KV)上的数据变更到最新的版本。 | 6 | 个 |
meta_dropped_schema_gc_limit | 设置图中被删除的点/边类型或关联点类型的最大阈值。超过该阈值时,系统将对该图进行 Schema GC 操作,即将存储在键值存储(KV)上的脏数据删除。 | 3 | 个 |
查看与修改配置
- 查看配置
使用SHOW CONFIGS LIKE '%schema%';
命令查看 Schema GC 相关配置,详情请参见 SHOW CONFIGS 章节。 - 修改配置
使用ALTER CONFIG
命令修改 Schema GC 相关配置,详情请参见 更改系统配置项 章节。
示例 1
查看 Schema GC 相关配置。命令如下:
SHOW CONFIGS LIKE '%schema%';
返回结果示例如下:
+-------------------------------+-------+--------------+-----------+----------------------------------------------------+
| config_name | value | modify_level | server_id | description |
+===============================+=======+==============+===========+====================================================+
| meta_dropped_schema_gc_limit | 3 | DYNAMIC | 1 | meta dropped schema GC policy |
+-------------------------------+-------+--------------+-----------+----------------------------------------------------+
| meta_schema_gc_interval | 43200 | DYNAMIC | 1 | meta schema GC interval |
+-------------------------------+-------+--------------+-----------+----------------------------------------------------+
| meta_schema_grace_period | 3600 | DYNAMIC | 1 | meta schema grace period before applying gc policy |
+-------------------------------+-------+--------------+-----------+----------------------------------------------------+
| meta_schema_version_gc_limit | 6 | DYNAMIC | 1 | meta schema data version GC policy |
+-------------------------------+-------+--------------+-----------+----------------------------------------------------+
示例 2
修改 Schema GC 参数 meta_schema_gc_interval
配置。命令如下:
ALTER CONFIG meta_schema_gc_interval = 40000;