Skip to content

Commit

Permalink
Apply suggestions from code review
Browse files Browse the repository at this point in the history
  • Loading branch information
ran-huang authored May 25, 2022
1 parent fb27ef1 commit 5e8f6e2
Showing 1 changed file with 9 additions and 9 deletions.
18 changes: 9 additions & 9 deletions dm/feature-shard-merge-optimistic.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,23 +32,23 @@ DM 支持在线上执行分库分表的 DDL 语句(通称 Sharding DDL),
- 例如:在分表执行过 `ADD COLUMN A INT; DROP COLUMN A; ADD COLUMN A FLOAT;`,在其他分表直接执行 `ADD COLUMN A FLOAT` 即可,不需要三条 DDL 都执行一遍。
- 执行 DDL 时要注意观察 DM 迁移状态。当迁移报错时,需要判断这个批次的 DDL 是否会造成数据不一致。

“乐观协调”模式下,上游执行的大部分 DDL 无需特别关注,将自动同步,本文使用“一类 DDL” 指代。同时,还有一部分改变列名、列属性或列默认值的 DDL,称为“二类 DDL”,上游执行时需要特别注意: 上游在执行时必须**保证该 DDL 在各分表中按相同的顺序**执行。
“乐观协调”模式下,上游执行的大部分 DDL 无需特别关注,将自动同步,本文使用“一类 DDL” 指代。同时,还有一部分改变列名、列属性或列默认值的 DDL,称为“二类 DDL”,上游执行时要注意必须**保证该 DDL 在各分表中按相同的顺序**执行。

“二类 DDL” 举例如下:

- `ALTER TABLE table_name MODIFY COLUMN column_name VARCHAR(20)`(修改列的类型)
- `ALTER TABLE table_name RENAME COLUMN column_1 TO column_2;`(重命名列)
- `ALTER TABLE table_name ADD COLUMN column_1 NOT NULL;`(增加没有默认值且非空的列)
- `ALTER TABLE table_name RENAME INDEX index_1 TO index_2;`(重命名索引)
- 修改列的类型:`ALTER TABLE table_name MODIFY COLUMN column_name VARCHAR(20)`
- 重命名列:`ALTER TABLE table_name RENAME COLUMN column_1 TO column_2;`
- 增加没有默认值且非空的列:`ALTER TABLE table_name ADD COLUMN column_1 NOT NULL;`
- 重命名索引:`ALTER TABLE table_name RENAME INDEX index_1 TO index_2;`

各分表在执行以上 DDL 时,若顺序不同将导致同步中断,例如下述场景:

- 分表 1 先重命名列,再修改列类型
1. `ALTER TABLE table_name RENAME COLUMN column_1 TO column_2;`(重命名列)
2. `ALTER TABLE table_name MODIFY COLUMN column_3 VARCHAR(20);`(修改列类型)
1. 重命名列:`ALTER TABLE table_name RENAME COLUMN column_1 TO column_2;`
2. 修改列类型:`ALTER TABLE table_name MODIFY COLUMN column_3 VARCHAR(20);`
- 分表 2 先修改列类型,再重命名列
1. `ALTER TABLE table_name MODIFY COLUMN column_3 VARCHAR(20)`(修改列类型)
2. `ALTER TABLE table_name RENAME COLUMN column_1 TO column_2;`(重命名列)
1. 修改列类型:`ALTER TABLE table_name MODIFY COLUMN column_3 VARCHAR(20)`
2. 重命名列:`ALTER TABLE table_name RENAME COLUMN column_1 TO column_2;`

此外,不论是使用“乐观协调”或“悲观协调”,DM 仍是有以下限制:

Expand Down

0 comments on commit 5e8f6e2

Please sign in to comment.