数据库设计 - 主从一致性

一、What

主从一致性是指主库和从库在某一时刻数据可能会不一致。

二、Why

因为主从分组架构中,从库是需要时间来同步主库的数据库的,所以在某一时刻数据可能会有差别。比如主库0时刻修改了一条记录,500毫秒后才会同步到从库,那么从0时刻至500毫秒时刻主从的数据是不一致的,如果此时刚好有一个查询打到从库,则读到的是旧数据。

三、How

  1. 方案一:忽略不计
    如果业务侧是可以忍受读到短时间的一个脏数据的(通常只要用户刷新一下就是正确数据),那么忽略不计其实是最经济实惠的方式,只要业务允许,那么我们的架构也可以简单一些。

  2. 方案二:强制读主
    强制读主的方式就是抛弃读写分离的架构设计了,此时可以加入缓存提升读的性能。
    在这里插入图片描述

  3. 方案三:选择性读主
    这是一种很有意思的设计方式,需要缓存进行配合。
    写过程:
    在这里插入图片描述

a. 假设主从延时为1秒
b. 在写入主库之前,先缓存一个key,这个key用来标识哪些数据被更新了(比如哪一个库,哪一个表,哪一个主键),缓存的失效时间就是同步的时延,也就是1秒
c. 正常写入主库(主从自动同步),这一步和正常流程没有区别。

读过程:
在这里插入图片描述

a. 尝试从缓存中获取要查询数据库的对应的key
b. 如果能从缓存中取到,说明还在同步的时延内,此时选择读主
c. 如果拿不到,则说明主从已同步,则直接读从库。

猜你喜欢

转载自blog.csdn.net/hudmhacker/article/details/108259274