ColumnMap vs reversed job
c0494133d4 opened this issue · 4 comments
c0494133d4 commented
考虑两种反向机制
- job finish & reversed job WaitOn
- 以“创建反向任务”指代
- #643
- TwoWaySync
考虑
正向任务: (id, val1, val2) -> (id, val2) -- ColumnMapFrom = [id, val2]
反向任务: (id, val1, val2) <- (id, val2) -- ColumnMapFrom = ?
问题在于反向任务没有ColumnMap, 无法处理列数量不同的问题.
该案例中反向任务可以使用
ColumnMapFrom = [id, val2]
ColumnMapTo = [id, val2]
但要求val1 nullable, 或有默认值.
建立反向任务需要有自动/手动填写ColumnMap的机制.
Deleted user commented
关于“创建反向复制任务”
- 正向和反向job不同时进行.
- 反向任务创建后, 暂时挂起, 等待正向任务finish
- 正向任务触发finish后, 记录正向任务源端Gtid为targetGtid, 此时正向任务目标端未必执行完毕
- 反向任务等待正向任务执行到targetGtid后, 反向任务启动
适用于切换复制方向的场景.
Deleted user commented
关于TwoWaySync
- 持续进行双向复制
- 代替之前双job方案
- 双job有潜在的无限循环问题
目前TwoWaySync会在反向任务使用正向任务的ColumnMap, 实为Bug.
Deleted user commented
方案1
对于反向任务, 交换 使用正向任务的ColumnMapFrom/To
(参数行为见文档).
考虑下列几个场景, 都能满足使用意图
选择列
正向
- src table (id, val1, val2)
- dst table (id, val2)
- ColumnMapFrom (id, val2)
- ColumnMapTo (id, val2)
反向
- from (id, val2)
- to (id, val2)
- 要求val1 可空或有默认值
选择列 + 重建自增id + 列重命名
正向
- src table (id auto_increment, val1, val2)
- dst table (id auto_increment, val1x, val2x)
- from (val1, val2)
- to (val1x, val2x)
reverse job
- from (val1x, val2x)
- to (val1, val2)
目标端多出列(有默认值)
正向
- src table (id, val1)
- dst table (id, val2 default 42, val1x)
- from (id, val1)
- to (id, val1x)
反向
- from (id, val1x)
- to (id, val1)
asiroliu commented
verified:
version:
9.9.9.9-master-6075dea
验证点:
- reversed job
-- 源端多出列
-- 目标端多出列
-- 列重命名
-- 列乱序 - TwoWaySync
-- 源端多出列
-- 目标端多出列
-- 列重命名
-- 列乱序