GaussDB(for PostgreSQL) 存储引擎:ASTORE 与 USTORE 详细对比
1. 背景说明
GaussDB(for PostgreSQL) 是华为基于 PostgreSQL 开发的企业级分布式数据库,其存储引擎分为 ASTORE 和 USTORE 两种类型,分别针对不同场景优化。
2. 核心对比
(1) ASTORE(行式存储引擎)
- 全称:Append-Optimized Store(追加优化存储)。
- 数据模型:行式存储(Row-based)。
- 核心特性:
- 面向OLTP优化:适合高并发、短事务、频繁增删改操作。
- 支持ACID事务:行级锁、MVCC(多版本并发控制)。
- 存储结构:数据以行(Row)为单位存储,适合单记录快速读写。
- 压缩率:中等(支持基本压缩,但弱于列式存储)。
- 适用场景:
- 高并发事务处理(如订单系统、用户登录)。
- 需要强一致性和实时性场景。
- 示例表创建:
CREATE TABLE orders ( order_id INT PRIMARY KEY, user_id INT, amount DECIMAL(10,2), order_time TIMESTAMP ) WITH (storage_type='ASTORE');
(2) USTORE(统一存储引擎)
- 全称:Unified Store(统一存储引擎)。
- 数据模型:列式存储(Columnar Storage)。
- 核心特性:
- 面向OLAP优化:适合大数据分析、聚合查询(如
GROUP BY
,SUM
)。 - 高压缩率:列式存储天然压缩率高(如数值列、字符串列)。
- 并行查询加速:列式存储支持高效列扫描和向量化计算。
- 混合负载支持:通过行列混存(Hybrid Storage)实现HTAP场景。
- 分布式扩展:支持跨节点并行处理。
- 面向OLAP优化:适合大数据分析、聚合查询(如
- 适用场景:
- 复杂分析查询(如销售趋势分析、BI报表)。
- 海量数据存储与批量处理。
- 示例表创建:
CREATE TABLE sales_data ( product_id INT, region VARCHAR(50), sales DECIMAL(10,2), sale_date DATE ) WITH (storage_type='USTORE');
3. 核心差异对比表
维度 | ASTORE(行式) | USTORE(列式) |
---|---|---|
数据模型 | 行式存储(按行存储) | 列式存储(按列存储) |
适用场景 | OLTP(事务处理) | OLAP(分析处理)或HTAP混合负载 |
事务支持 | 支持ACID事务,行级锁 | 支持ACID(通过全局事务机制) |
压缩率 | 中等 | 高(列式压缩算法优化) |
查询优化 | 单记录查询、短事务 | 聚合查询、范围扫描、批量数据处理 |
写入性能 | 高(适合频繁增删改) | 中等(批量写入更优) |
读取性能 | 单记录读取快 | 列式扫描和聚合计算快 |
典型容量 | 中小规模数据 | 海量数据(TB/PB级) |
扩展性 | 水平扩展(分布式节点) | 水平扩展,支持MPP架构 |
典型使用案例 | 电商订单系统、用户登录 | 数据仓库、BI分析、实时报表 |
4. 关键技术细节
(1) ASTORE(行式存储)
- 存储结构:
- 数据按行存储,每行数据包含所有字段。
- 支持索引优化(如B-tree索引),适合单行快速定位。
- 事务机制:
- 通过MVCC实现多版本并发控制。
- 写操作通过行级锁保证事务隔离性。
- 性能特点:
- 优点:单记录操作(
INSERT/UPDATE/DELETE
)性能高。 - 缺点:聚合查询(
GROUP BY
)需扫描全表,性能较差。
- 优点:单记录操作(
(2) USTORE(列式存储)
- 存储结构:
- 数据按列存储,同一列的数据连续存放。
- 支持列式压缩(如字典编码、RLE编码)。
- 查询优化:
- 向量化执行:列数据连续存储,适合CPU向量化计算。
- 分区裁剪:按列过滤数据,减少I/O。
- 事务机制:
- 支持分布式事务(通过全局事务ID)。
- 读操作通过快照隔离(Read Committed)。
- 性能特点:
- 优点:聚合查询性能高,存储空间小。
- 缺点:单记录更新/插入性能较低。
5. 如何选择引擎?
选择ASTORE的场景:
- 需要强一致性(如银行交易、订单系统)。
- 高频的单记录操作(
SELECT * WHERE id=1
)。 - 事务要求严格(ACID)。
选择USTORE的场景:
- 需要处理海量数据(如日志分析、用户行为分析)。
- 复杂查询(
GROUP BY
,SUM
,AVG
)为主。 - 存储空间敏感(列式压缩节省存储成本)。
混合负载(HTAP):
- 方案:通过 ASTORE+USTORE组合 实现:
- ASTORE存储事务数据。
- USTORE存储分析数据(通过订阅ASTORE数据同步)。
- 示例:
-- 创建ASTORE表(OLTP) CREATE TABLE real_time_data (/* ... */) WITH (storage_type='ASTORE'); -- 创建USTORE表(OLAP) CREATE TABLE analytics_data (/* ... */) WITH (storage_type='USTORE'); -- 通过订阅同步数据 CREATE SUBSCRIPTION analytics_sub FROM TABLE real_time_data TO TABLE analytics_data;
6. 总结
需求 | 选择ASTORE | 选择USTORE |
---|---|---|
事务处理优先级 | ✅ | ❌ |
分析查询优先级 | ❌ | ✅ |
存储空间敏感 | ❌ | ✅ |
单记录操作性能 | ✅ | ❌ |
聚合查询性能 | ❌ | ✅ |
通过合理选择存储引擎,GaussDB(for PostgreSQL) 可灵活适配OLTP、OLAP及HTAP场景,平衡性能与成本。