如何构建批流一体数据融合平台的一致性语义保证?(16)
数据一致性衔接
关于批量数据与实时数据如何衔接的问题,主要有两个关键点:
第一,当开始进行一个批量数据同步时,以关系型数据库为例,你应该拿到当时一个整体数据的 Snapshot,并在一个事务中同时记录当时对应的日志起始值。以 MySQL 为例,当要获取一个 Binlog 起始偏移量时,需要开启一个 START TRANSACTION WITH CONSISTENT SNAPSHOT,这样才能保证完成全量之后,后期的读取增量日志同步不会产生重复数据。
第二,如果采用增量同步模式,则必须根据实际的数据业务领域,采用一种比较灵活的增量表达式,才能避免读到写到一半的数据。比如在你的数据中,其 ID 是一个完全自增,没有任何重复的可能,此时只需每次单纯的大于上一次同步的最后一条记录即可。
但如果是一个时间戳,无论精度多高,都有可能在数据库产生相同的时间戳,所以安全的做法是每次迭代时,取比当前时间稍微少一点,保证留出一个安全时间,比如五秒甚至一分钟,这样你永远不会读到一些时间戳可能会产生冲突的这部分数据,避免遗漏数据。这是一个小技巧,但如果没有注意,在使用过程中就会产生各种各样的问题。
推荐阅读
- 小鱼人|如何在新赛季稳定上分?善于抓失误的小鱼人,值得认真练上一波
- 阴阳师|阴阳师SR川猿强度如何 是否值得抽卡 改变斗技环境 大佬的新玩具
- 手机游戏|梦幻西游手游:活力如何换金币 一切都已给出 就看你的选择
- 华佗|三国杀:两位\奶爸\,朱治与华佗比,强度如何呢?
- 亲朋上分|《亲朋上分》266391亲朋下分亲朋上下分永劫无间崔三娘技能介绍 崔三娘如何获得更多技能
- s6|金铲铲之战:S6双城传说如何才能快速上手?基础知识很关键
- |冰雪传奇:平民玩家四转后如何打金
- 穿越火线|CF:传说武器再度上新,那王者、炫金该如何发展?
- 打野|打野已经被削到几乎不能再削了,到底如何平衡打野位置?
- 电子竞技|新华社对话明凯、阿布,探讨电竞选手是如何炼成的?宁王无辜躺枪