术语表

此文档供用户查阅 YMatrix 中对独有术语、难点术语的官方解释。

A

ACID

ACID,是指数据库管理系统(DBMS)在写入或更新数据的过程中,为保证事务(Transaction)是正确可靠的,所必须具备的四个特性:原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。

  • Atomicity(原子性):一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
  • Consistency(一致性):在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
  • Isolation(隔离性):数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read Uncommitted)、读提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。
  • Durability(持久性):事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

AO

AO 全称为 Append-optimized,是一种追加优化的存储格式,使用此格式存储的表称作 AO 表。

AO 表支持批量装载和读取数据,并且能提供 HEAP 表上的性能优势。同时,行式或者列式追加优化的表都可以被压缩,行式的追加优化表简称 AORO/AORS,列式简称 AOCO/AOCS。

B

编码链压缩算法(Mxcustom)

英文全称 MatrixCustom,是 YMatrix 自研的定制化压缩算法。

编码链则可以充分利用时序数据的特性,对表数据进行深度压缩。它可以充分利用时序数据的特性,对表数据进行深度压缩,可用于 MARS2/3 表的列级别压缩、表级别压缩、自适应编码(Auto encoding)等。

C

超融合

超融合是 YMatrix 提出的新兴数据库概念。与其他架构的数据库相比,超融合架构体现在融合了多种数据类型与数据操作,从而在一个数据库内实现多种数据类型 + 多场景的高性能支持,解决信息孤岛问题。 就 YMatrix 内部架构而言,其具有微内核特征。在公共基础组件之上,为不同业务场景需求提供不同的存储、执行引擎组合,实现不同的微内核,以得到针对性的写入、存储、查询性能提升。

持续聚集(CV)

英文全称 Continuous View,简称 CV,是一种能快速响应聚集查询的机制。

创建持续聚集后,数据写入过程中,系统会自动实时对原数据进行聚集计算,和原表数据事务级同步。

D

堆(HEAP)

HEAP 是 PostgreSQL 数据库提供的存储引擎,采用行式存储。该类型的表支持大量并发读写、事务、索引等特性。在堆表中,数据存储没有任何顺序,需要借助索引页来提升查询数据性能;数据最初是按照行插入表的顺序存储的,但数据库引擎可以在堆中移动数据以有效地存储行;所以无法预测数据顺序。为了保证从堆返回的行的顺序,用户应使用 ORDER BY 子句指定排序。

如果要指定存储行的永久逻辑顺序,用户需在表上创建聚集索引,而不是创建堆。

E

ETCD

ETCD 是一个分布式的键值存储系统,用于在分布式系统中存储和检索数据。ETCD 使用 Raft 一致性算法来确保数据的一致性和可靠性。它被设计为高度可用的,具有强大的故障恢复能力。

Raft 是一种解决分布式系统一致性问题的算法。它允许一组机器像一个整体一样工作,即使其中一些机器出现故障也能够继续工作下去。正因为如此,一致性算法在构建可信赖的大规模软件系统中扮演着重要的角色。

G

故障自动转移(Failover)

指自动运维体系中,通过调取 ETCD 集群的节点状态诊断信息,切换主备节点从而转移故障的机制。

ETCD 集群是 YMatrix 集群状态服务中的核心组件,负责管理所有节点的状态信息。当集群中任一节点出现故障时,数据库系统会自动进行节点故障转移,无需人工干预。

故障自动恢复(Failback)

指故障自动转移完成后,相应节点对仅存 Primary/Master,没有健康的备用节点。如果再出现故障,则无法恢复。所以,需要使用 mxrecover 工具为新的 Primary/Master 生成健康的 Mirror/Standby 节点。

H

滑动窗口(Sliding Window)

是流计算场景的常见功能。在流计算数据场景中,可以对最近一段时间内的数据持续地做聚集运算。

滑动窗口通常搭配监控告警使用,当最近一段时间内数据满足预设条件时,数据服务端会向客户端发送告警消息。例如,每台设备,每分钟计算一次平均温度,超过 90 度则告警。

环状分布(Ring Mirroring)

