GBase 8a 表空间多路径存储:支撑海量业务数据的弹性扩容

发布时间:2026-08-22

在数据库中数据的表空间存储路径信息(tablespace)作为一个属性,一般在数据表创建的时候被指定,且数量只有一个无法变化。例如在GBASE GCDW产品中数据文件只能写入固定 S3 桶。当表数据量持续膨胀,单路径会出现 IO 热点、存储容量上限等问题。

为解决单表空间存储路径瓶颈,GBASE GCDW对 tablespace 进行了多路径改造,重构了 DML/DDL、垃圾回收、备份恢复、LOADER 等核心链路,以tablespace多路径替换了原有的单路径,达到了数据文件分散存储在多个 S3 存储桶的目的。

整体存储架构

采用tablespace 多路径后,整体存储架构如图所示:

pfile 逻辑对象
对应 pcfile1、pcfile2 两个物理文件;pcfile1 存放在 bucket_1,pcfile2 存放在 bucket_2

pcfile1 发生 update 更新
生成新版本pcfile1_ver2,依旧写入 bucket_1,不会漂移到其他桶。

通过这种设计,既实现多桶负载分散,又保证版本数据位置可控。

核心改造点:DDL&DML 操作

Read 读操作

GBASE 保留了底层DC数据的读取接口,其整体流程不需要做过大调整,仅需在调用DC数据读取接口前,拿到当前DC对应的tablespace多路径信息,通过DC的pcfile_id ,反向关联获取对应的tablespace全部路径信息,进而实现数据的全量读取。

Update 更新操作

  • 常规批量Update操作,使用tablespace多路径信息对象替换原来的单路径信息。更新后新版本 DC,必须写入被更新 DC 原来所在的存储桶,通过旧 DC 的 pcfile_id 确定目标桶,不能随机挑选路径,且update 产生的 delta 版本,不能跨桶迁移,新版本和旧版本 pcfile 必须落在同一个 S3 bucket,保证版本数据位置可控。

  • Fast Update。Fast update 的操作逻辑为删除旧记录 + 插入新记录,删除操作无需变化,插入操作同下文的insert操作。

Insert 写入(WriteDC)

  • 定时更新数据表的tablespace多路径信息(总容量、剩余容量等)

  • 根据插入时数据表tablespace多路径的状态,选择最合适的路径放置到当前Task的任务构建中。

  • 从多条路径中挑选目标存储桶,完成新 DC 数据写入。

垃圾回收模块改造

垃圾回收是存储引擎关键模块,多路径改造后判断逻辑、清理逻辑整体流程不变,不过处理路径需要由之前的单路径变更为多路径,后续可实现处理的并发操作,为性能提升留下改造空间。

数据迁移、导入导出链路适配

数据迁移

数据迁移在启动操作前,首先获取当前数据表的全部tablespace多路径信息,并从中获取到最优路径(剩余空间最大等内部策略)。

导入导出

1)导出:遍历数据表所有tablesapce路径,读取全部数据导出,并为后续并发提升性能留出优化空间。

2)导入:在导入任务构建中,定时更新数据表的多路径信息,并在构建导入任务时根据内部策略选择最佳tablespace路径,构建任务导入数据。

表空间多路径功能亮点

  1. 对象化路径:全链路消灭硬编码字符串路径,统一使用CTableSpace对象管理多 S3 路径;

  2. 更新不跨桶:pcfile 更新产生新版本,必须落在原始 pcfile 所在存储桶,仅新 insert 的数据可以选择任意桶;

  3. 全链路覆盖:DML、外表、GC 垃圾回收、数据迁移、LOADER 导入等全部适配;

  4. 逻辑复用:外表落地 DC、FastUpdate 插入、LOADER 导入,均复用 insert 已有 WriteDC 流程,降低维护成本。

  5. 存储路径类型多元化:单表可同时支持s3多路径 及HDFSD多路径及s3/HDFS混合多路径,显著降低表空间扩充的条件要求,方便客户使用

  6. 动态扩展,降低成本:数据库表tablespace多路径可以动态添加,而不需要冲搭建新的数据库集群,降低了用户的使用成本。