GaussDB(for PostgreSQL) 存储引擎:ASTORE 与 USTORE 详细对比

发布于:2025-04-06 ⋅ 阅读:(9) ⋅ 点赞:(0)

GaussDB(for PostgreSQL) 存储引擎:ASTORE 与 USTORE 详细对比


1. 背景说明

GaussDB(for PostgreSQL) 是华为基于 PostgreSQL 开发的企业级分布式数据库,其存储引擎分为 ASTOREUSTORE 两种类型,分别针对不同场景优化。


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场景。
    • 分布式扩展:支持跨节点并行处理。
  • 适用场景
    • 复杂分析查询(如销售趋势分析、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场景,平衡性能与成本。