binlog的回放效率是数据同步的瓶颈,需要设计一种机制保证重放binglog尽量的并行,并且还能保证一致性。
解析binlog,存放到一个有限长度队列里,当队列长度满足数量或者时间满足了,根据UK是否冲突,将队列里记录分配到一个分组里,每个分组里时序和binlog原始顺序一致,将每个分组, 放到不同的队列去处理,每个线程消费一个队列。
这里的update的处理需要特别的注意,update 涉及到UK的变化,需要拆分到原子的操作,delete和insert。
语句 |
处理后 |
insert |
insert |
delete |
delete |
update |
delete insert |