环状分布是 YMatrix 默认的镜像分布策略:即在至少有两台主机的情况下,将一个主机中的 Primary 序号序列看作一个一维纸带,从中间对折,然后在另外的主机上从对折的中间序号为起点,顺时针均匀排列 Mirror 到其他主机。

扩容增加新的 Primary 不会影响之前已分布完成的镜像闭环,而是开启一个新的镜像环。

除了环状分布,YMatrix 还支持如下两种镜像分布策略:

  • 散列镜像分布(Spread Mirroring):散列镜像分布会把每台主机的 Mirror 散布到集群中剩余的主机上,并且要求集群中的主机数量比每个主机上的Primary 数量多。要确保平均散布,阵列中独立主机的数量必须大于每台主机上的节点示例数量。
  • 组镜像分布(Group Mirroring):组镜像分布会把同一个主机上的 Primary 的所有 Mirror 看作一组,一同放置在集群中的另一台主机上。

火山模型

也称为拉取执行模型(Pull Based)。YMatrix 支持的执行引擎之一火山执行引擎即采用此模型实现迭代计算。

SQL 查询在数据库中经过解析,会生成一棵查询树,查询树的每个执行节点为一个代数运算符(Operator)。

火山模型把 Operator 看成迭代器,每个迭代器都会提供一个 next() 函数作为接口,其实现分为三步:

  1. 调用子节点 Operator 的 next() 接口获取一行元组数据(Tuple)
  2. 对 Tuple 进行 Operator 特定的处理
  3. 返回处理后一个的 Tuple 或返回 NULL

因此,查询执行时会由查询树自顶向下的调用 next() 函数,数据则自底向上的被拉取处理。优点是处理逻辑清晰,每个 Operator 只要关心自己的处理逻辑即可,耦合性低;缺点则是数据以行为单位进行处理,不利于 CPU 缓存发挥作用。且每处理一行需要调用多次 next() 函数,开销大。

向量化模型和火山模型类似,都是生成查询树并拉取执行。区别在于向量化模型的每一次迭代会返回一组 Tuple 而非一个。其优点是可以减少迭代次数,且可以利用新的硬件特性如 SIMD 来提升性能,对列存尤其友好。

I

Interconnect

指数据库架构中的网络层,是 Segment 之间的进程间通信以及这种通信所依赖的网络基础设施,采用了一种标准的以太交换网络。

J

基于代价的优化器(CBO)

又称 Cost-based Optimization,简称 CBO,YMatrix 默认使用此种优化器来生成查询计划。

一般优化器分两个阶段进行优化,即基于规则的优化(Rule-Based-Optimization,简称 RBO)和基于代价的优化(CBO)。相比 RBO,CBO 依赖于统计信息的准确性与及时性,执行计划会及时的根据数据变换做对应的调整。

降级存储

降级存储是 YMatrix 实现数据全自动化冷热分级的一种方式,对接 MARS3 存储引擎:冷数据自动降级转储到对象存储中,并无缝接入 MPP 底座,实现对冷数据的高效分析。数据降级存储的过程无需人工干预,最大程度的降低了管理成本和使用成本。

对象存储(Object Storage)是一种计算机数据存储架构,它将数据作为对象进行管理,与其他存储架构不同(如文件系统将数据作为文件层次结构进行管理,而块存储则将数据作为扇区和轨道内的块进行管理)。对象存储是一种高性价比、低成本的存储方式。


任务(MatrixGate job, Job)

Job 在 MatrixGate(mxgate)中负责将数据写入对应表。每个 Job 都有一个 slot 的调度器,它可以确保同一时间,每个 Job 只有一个 slot 的写入事务在执行。无论是使用配置文件还是命令行启动 mxgate,我们都需要指定写入数据的目标表名(通过 --target 参数),mxgate 校验到该表存在后,就会触发生成一个只属于该表的 Job,Job 负责激活 slot 并将 slot 连接至各个数据节点实例(Segment)并行写入数据。一个表只能触发一个 Job,一个 Job 可以激活多个 slot。

M

MARS

YMatrix 自研的系列存储引擎,全称为 Matrix Append-optimized Resilient Storage,即追加优化的弹性存储。

