课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
随着互联网的不断发展,越来越多的程序员都开始学习数据库的应用架构,而今天我们就通过案例分析来了解一下,数据库的数据同步以及应用场景。
一、如何保障数据正确性
1、顺序性
用户配置的每一个BinlogSource都会绑定一个Talos的topic,在进行消费的时候需要保证同一条mysql记录操作的顺序性,消息队列Talos是无法保证全局消息有序的,只能保证partition内部有序。
对于配置分库分表或者多库同步任务的BinlogSource,服务会根据库表信息进行hash,将数据写入相应的partiton,保证同一张表的数据在一个partition中,使得下游消费数据的顺序性;对于单表同步的作业目前使用一个partition保证其数据有序。
2、一致性
如何保证在作业异常退出后,作业重新启动能够完整地将mysql中的数据同步到下游系统,主要依赖于以下三点
服务会记录作业同步的offset,重启后从上次commit的offset继续消费
Binlog数据的顺序性保证了即便数据被重复消费(未commit的数据),也能对同一条记录的操作以相同的顺序执行
下游存储系统kudu,Es,Redis基于主键的操作能够保证binlog重复回放后数据的终一致性
二、应用场景
1、实时更新缓存
业务查询类服务往往会在mysql之上架设一个缓存,减少对底层数据库的访问;当mysql库数据变化时,如果缓存还没有过期那么就会拿到过期的数据,业务期望能够实时更新缓存;
利用binlog服务,根据策略实时将数据同步到redis中,这样就能够保证了缓存中数据有效性,减少了对数据库的调用,从而提高整体性能。
2、异步处理,系统解耦
随着业务的发展,同一份数据可能有不同的分析用途,数据成功写入到mysql的同时也需要被同步到其他系统;如果用同步的方式处理,一方面拉长了一次事务整个流程,另一方面系统间也会相互影响
数据在mysql中操作成功后才会记录在binlog中,保证下游处理到时的一致性;使用binlog服务完成数据的下发,有助于系统的解耦
3、即席查询的BI系统
因为同样是sql接口,对使用者的切换成本也是较低的,数据同步到更适合的存储中进行查询,也能够避免因大查询而对原mysql库其他查询的影响
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。