面试题答案
一键面试1. 不同 binlog 格式特点
- Statement 格式:记录的是 SQL 语句,优点是日志量小,节省空间,在简单场景下效率高。缺点是对于一些不确定的函数(如 NOW() 等)或复杂操作,主从复制可能出现数据不一致问题,因为从库执行结果可能与主库不同。
- Row 格式:记录的是每一行数据的更改,优点是主从复制非常安全,能保证数据的一致性,适合数据一致性要求高的场景。缺点是日志量较大,占用更多的磁盘空间和网络带宽。
- Mixed 格式:结合了 Statement 和 Row 的优点,在大多数情况下使用 Statement 格式记录,遇到特定情况(如包含不确定函数等)自动切换为 Row 格式。
2. 考虑因素制定策略
- 网络延迟:
- 如果网络延迟较高,应优先考虑日志量小的格式,以减少网络传输的数据量。此时 Statement 格式或 Mixed 格式在一定程度上更合适。例如,在跨地域的分布式架构中,节点间网络延迟大,采用 Statement 格式可以降低网络传输压力,提高同步效率。但要注意检查是否存在可能导致数据不一致的函数或操作。
- 如果网络带宽充足且延迟较低,Row 格式虽然日志量大,但能保证绝对的数据一致性,对于数据准确性要求极高的场景是更好的选择,如金融交易系统。
- 数据同步需求:
- 对于数据一致性要求极高,不允许出现任何数据不一致情况的场景,如涉及关键业务数据、财务数据等,Row 格式是最佳选择。例如银行转账操作,必须保证主从库数据完全一致,采用 Row 格式可确保每一笔转账记录准确同步。
- 对于一些允许一定程度数据最终一致性的场景,如统计类数据、日志记录等,Statement 格式或 Mixed 格式可以满足需求,且能减少日志量,提高同步效率。
- 节点负载:
- 若节点负载较高,需要尽量减少日志写入和解析的开销。Statement 格式由于日志量小,写入和解析速度相对较快,能减轻节点负载。但在高并发写入场景下,如果存在大量复杂 SQL 语句,可能会增加从库重放 SQL 的计算资源消耗。
- 对于负载较低的节点,可以适当考虑采用 Row 格式,以保证数据一致性,而不会过多影响系统性能。
3. 特定场景下策略调整
假设一个电商订单系统,在平时业务量相对稳定时,对数据一致性要求高但网络延迟较小,可采用 Row 格式,确保订单数据准确同步到从库,用于备份和读操作。
在促销活动期间,业务量剧增,网络延迟增大,节点负载升高。此时可临时调整为 Mixed 格式,对于简单的订单插入、更新操作使用 Statement 格式记录日志,减少日志量和节点负载;对于涉及复杂业务逻辑(如订单金额计算包含自定义函数等)的操作采用 Row 格式,保证数据一致性。活动结束后,再根据系统状态调整回 Row 格式。