包括 MARS2 和 MARS3:

  • MARS2 凭借其物理有序的合并方式,减少 I/O 寻址的次数,从而提高对表内数据的查询性能。支持编码链压缩、列存等功能。
  • MARS3 是在 MARS2 基础上开发的存储引擎,其增添了对 AP 和 TP 场景的支持,进一步提升了写入性能。

Master

通常指集群的主节点实例,主要有以下作用:

  • 负责建立与管理同客户端的会话连接。
  • 负责解析 SQL 语句并形成查询计划(Query Plan)。
  • 向 Segment 分发查询计划,监控查询执行过程,并收集反馈结果返回到客户端。
  • Master 不存储业务数据,只存储数据字典,即系统中使用的所有数据元素的定义及属性集合。
  • 在一个集群中,Master 只被允许有一个,可以采用一主一备,备用节点称为 Standby。

MPP

MPP 是指在数据库非共享(Shared Nothing)集群中,每个节点(Node)都有独立的磁盘存储系统和内存系统,业务数据根据数据库模型和应用特点划分到各个节点上,每台数据节点(Segment Node)通过专有网络或者商业通用网络互相连接,彼此协同计算,提供数据库服务。非共享数据库集群具备可扩展性、高可用、高性能、高性价比等优势。

简单来说,MPP 架构是将任务并行地分散到多个服务器和节点上,在每个节点的计算完成后,将结果汇总在一起得到最终的结果。

MVCC

即多版本并发控制(MVCC),它使用一种多版本模型来维护数据一致性。 MVCC 为每一个数据库会话实现了事务隔离,并且每一个查询事务会看到一个数据的快照。 这保证该事务会看到一致的不受其他并发事务影响的数据。

O

ORCA

Greenplum 数据库的默认优化器,其扩展了传统优化器的规划和优化能力,在多核环境中可以获得更好的性能。YMatrix 中需通过开启 optimizer 参数来启用,在 5.2.0 及以上版本支持与向量化执行引擎对接。

GPORCA 在下列领域增强了对查询性能的调优:

  • 针对分区表的查询
  • 包含公共表表达式(CTE)的查询
  • 包含子查询的查询

R

Runtime Filter

Runtime Filter 是提升 YMatrix 执行引擎性能的关键技术之一,指在优化器生成物理执行计划后,在执行引擎中估价时,动态构建的过滤器(Filter),区别于优化器预先规划的 Filter。

S

事务(Transaction)

是作为单个逻辑工作单元执行的一系列操作。多个操作将作为一个不可分割的整体向数据库系统提交,要么都执行,要么都不执行,其必须完整具备 ACID 属性。

在关系数据库中,一个事务可以是一条 SQL 语句,一组 SQL 语句或整个程序。它形成了数据库恢复和并发控制的基本单位,通常以 BEGIN/START TRANSACTION 子句开始,END/COMMIT 子句结束。

数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。SQL 标准定义了 4 个事务隔离级别,严格程度由高到低分别为:

  • 串行化(Serializable)
  • 可重复读(Repeatable Read)
  • 读提交(Read Committed)
  • 读未提交(Read Uncommitted)

Segment

大多数情况下指 Segment Instance,数据节点实例,本质是独立的 PostgreSQL 数据库,每一个都存储了数据的一部分并且执行查询处理的主要部分。少数情况指 Segment Node,即存储数据的物理节点,每个节点上有一个或多个真实存储数据的数据节点实例。

数据节点实例通常包含 Primary Instance 和 Mirror Instance(如果启用镜像机制的话)。其中:

  • Primary Instance,指主实例。
  • Mirror Instance,指镜像实例。

SIMD

SIMD 全称 Single Instruction Multiple Data,意为单指令多数据,是一种计算机指令集架构。这种架构可以使多个处理单元同时执行相同的指令,但是每个处理单元操作的数据不同。

SIMD 被广泛应用于图像处理、音频处理、科学计算等领域,可以大幅提高计算效率。


Slot

在 MatrixGate(mxgate)里,slot 是一个用于向数据节点实例(Segment)写入数据的进程。mxgate 在得到数据写入任务(Job)后,会根据配置的 --stream-prepared 参数,生成对应数量的 slot。每个 slot 通过执行 INSERT INTO dest SELECT * FROM external,将外部数据导入写入 YMatrix 的 Segment。Slot 每次发送数据的时长为通过 --interval 参数配置,如果你将 --interval 设置为 100,则一个 slot 每次发送数据的时长为 100 ms。

