存储引擎概述

存储引擎是数据库系统的存储基座,数据库基于存储引擎进行数据的创建、查询、更新和删除等操作。根据你的需要,不同的存储引擎将提供不同的存储机制,并可与不同的执行引擎组合成为适用于特定场景的数据库微内核。

目前 YMatrix 数据库系统支持几种存储引擎的使用:

  • 基于 PostgreSQL 的 HEAP
  • 基于 Greenplum 的 AO(Append-optimized)
  • YMatrix 自研发的 MARS2
  • 基于 MARS2 优化的 MARS3
存储引擎 描述
HEAP PostgreSQL 数据库提供的存储引擎,又称堆表,采用行式存储。该类型的表支持大量并发读写、事务、索引等特性
AO Greenplum 数据库提供的存储引擎,又称追加优化表,使用追加优化(Append-optimized,AO)的存储格式来批量装载和读取数据,并且能提供 HEAP 表上的性能优势。追加优化的存储为数据保护、压缩和行/列方向提供了校验和。行式或者列式追加优化的表都可以被压缩
MARS2 在 MARS 基础上开发的存储引擎,凭借其物理有序的合并方式,减少 I/O 寻址的次数,从而提高对表内数据的查询性能。MARS2 支持压缩、列存、自动归档、预聚集等功能,在时序场景中表现优越。在压缩方面,MARS2 可提供定制的压缩方案:编码链(mxcustom)。启用编码链可以对表进行细致、有针对性、定制化地深度压缩。MARS2 表不支持数据的更新和删除
MARS3 在 MARS2 基础上开发的存储引擎,其不仅继承了 MARS2 时序场景下的性能优势,还增添了对 AP 和 TP 场景的支持。此外,它除了继承了 MARS2 的很多优势特性,如编码链压缩,列存等功能,还对数据的写入性能进行了优化,可以应对不同形式的写入场景(如高频小批量的 TP 场景,低频大批量的 AP 场景)。MARS3 支持常规数据的更新和删除操作,支持 MVCC 机制,支持增删列,支持 Brin 索引

MARS2 与 MARS3 基本特性对比如下:

特性 MARS2 MARS3
存储方式 列存 行列混存或列存
压缩 支持编码链 支持编码链
通过 UPDATEDELETE 子句完成数据更新与删除 不支持 支持
增、删列 不支持 支持
MVCC 不支持 支持
Runtimefilter 支持 不支持
存储诊断 支持 不支持
数据分批合并(UPSERT) 支持 支持
INSERT INTO ... VALUES ... ON CONFLICT ... DO UPDATE 语法 不支持 不支持
索引 建表时必须同时创建一个 mars2_btree 索引指定排序键,否则表无法生效(作用相当于 MARS3 表的 ORDER BY 子句) 可选择性创建一个或多个 mars3_brin 索引,以提高查询效率(作用相当于 MARS2 表的 minmax 索引)
表参数配置方式 WITH(a=1,b=2,...) WITH(mars3options='a=1,b=2,...')