深入数据库同步技术(2)- 时序性保障

添加时间: 2018-05-10

在上一部分《深入数据库同步技术(1)- 基础篇》中,我们为大家介绍了数据库同步的一些基本概念和普遍存在的痛点问题,这些问题大家平时工作或多或少也会遇到,读起来有些乏善可陈。

所以,在这一部分,我们将为大家介绍数据同步中的另一个比较新鲜的话题:时序性保障。

01

时序性及其重要意义

什么是时序性?

时序性就是事件发生的先后顺序。对于数据库来讲,事件的最小单元就是事务(即Transaction,每提交一个事务就产生一个事件,无论事务涉及的数据量有多大或者参与的表有多少)。

作为一个正常的OLTP数据库,可能每时每刻在每张表上都在发生事务性操作。类似于事件溯源(Event Sourcing)机制,我们希望将源库上的事务按照发生的时间先后顺序(也就是事务的提交顺序),依次应用在目的库上,这样就会保证源表和目的表数据状态的一致性和事务的不可撕裂性。

所以,数据库的时序性有两个显著特征:一是以事务为单位,二是保持事务发生的先后顺序。

为什么时序性会如此重要,WWW.5608.COM

普通情况下我们做数据同步,一个线程负责一张表的同步和数据处理,各个线程间互不干涉,也没有任何联系,这样会产生一些问题。

假设有一个用户表和一个用户投资记录表,很显然用户投资记录表中有一个外键字段指向用户表的用户ID。如果单纯使用每张表/每线程的模式,很可能用户投资记录已经同步到目的表了,但是用户表的记录还没有同步过去,在目的库形成“子先于父存在”的情况。这不但让目的表不能像源表那样强制添加主外键约束,还会对目的端应用层的增量查询和数据汇总造成困扰。如果我们在同步过程中保持了时序性,则不会有此类问题发生。

标签 数据库 线程 技术 版本 事务

友情链接:
Copyright 2017-2018 澳门银河在线官方网址 http://www.tiangouba.com 版权所有,未经协议授权禁止转载。