枫清·天枢多模态智能引擎(简称 ArcNeural)是以 Data-Centric AI 为核心理念构建的多模态智能引擎,支持图、向量、表格、时序、JSON 等多种数据模态的融合与处理。ArcNeural 将传统数据库的“存储&计算”模式升级为更先进的“记忆&推理”架构,可以为企业 AI 智能应用提供更为便捷的私有化记忆存储服务,以及更加强大且可解释的推理能力。ArcNeural 架构设计灵活,涵盖图数据 ArcGraph 和向量数据 ArcVector,并具备复杂计算与实时分析能力,满足企业在业务智能化方面的多样化需求。
本次发布的 V2.1.2 版本进行了重大升级,新增了多项功能,包括支持 Online DDL、增强并优化执行引擎、支持 Arrow 格式的计算结果(列式数据集)及 GQL 语法等。新版本旨在提升用户体验并为用户创造更多价值。接下来,我们将全面介绍 V2.1 版本的重要特性!
全新 Online DDL,支持无缝模式(Schema)演化
随着业务需求的不断快速变化,数据库模式的演化成为一个常见需求。传统的数据库模式变更通常需要停机维护,这对于需要持续运行的现代应用系统来说是不可接受的,因此 Online DDL 应运而生。而在图数据库领域,Online DDL 面临着独特的挑战:
- 图数据库的数据模型与传统关系型数据库有很大不同,它主要由点、边和属性组成,这使得模式变更的复杂性大大增加。
- 图数据库通常用于处理大规模、高度关联的数据,这进一步增加了在不影响性能和一致性的情况下进行模式变更的难度。
在 V2.1.2 版本中,基于 Schema 版本控制(SchemaVersion 和 DataVersion),命名空间(Namespace)和 Schema GC 等这些创新方法的综合应用,构建了一个全面、灵活且高效的 Online DDL 解决方案,很好地解决了图数据库在修改 Schema 过程中面临的各种技术挑战。它不仅支持无缝的 Schema 修改,还提供了强大的版本管理和兼容性保证,同时通过延迟更新和后台 Compact 机制保证性能的稳定。
Online DDL 支持的操作
- 清空/删除图:图数据库将
TRUNCATE GRAPH
和DROP GRAPH
命令由 DDL 操作升级为 Online DDL 操作。 - 删除点/边类型:图数据库将
Drop Vertex
和Drop Edge
命令由 DDL 操作升级为 Online DDL 操作。 - 删除索引:图数据库将
Drop Index
命令由 DDL 操作升级为 Online DDL 操作。 - 创建索引:图数据库将支持通过 Online DDL 操作执行
Create Index
命令创建索引。 - 修改点/边类型:图数据库将支持通过 Online DDL 操作修改除属性名称外的其他点/边类型属性。
支持兼容 Arrow 格式的计算结果(列存数据集)
自 v2.1.2 版本之前,ArcNeural 图数据库中间计算结果和查询返回结果都使用基于行存的数据集(DataSet)结构,DataSet 的结构形式如下:
结构体中的每一个 Value 都是 Enum 类型。以上的结构体存在如下问题:
- Enum 类型的内存占用是其中最大变体的内存占用,因此在很多情况下,存在内存浪费。
- 在列操作时,有大量的 reallocate。而我们在 materialize、projection 时,不可避免地需要列操作。而大量的 reallocate,会影响查询的效率。
随着 ArcNeural 处理数据量的增大,以上两个问题越来越成为影响 ArcNeural 性能的瓶颈,因此我们在本次迭代中,以 Arrow 格式为底层支撑,重构了流转结构体。采用 Arrow,带来了如下优势:
- 尽可能的节省内存:Arrow 具备紧凑的内存结构,使用 arrow-rs 在 1000 行以上数据时,内存就会比原有的更小。
- 使算子能够更高效快速地做数据处理,更适合现代硬件做优化: 连续的内存、相同的列数据类型,能够进行向量化运算。
- 与图计算的兼容性更好:Arrow 是目前数据分析领域的事实数据格式标准。我们图计算中也使用了 Arrow 的内存格式,因此存储引擎和计算引擎之间就没有了数据转换的开销。
在具体工作中,我们主要做了如下方面改进:
- 新增 PlDataset 结构体,结构体底层为 Arrow,作为新的数据流转结构体。
- 改造算子,表达式和存储接口,支持新的 PlDataset。新的 PlDataset 的结构形式如下:
支持 GQL 语法
随着图查询语言 GQL(Graph Query Language)于今年 4 月正式发布,成为 ISO/IEC 39075:2024 标准,预示着图数据库技术的标准化和广泛应用迈出了重要一步,同时也标志着图技术开启新纪元。ArcNeural V2.1.2 版本针对这一标准进行了重大升级,增强了对部分 GQL 查询语句的兼容性,提升了图数据库的查询和处理能力,尤其是在 Node Pattern(节点模式)、Edge Pattern(边模式)、Path Matching(路径匹配)、Group By 支持和 Select 查询方面的支持。以下是详细解析:
Node Pattern(节点模式)
ArcNeural V2.1.2 引入了对节点标签的灵活匹配和条件过滤功能,支持使用符号操作符(!
、%
、&
等)进行复杂的节点模式查询,极大提升了图数据的检索能力。
- 标签符号操作。
支持通过标签符号操作进行多种类型的节点匹配:
Match (n: %) RETURN n;
匹配图中所有类型的节点。
Match (n: !person) RETURN n;
匹配除
person
标签之外的所有节点类型。Match (n: person & human) RETURN n;
匹配同时具有
person
和human
标签的节点。(注意:仅支持有 schema 图结构)Match (n: person | !human) RETURN n;
匹配具有
person
标签或不具有human
标签的节点。Match (n: !%) RETURN n;
匹配不带任何标签的节点。
- 支持 WHERE 子句的元素模式。
节点模式还支持通过 WHERE 子句进行属性过滤:
Match (n:person WHERE n.id = 123) RETURN n;
匹配
id
为 123 的person
节点,使用WHERE
进行属性过滤。注意:
WHERE
子句和{}
直接属性匹配语法不能同时使用。
Edge Pattern(边模式)
ArcNeural V2.1.2 在边模式方面的增强,允许用户定义更加复杂的边查询规则,包括多跳数控制、无向边和简化的边模式表示,使得图数据的关系分析更加灵活。
- 与 Node Pattern 共享过滤机制。
边模式和节点模式共用过滤机制,可以在边查询中定义跳数范围:
Match (n)-[e]->{1, 8}(m) RETURN e;
查询从节点
n
到节点m
,跳数在 1 到 8 范围内的边。
- 支持有向边和无向边。
支持边的方向匹配,包括正向、反向和正反向通用的多种边模式:
-[]->
正向边。<-[]-
反向边。-[]-
双向边。
- 尚不支持无向边符号
~[]~
,但未来有望加入。
- 简化的 Edge Pattern 表示。
边查询支持不带
[]
的简化形式,适用于不需要显式指定边类型的查询:Match (n)<-(m) RETURN n, m;
查询具有反向关系的节点。
Match (n)->(m) RETURN n, m;
查询具有正向关系的节点。
Match (n)-(m) RETURN n, m;
查询具有关系的节点(方向不限)。
Path Matching(路径匹配)
支持通过路径匹配进行复杂的多跳路径查询,允许用户指定路径的跳数范围,以满足不同的关系分析需求。以下是路径匹配的具体功能:
- 指定跳数的路径匹配。
ArcNeural 支持通过量化器设置路径的跳数范围,用户可以灵活控制路径的匹配方式:
Match (n)-[e]->{2}(m) RETURN e;
查询两跳范围内的边。
Match (n)-[e]->{1, 4}(m) RETURN e;
查询 1 到 4 跳的边。
Match (n)-[e]->*(m) RETURN e;
查询 0 到无限跳的边。
Match (n)-[e]->+(m) RETURN e;
查询至少 1 跳的边。
Group By 的支持
ArcNeural V2.1.2 在 RETURN
子句中增加了对 GROUP BY
的直接支持,简化了聚合查询的语法,使得结果返回更加精确和高效:
MATCH (n)-[e]->(m) RETURN COUNT(e), n GROUP BY n;
此查询对节点 n
进行分组,并返回与之相关的边数量。
注意:当前版本不支持 HAVING
子句。
Select 查询支持
ArcNeural V2.1.2 新增对 SELECT
子句的支持,使用户可以通过 SQL 风格的查询进行数据检索和聚合操作。以下是示例:
<SELECT m, COUNT(m) AS count_m
FROM MATCH (m:person)-[e:knows]->(n:person)
GROUP BY m
ORDER BY count_m DESC
LIMIT 4;
该查询返回与最多人认识的前 4 个 person
节点,并按连接数量进行排序。
存储改进和优化
ArcNeural 通过抽象存储层等方法,在支持存算一体架构的基础上,进一步支持了存算分离架构,从而满足用户对系统的扩展性、高可用性、资源利用率等方面的差异化需求。在该版本中,我们对本地存储进行一些改进和优化:
1.避免双重写入:Rocksdb WAL 和 Raft Log 都用于记录写操作,两者会重复写入相同的数据。如果既启用 Rocksdb WAL 又使用 Raft Log,则会在写入时进行两次日志记录,这会增加存储成本和性能开销。通过禁用 Rocksdb WAL,仅依赖 Raft Log 进行数据日志持久化,可以避免这种重复写入。
2.使用 RocksDB Checkpoint 替代 Scan:RocksDB 的 Checkpoint 机制用于生成数据库在特定时间点的一致性快照,方便数据备份、恢复和迁移。使用 RocksDB 的 Checkpoint 功能可以有效降低在备份 / 恢复过程中的 CPU 和硬盘资源,提高备份/恢复的效率。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。