GaussDB(for PostgreSQL) 存储引擎:ASTORE 与 USTORE 详细对比
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场景,平衡性能与成本。
