「扫码关注我,面试、各种技术(mysql、zookeeper、微服务、redis、jvm)持续更新中~」
随着业务的发展,线上生产环境数据量猛增,财务信息一个表的数据自从2008年系统上线以来已接近7千万,而且现在每天的增量也越来越快,由于业务中存在退费场景,所以历史财务数据也不容易归档处理。但是财务应用场景中含有大量的查询和导出,显然,将财务数据都存储在Mysql(建议单表数据量不超过2千万)中已经满足不了实际应用场景。
如何解决财务数据的查询和导出问题成为我们必须解决的一个难题,经过技术选型,我们最终选择了数据依然存储在Mysql(需要支持事务)中,使用ES来聚合数据进行查询。
那如何将数据从Mysql同步到ES并保证数据一致性是重点。一共梳理出来以下几种同步方式:
1.数据库建触发器方式,但是影响系统性能;
2.对数据行进行MD5加密对比,也会影响系统性能;
3.采用MQ方式增量新增,但增加了系统复杂度,同时需要保证MQ精准投递、消费;
4.根据时间戳定时任务同步,但是需要保证时间戳实时更新;
5.利用cancel监听binlog动态新增,但是存在cancel单点问题,同时系统复杂度会增高。
经过和运维沟通,采用binlog方式同步,由于涉及到老数据源(按照分校分库)太多