Standby

指主节点 Master 的备用节点(实例)。

用户可以选择性地在一台不同于 Master 的主机上部署一个 Master 实例的备份或者镜像。在 Master 主机变得不可用时,一个备份 Master 主机将发挥温备的作用。

Standby 利用流式复制机制保持与 Master 同步,复制进程运行在 Standby 上并且负责在 Master 和 Standby 主机之间同步数据。

T

图形化界面(MatrixUI)

是 YMatrix 的图形化交互界面。主要用于图形化安装与图形化运维、监控,功能丰富,操作简洁。

目前包括以下功能/界面:

  • 多平台安装部署
  • 模拟时序场景
  • 扩容
  • Kafka 数据流写入
  • 查询监控
  • 集群管理
  • 健康监测
  • 自助巡检
  • 负载分析
  • SQL 编辑器

U

UDF

即 User-defined Function,用户定义函数。

用户定义函数即数据库允许用户创建的独属自己的用户定义函数。使用 CREATE FUNCTION 语句创建、使用 ALTER FUNCTION 语句修改、以及使用 DROP FUNCTION 语句删除。每个完全合法的用户定义函数名:database_name.owner_name.function_name 必须唯一。

X

向量化模型

YMatrix 支持的向量化执行引擎即采用此模型实现迭代计算。

向量化模型和火山模型类似,都是生成查询树并拉取执行。区别在于向量化模型的每一次迭代会返回一组 Tuple 而非一个。其优点是可以减少迭代次数,且可以利用新的硬件特性如 SIMD 来提升性能,对列存尤其友好。

向量化执行引擎又称 MatrixVector,是专门为面向列的存储引擎(如 MARS3,MARS2,AOCO)打造的高性能执行引擎。对于常见查询,相比面向行处理的传统执行引擎有一到两个数量级的性能提升。

向量化执行器相比于标量执行引擎(如火山执行引擎)其性能收益来自于以下几方面:

  1. 批量化处理降低执行开销
  2. 小批量处理提升数据热度, 通过保持数据在 CPU 缓存中, 提升数据访问性能
  3. 根据数据特征选择最佳处理路径
  4. 减少函数调用开销并可利用 CPU 的 SIMD 指令进一步提升效率
  5. 逐列处理按需加载来避免加载无用数据

稀疏型索引

稀疏型索引(Sparse Index)是一种用于优化数据存储和检索的索引结构。在数据库和搜索引擎等应用中,索引用于快速定位和访问存储在数据结构中的数据。与稠密型索引(Dense Index)相反,稀疏型索引只包含部分数据项(存储在表时物理距离较近的那部分)的索引项。稀疏性索引通常用于具有大型数据集和高度重复值的情况,其中出现频率较低的值不被索引,以节省索引的存储空间。

Z

状态数据管理服务(Cluster Service)

指通过对节点状态信息的收集、管理来保证数据库的高可用。

YMatrix 使用 ETCD 集群实现这一服务:当有一个数据库节点宕机时,ETCD 调用自身存储的节点状态数据信息,确认当前健康节点成为新的主节点,从而通过提升此节点来保障整个集群可用。

例如,如果是 Master 宕机,则其 Standby 提升为 Master;如果是 Standby 宕机,则对整体集群无影响。同理,如果 Primary 宕机,则其 Mirror 提升为 Primary;Mirror 自身宕机对整体集群无影响。

此服务主要包含故障自动转移(Failover)及以 mxrecover 工具为支撑的故障自动恢复(Failback)两个功能。利用这两个功能,可以实现节点故障的完整恢复流程。

自动化分区管理(APM)

英文全称 Auto Partition Management。

指 YMatrix 提供的用来管理分区的 UDF,使数据库管理员可以根据自己的需求手动维护分区,降低分区维护的成本。包括:

  • auto_partitioning
  • auto_splitting
  • auto_partitioning_ex

主要功能包括:

  • 分区自动创建与删除
  • 默认分区自动切分
  • 批量创建分区
  • 强制保留特定历史分区
  • 自定义自动分区操作时段