使用GaussDB(DWS)冷热数据切换功能降低业务成本
场景介绍
海量大数据场景下,随着业务和数据量的不断增长,数据存储与消耗的资源也日益增长。根据业务系统中用户对不同时期数据的不同使用需求,对膨胀的数据进行“冷热”分级管理,不仅可以提高数据分析性能还能降低业务成本。针对数据使用的一些场景,可以将数据按照时间分为:热数据、冷数据。
冷热数据主要从数据访问频率、更新频率进行划分。
- Hot(热数据):访问、更新频率较高,对访问的响应时间要求很高的数据。
- Cold(冷数据):不允许更新或更新访问频率较低,对访问的响应时间要求不高的数据。
用户可以定义冷热管理表,将符合规则的冷数据切换至OBS上进行存储,可以按照分区自动进行冷热数据的判断和迁移。
冷热切换的策略名称支持LMT(last modify time)和HPN(hot partition number),LMT指按分区的最后更新时间切换,HPN指保留热分区的个数切换。
- LMT:表示切换[day]时间前修改的热分区数据为冷分区,将该数据迁至OBS表空间中。其中[day]为整型,范围[0, 36500],单位为天。
- HPN:表示保留HPN个有数据的分区为热分区。在冷热切换时,需要将数据迁移至OBS表空间中。其中HPN为整型,范围为[0,1600]。
约束限制
- 对于同时存在冷热分区的表,查询时会变慢,因为冷数据存储在OBS上,读写速度和时延都比在本地查询要慢。
- 目前冷热表只支持列存2.0版本的分区表,外表不支持冷热分区。
- 仅支持从热数据切换为冷数据,不支持从冷数据切换为热数据。
创建集群
- 登录华为云管理控制台。
- 在“服务列表”中,选择“大数据 > 数据仓库服务”,单击右上角“创建数据仓库集群”。
- 参见表1进行参数配置。
表1 软件配置 参数名称
配置方式
区域
选择“华北-北京四”。
说明:本指导以“华北-北京四”为例进行介绍,如果您需要选择其他区域进行操作,请确保所有操作均在同一区域进行。
可用区
可用区2
产品类型
标准数仓
CPU架构
X86
节点规格
dws2.m6.4xlarge.8(16 vCPU | 128GB | 2000GB SSD)
说明:如规格售罄,可选择其他可用区或规格。
节点数量
3
集群名称
dws-demo
管理员用户
dbadmin
管理员密码
-
确认密码
-
数据库端口
8000
虚拟私有云
vpc-default
子网
subnet-default(192.168.0.0/24)
安全组
自动创建安全组
公网访问
现在购买
宽带
1Mbit/s
高级配置
默认配置
- 信息核对无误,单击“立即购买”,单击“提交”。
- 等待约6分钟,待集群创建成功后,单击集群名称前面的,弹出集群信息,记录下“公网访问地址”,例如dws-demov.dws.huaweicloud.com。
使用gsql命令行客户端连接集群
- 使用root用户远程登录到需要安装gsql的Linux主机,然后在Linux命令窗口,执行以下命令下载gsql客户端:
1
wget https://obs.cn-north-1.myhuaweicloud.com/dws/download/dws_client_8.1.x_redhat_x64.zip --no-check-certificate
- 执行以下命令解压客户端工具。
1
cd <客户端存放路径> unzip dws_client_8.1.x_redhat_x64.zip
其中:
- <客户端存放路径>:请替换为实际的客户端存放路径。
- dws_client_8.1.x_redhat_x64.zip:这是“RedHat x64”对应的客户端工具包名称,请替换为实际下载的包名。
- 执行以下命令配置客户端。
1
source gsql_env.sh
提示以下信息表示客户端已配置成功。
1
All things done.
- 执行以下命令,使用gsql客户端连接GaussDB(DWS)集群中的数据库,其中password为用户创建集群时自定义的密码。
1
gsql -d gaussdb -p 8000 -h 192.168.0.86 -U dbadmin -W password -r
显示如下信息表示gsql工具已经连接成功:
1
gaussdb=>
创建冷热表
1 2 3 4 5 6 7 8 9 |
CREATE TABLE lifecycle_table(i int, val text) WITH (ORIENTATION = COLUMN, storage_policy = 'LMT:100') PARTITION BY RANGE (i) ( PARTITION P1 VALUES LESS THAN(5), PARTITION P2 VALUES LESS THAN(10), PARTITION P3 VALUES LESS THAN(15), PARTITION P8 VALUES LESS THAN(MAXVALUE) ) ENABLE ROW MOVEMENT; |
冷热数据切换
- 自动切换:每日0点调度框架自动触发,无需关注切换情况。
可使用函数pg_obs_cold_refresh_time(table_name, time)自定义自动切换时间。例如,根据业务情况调整自动触发时间为每天早晨6点30分。
1 2 3 4 5
SELECT * FROM pg_obs_cold_refresh_time('lifecycle_table', '06:30:00'); pg_obs_cold_refresh_time -------------------------- SUCCESS (1 row)
- 手动切换。
1 2
ALTER TABLE lifecycle_table refresh storage; ALTER TABLE
使用函数pg_refresh_storage()批量切换所有冷热表:
1 2 3 4 5
SELECT pg_catalog.pg_refresh_storage(); pg_refresh_storage -------------------- (1,0) (1 row)
查看冷热表数据分布
- 查看单表数据分布情况。
1 2 3 4 5 6 7
SELECT * FROM pg_catalog.pg_lifecycle_table_data_distribute('lifecycle_table'); schemaname | tablename | nodename | hotpartition | coldpartition | switchablepartition | hotdatasize | colddatasize | switchabledatasize ------------+-----------------+--------------+--------------+---------------+---------------------+-------------+--------------+-------------------- public | lifecycle_table | dn_6001_6002 | p1,p2,p3,p8 | | | 96 KB | 0 bytes | 0 bytes public | lifecycle_table | dn_6003_6004 | p1,p2,p3,p8 | | | 96 KB | 0 bytes | 0 bytes public | lifecycle_table | dn_6005_6006 | p1,p2,p3,p8 | | | 96 KB | 0 bytes | 0 bytes (3 rows)
- 查看所有冷热表数据分布情况。
1 2 3 4 5 6 7
SELECT * FROM pg_catalog.pg_lifecycle_node_data_distribute(); schemaname | tablename | nodename | hotpartition | coldpartition | switchablepartition | hotdatasize | colddatasize | switchabledatasize ------------+-----------------+--------------+--------------+---------------+---------------------+-------------+--------------+-------------------- public | lifecycle_table | dn_6001_6002 | p1,p2,p3,p8 | | | 98304 | 0 | 0 public | lifecycle_table | dn_6003_6004 | p1,p2,p3,p8 | | | 98304 | 0 | 0 public | lifecycle_table | dn_6005_6006 | p1,p2,p3,p8 | | | 98304 | 0 | 0 (3 rows)