1、创建数据表

1.1、创建shard普通表

TBase_shard普通表TBase_shard普通表续TBase_shard普通表说明说明:

  • distribute by shard(x) 用于指定分布键,数据分布于那个节点就是根据这个字段值来计算分片。
  • to group xxx 用于指定存储组(每个存储组可以有多个节点)。
  • 分布键字段值不能修改,字段长度不能修改,字段类型不能修改。

1.2、创建shard普通分区表

TBase_shard分区表TBase_shard分区表续

  1. [tbase@VM_0_37_centos shell]$ psql -h 172.16.0.42 -p 11387 -d postgres -U tbase
  2. psql (PostgreSQL 10.0 TBase V2)
  3. Type "help" for help.
  4. postgres=# create table public.t1_pt
  5. (
  6. f1 int not null,
  7. f2 timestamp not null,
  8. f3 varchar(20),
  9. primary key(f1)
  10. )
  11. partition by range (f2)
  12. begin (timestamp without time zone '2019-01-01 0:0:0')
  13. step (interval '1 month') partitions (3)
  14. distribute by shard(f1)
  15. to group default_group;
  16. CREATE TABLE
  17. postgres=#
  18. postgres=# \d+ public.t1_pt
  19. Table "public.t1_pt"
  20. Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
  21. --------+-----------------------------+-----------+----------+---------+----------+--------------+-------------
  22. f1 | integer | | not null | | plain | |
  23. f2 | timestamp without time zone | | not null | | plain | |
  24. f3 | character varying(20) | | | | extended | |
  25. Indexes:
  26. "t1_pt_pkey" PRIMARY KEY, btree (f1)
  27. Distribute By: SHARD(f1)
  28. Location Nodes: ALL DATANODES
  29. Partition By: RANGE(f2)
  30. # Of Partitions: 3
  31. Start With: 2019-01-01
  32. Interval Of Partition: 1 MONTH
  33. postgres=#

说明:

  • partition by range (x) 用于指定分区键,支持timesamp,int类型,数据分布于那个子表就是根据这个字段值来计算分区。
  • begin( xxx )指定开始分区的时间点。
  • step(xxx)指定分区有周期
  • partions(xx)初始化时建立分区子表个数。
  • 增加分区子表的方法ALTER TABLE public.t1_pt ADD PARTITIONS 2;

1.3、创建shard冷热分区表

TBase_shard冷热分区表TBase_shard冷热分区表续

  1. [tbase@VM_0_37_centos shell]$ psql -h 172.16.0.42 -p 11387 -d postgres -U tbase
  2. psql (PostgreSQL 10.0 TBase V2)
  3. Type "help" for help.
  4. postgres=# create table public.t1_cold_hot
  5. (
  6. f1 int not null,
  7. f2 timestamp not null,
  8. f3 varchar(20),
  9. primary key(f1)
  10. )
  11. partition by range (f2)
  12. begin (timestamp without time zone '2017-01-01 0:0:0')
  13. step (interval '12 month') partitions (4)
  14. distribute by shard(f1,f2)
  15. to group default_group cold_group;
  16. CREATE TABLE
  17. postgres=# \d+ public.t1_cold_hot
  18. Table "public.t1_cold_hot"
  19. Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
  20. --------+-----------------------------+-----------+----------+---------+----------+--------------+-------------
  21. f1 | integer | | not null | | plain | |
  22. f2 | timestamp without time zone | | not null | | plain | |
  23. f3 | character varying(20) | | | | extended | |
  24. Indexes:
  25. "t1_cold_hot_pkey" PRIMARY KEY, btree (f1)
  26. Distribute By SHARD(f1,f2)
  27. Hotnodes:dn001 Coldnodes:dn002
  28. Partition By: RANGE(f2)
  29. # Of Partitions: 4
  30. Start With: 2017-01-01
  31. Interval Of Partition: 12 MONTH
  32. postgres=#

说明:

  • Distribute By SHARD(f1,f2),冷热分区表需要指定两个字段来做路由,分别是分布键和分区键。
  • to group default_group cold_group,需要指定两个存储组,第一个是热数据存储组,第二个是冷存储组。

创建时间范围冷热分区表需要有两个group,冷数据的cold_group对应的节点需要标识为冷节点,如下所示

  1. [tbase@VM_0_37_centos shell]$ psql -h 172.16.0.42 -p 11000 -d postgres -U tbase
  2. psql (PostgreSQL 10.0 TBase V2)
  3. Type "help" for help.
  4. postgres=# select pg_set_node_cold_access();
  5. pg_set_node_cold_access
  6. -------------------------
  7. success
  8. (1 row)

冷热分区表需要在postgresql.conf中配置冷热分区时间参数和分区级别,如下所示

  1. cold_hot_sepration_mode = 'year'
  2. enable_cold_seperation = true
  3. manual_hot_date = '2019-01-01'

1.4、创建复制表

TBase_shard冷热分区表

  1. [tbase@VM_0_37_centos shell]$ psql -h 172.16.0.42 -p 11387 -d postgres -U tbase
  2. psql (PostgreSQL 10.0 TBase V2)
  3. Type "help" for help.
  4. postgres=# create table public.t1_rep
  5. (
  6. f1 int not null,
  7. f2 varchar(20),
  8. primary key(f1)
  9. )
  10. distribute by replication ;
  11. to group default_group;
  12. CREATE TABLE

说明:

  • 经常要跨库JOIN的小数据量表可以考虑使用复制表。
  • 复制表是所有节点都有全量数据,对于大数据量的数据表不适合。
  • 复制表更新性能较低。