Klustron的Online DDL及Repartitioning特性可以将所有DDL操作在线化,从而实现便捷地变更表结构,而不会影响业务系统的运行。
关键词:Online DDL、Repartitioning
1 why
为什么需要这个特性
由于分区不合理导致查询和插入操作变慢 表数据变小不要原先那么多分区 需要增删列,修改列的数据类型 修改主键,增加索引
2 HOW?

导出表全量数据:node_mgr 调用mydumper 将源表数据 dump 出来并传输数据文件到计算节点所在服务器; 加载表全量数据:node_mgr调用kunlun_loader工具把源表dump全量数据灌入目标表中; binlog catch-up:node_mgr根据dump时各个shard上binlog起始位置记录调用binlog2sync工具,binlog2sync 工具从该位置点开始dump binlog事件; rename 源表和目标表:binlog2sync工具快速将剩余的binlog同步完,然后再将目标表rename成源表名,业务恢复正常使用。
3 More Detail(详细说明)


curl -d '{"version":"1.0","job_id":"","job_type":"table_repartition","timestamp":"1435749309","user_name":"kunlun_test","paras":{"src_cluster_id":"1","dst_cluster_id":"3","repartition_tables":"postgres_$$_public.transfer_accout=>postgres_$$_public.account"}}' -X POSThttp://127.0.0.1:58000/HttpService/Emit

列顺序:源表所有列名在新表必须都出现,但是这些列的顺序可以不同。新表可以增加更多的列,但是这些列必须具有default值或者允许NULL值。一个online DDL 可以同时做多个操作,如:新增列(可以加到该表的任意位置),调整列顺序以及调整列的约束和default值。 列数据类型:源表和新表同名的列的数据类型必须完全相同或属于同一个大类,并且目标表的数据类型可以更宽,但不可以更窄。例如,二者都是整形,源表列如果是int, 那么目标表对应列 可以是 bigint,但是不可以是 smallint、tinyint; 索引:源表和新表可以有完全不同的索引定义和主键定义。但是源表的数据必须能够满足新表的所有唯一索引和主键的约束,否则数据导入会失败。例如新表就是为了修改主键,或者增加索引或者唯一索引。 分区:源表和新表可以有完全不同的 表分区规则、表分区参数。源表和新表都可以是 单表、镜像表、分区表 中的某一种。例如源表是单表,未分区,新表按照某种规则分区; 表约束:源表和新表可以有不同的表级 check 约束和触发器定义,但是源表的数据必须能够通过新表的 check 约束否则数据导入会失败。
4 Q&A讨论
最后修改时间:2023-06-08 20:19:08
文章转载自KunlunBase 昆仑数据库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




