面试题答案
一键面试基于语句的复制机制(Statement - Based Replication,SBR)
- 优点:
- 日志量小:只记录执行的SQL语句,相比于记录每一行数据的变化,日志量显著减少,在网络传输和存储方面开销小,适合数据量较大的场景。
- 兼容性好:对于一些函数(如自定义函数等)和存储过程,基于语句复制只需记录调用语句,在主从库兼容性上表现较好,因为从库只需按照主库记录的语句重新执行一遍。
- 缺点:
- 数据一致性问题:某些情况下可能导致主从数据不一致。例如,在主库执行
INSERT INTO table (col1) VALUES (NOW())
,主库和从库执行时间可能有细微差异,导致插入数据不同。还有一些不确定的函数,如RAND()
等,在主从库执行结果可能不同。 - 复杂逻辑处理困难:对于电商订单系统中复杂业务逻辑,如果涉及到多个表的联动更新等复杂操作,基于语句复制可能无法准确在从库还原主库的操作顺序和状态,从而导致数据不一致。
- 数据一致性问题:某些情况下可能导致主从数据不一致。例如,在主库执行
基于行的复制机制(Row - Based Replication,RBR)
- 优点:
- 数据一致性高:记录每一行数据的实际变化,能精确地在从库还原主库的数据状态,有效避免因执行顺序或函数不确定性导致的主从数据不一致问题,非常适合电商订单系统这种对数据一致性要求高的场景。
- 复杂操作处理好:对于复杂的业务逻辑,如订单创建时涉及多个表关联插入数据、支付处理后订单状态更新等复杂操作,基于行的复制能准确复制每一行数据的改变,确保从库与主库数据完全一致。
- 缺点:
- 日志量大:由于记录每一行数据的变化,日志量比基于语句的复制大很多,这会增加网络传输和存储的开销,对于数据量较大的电商订单系统,可能会对性能产生一定影响。
- 主从兼容性问题:某些特殊的操作,如对系统表(如mysql库下的表)进行操作时,基于行的复制可能在主从库兼容性上出现问题。
更适合的机制及原因
在电商订单系统场景下,基于行的复制机制更适合。原因是电商订单系统对数据一致性要求极高,订单创建、支付处理和订单状态更新等业务逻辑复杂,基于行的复制虽然日志量大,但能保证主从库数据准确一致,避免因数据不一致给业务带来风险,如订单状态混乱、支付金额不一致等问题,确保系统稳定可靠运行。