使用GBase 8a不同压缩算法对冷热数据管理,实现数据生命周期的管理
一、冷热数据迁移的目的:
数据生命周期通常涵盖热数据使用和冷数据归档两个核心阶段,各阶段数据的查询频率、修改频率和存储需求有着显著差异。结合 GBase 8a 压缩算法的特性,可制定针对性的压缩策略,实现存储效率与性能的动态适配。 对于日常业务中涉及到的热数据,可使用加载/查询性能较均衡的STDZ0算法。随着业务的进行,对于需要持久化存储的历史冷数据,可采用高压缩比的HighZ或STDZ9压缩算法。
二、压缩算法的可选择性:
压缩算法:
① HighZ 算法:存储优先,追求存储节省。 ② RapidZ算法:兼顾加载和查询性能。 ③ STDZ 算法:在保持性能前提下提升数据压缩率。 压缩等级:
压缩等级(0-9)直接影响性能与压缩比,规则如下:
等级 0:默认等级,自适应调整压缩比,压缩比和性能较均衡。Compress(1,3)等同于compress(‘HighZ’,0),compress(5,5)等同于compress(‘RapidZ’,0)。 等级 1:压缩比最低,但加载速度最快。
等级 9:压缩比最高,复杂查询性能最优,但加载速度最慢。
压缩范围支持:
GBase 8a 支持三级压缩范围,可根据数据特征和场景灵活选择:
① 全局压缩:对同一VC中的所有存储节点生效,适用于整体存储占用有严格要求的场景。
② 表级压缩:创建表时指定压缩算法,适用于表内数据特征统一的场景。
③ 列级压缩:针对表中不同列单独设计压缩算法,适配列级数据特征差异(如部分列重复值多、部分列查询频繁)。
三、数据生命周期管理
GBase 8a 的压缩算法可根据不同阶段的数据特征与核心需求灵活调整,既能满足效率与稳定性的要求,又能平衡存储成本。针对数据管理中最常见的两类场景,可采用以下数据生命周期管理策略:
一、热数据使用
① 核心需求:需兼顾分析效率和存储稳定性,低延迟、高吞吐及高可靠性。
② 数据特征:访问频率极高,实时性要求强。
③ 压缩策略:应当选取加载/查询速度性能较高的压缩算法,可适当牺牲压缩比。如STDZ0/RapidZ。
二、冷数据归档
① 核心需求:低存储成本保存数据,支持极低频率的查询,无需考虑高频分析效率。
② 数据特征:数据基本固化,无新增和修改;查询频率极低、旧系统迁移数据为主,需长期稳定存储。
③ 压缩策略:使用HighZ或STDZ9算法,其高压缩比可显著降低存储压力。
四、方案实施
本示例展示了数据生命周期管理的实施步骤,使用不同的压缩算法创建热数据表和冷数据表用于存储不同生命周期的数据;通过INSERT...SELECT实现冷热数据迁移;对于历史数据根据业务需要选择清除,并释放存储空间。
-- 1.创建低压缩比性能适用,用于存储热数据的业务表
gbase>CREATE TABLE hot_data (
a int, b varchar(10),
create_time DateTime DEFAULT CURRENT_TIMESTAMP
)COMPRESS('stdz', 0);
QueryOK, 0 rows affected ( Elapsed: 00:00:00.12)
-- 2.创建高压缩比用于存储冷数据的历史表/用于大表复杂查询的分析表
gbase>CREATE TABLE cold_data (
a int, b varchar(10),
create_time DateTime DEFAULT CURRENT_TIMESTAMP
) COMPRESS( 'HighZ', 0);
QueryOK, 0 rows affected ( Elapsed: 00:00:00.12)
-- 3.设置时间戳,用于划分冷数据
gbase> SET @data_migration_timestamp = '20250101';
Query OK, 0 rows affected (Elapsed: 00:00:00.06)
-- 4. 执行Insert...into...语句
gbase>INSERT INTO cold_data SELECT *FROM hot_data WHERE create_time < @data_migration_timestamp;
Query OK, 3 rows affected (Elapsed: 00:00:00.25)
Records: 3 Duplicates: 0 Warnings: 0
-- 5. 校验数据一致性
gbase>SELECT COUN(*) FROM new_table;
+-----------+
| count(*) |
+-----------+
| 3 |
+-----------+
1 row in set (Elapsed: 00:00:00.01)
gbase>SELECT COUN(*) FROM old_table where create_time<@data_migration_timestamp;
+------------+
| count(*) |
+------------+
| 3 |
+------------+
1 row in set (Elapsed: 00:00:00.01)
-- 6. 删除业务表中的冷数据,并释放空间 -- 删除 hot_data 表中时间戳日期前的数据,保留近期数据
gbase>DELETE FROM hot_data WHERE create_time < @data_migration_timestamp;
Query OK, 3 rows affected (Elapsed: 00:00:00.14)
-- SHRINK SPACE释放存储空间
gbase> ALTER TABLE hot_data SHRINK SPACE FULL;
Query OK, 0 row affected (Elapsed: 00:00:00.54)
评论
热门帖子
- 12025-12-01浏览数:183359
- 22023-05-09浏览数:26113
- 42023-09-25浏览数:19772
- 52020-05-11浏览数:18415