文档

LOB大字段独立冷存

更新时间:

本文介绍LOB大字段独立冷存的最佳实践。

场景描述

LOB字段即可变长字段,包括blob、text、json、jsonb、anyarray以及Ganos时空类型的字段等等。LOB字段通常占用的存储空间比较大,但实际访问的频率比较低。本文介绍如何将一张表中的某个LOB字段从基表中分离出来并转为冷存,同时访问透明,以达到单张表中按字段维度进行冷热分离。

操作步骤

  1. 创建包含大字段的表。

    这里以text类型为例,其余类型大字段使用方法类似。

    db01=>CREATE TABLE blob_table(id serial, val text);
  2. 设置大字段为冷存模式。

    db01=>alter table blob_table alter column val set (storage_type='oss');
  3. 写入数据并查看存储位置。

    --插入数据,此时val字段完全存储在OSS中
    db01=>INSERT INTO blob_table(val) VALUES((SELECT string_agg(random()::text, ':') FROM generate_series(1, 100000)));
    
    --查看val字段存储位置
    db01=> WITH tmp as (select 'pg_toast_'||b.oid||'_'||c.attnum as tblname from pg_class b, pg_attribute c where b.relname='blob_table' and c.attrelid=b.oid and c.attname='val') select t.spcname as storage_type from pg_tablespace t, pg_class r, tmp m where r.relname = m.tblname and t.oid=r.reltablespace;
     storage_type 
    --------------
     oss
    (1 row)
    说明

    只有先设置大字段为冷存模式之后写入的数据才会真正存储至OSS,在执行设置之前已经存在的数据存储位置不变。