首页 > 数据库 >数据库优化学习笔记_主从分离(主改从查)

数据库优化学习笔记_主从分离(主改从查)

时间:2022-10-12 18:24:43浏览次数:56  
标签:宕机 主改 从查 更新 查询 线程 MQ 数据 主从

查询分离

适用场景:1.数据量大 2.所有数据都需要写 3.无法分离冷热数据 4.即使是冷数据,依然要读写保持更新因此没法冷热分离

查询分离从三个方式去建设:

1)同步建立

2)异步建立

3)binlog方式

 

 

1)同步建立:

 

 优点:可以一定程度上保证主从数据的一致性,可以从库容灾。(也可以MQ建立)

 缺点:更新数据的时候要等待从库备份回应,数据更改的效率会变低,减缓了效率。

 

2)异步建立:

 

优点:不会影响我们在改数据的时候的效率,容灾

缺点:万一备份宕机/从库过程失败?数据一致性会存在问题。解决方法可以从Kafka的容灾机制去理解(partition分布式备份,选举leader,值得学习)

 

3)binlog方式(主流方式)

 

 

 可以利用Canal去实现(如果主数据库就是MySQL的话用Canal容灾/备份/日志收集应该是够用的)

 

 

思考:

Q:MQ宕机了怎么办?那就意味着搬运的数据的一致性出现问题(生产者向MQ中搬运了一条数据,此时MQ宕机了,生产者以为消费者消费了,就不往MQ中搬运消息,但是由于MQ宕机了导致消费者没有收到)

A:可以往数据中加入一个标记字段,对数据本身没有任何影响,比如NeedUpdateData=1。生产者把数据批量注入MQ后把NotNeedUpdateData=1,消费者去消费时先批量查询数据然后更新,把NotNeedUpdateData=1,然后把MQ中的数据和消费者中的数据进行 ⊕运算 ,从而保证消息是否被消费  (也可以参照kafka的事务机制来保证数据一致性)

      

 

Q:消息的时序性问题?

某个订单 A 更新了 1 次数据变成 A1,线程甲将 A1 的数据搬到查询数据中。不一会儿,后台订单 A 又更新了 1 次数据变成 A2,线程乙也启动工作,将 A2 的数据搬到查询数据中。如果甲线程更新比乙线程快,那么

数据是正确的,那么如果甲线程堵塞了导致比乙线程慢,那么会出现先是更新成A2然后甲线程恢复后更新变成了过期的A1!

A:每次更新都保存上次更新的时间 LastUpdateTime,然后每个线程更新查询数据后,检查当前订单 A 的 LastUpdateTime 是否跟线程刚开始获得的时间一样,且 NotNeedUpdateData 是否等于 0?,如果都满足的话,我们就将                      NotNeedUpdateData 的值改为 1 ,然后再做一次搬运。

 

 

Q:消息的幂等问题?(幂等就是指多次操作和一次操作是一致的 f(x)=f(f(x)) )

 A:主数据的订单 A 更新后,我们在查询数据中插入了 A,此时系统出问题了,系统误以为查询数据没更新,又把订单 A 插入更新了一次。

  所谓幂等,就是不管更新查询数据的逻辑执行几次,结果都是我们想要的结果。因此,考虑消费端并发性的问题时,我们需要保证更新查询数据幂等。

 

主从分离的不足:

1)主数据量越来越大后,写操作还是慢,到时还是会出问题。
2)主数据和查询数据不一致时,业务逻辑需要查询数据保持一致性。

标签:宕机,主改,从查,更新,查询,线程,MQ,数据,主从
From: https://www.cnblogs.com/leehl8016/p/16785506.html

相关文章

  • 【redis】主从同步原理
    1.为什么需要主从同步在使用redis服务的时候如果时单机服务,一旦单机服务宕机了,那么可能导致我们整个系统处于不可用状态,或者当系统的访问量大了以后单机的redis服......
  • MySQL主从同步原理
    1MySQL主从同步实现方式MySQL主从同步是基于记录原始sql语句的BinLog实现BinLog的三种日志格式包括:Statement记录原始SQL语句,会导致更新时间与原库不一致。比如up......
  • Redis主从复制
    1、主从复制单个Redis如果因为某种原因宕机的话,可能会导致Redis服务不可用,可以使用主从复制实现一主多从,主节点负责写的操作,从节点负责读的操作,主节点会定期将数据同......
  • StoneDB 主从切换实践方案
    StoneDB主从切换实践方案StoneDB的主从切换既可以手动切换,也可以自动切换,自动切换通常需要使用第三方中间件。本文介绍的是较为常用的中间件ReplicationManager,当mast......
  • StoneDB 主从切换实践方案
    StoneDB主从切换实践方案StoneDB的主从切换既可以手动切换,也可以自动切换,自动切换通常需要使用第三方中间件。本文介绍的是较为常用的中间件ReplicationManager,当mas......
  • StoneDB主从切换实践方案
    StoneDB的主从切换既可以手动切换,也可以自动切换,自动切换通常需要使用第三方中间件。本文介绍的是较为常用的中间件ReplicationManager,当master发生宕机时,可自动切换......
  • MySQL主从复制-利用冷备份搭建从库
    1、启动从库,目录文件配置路径:basedir=/u01/mysql/basedatadir=/u01/mysql/datatmpdir=/u01/mysql/tmp2、将冷备份data目录复制到新实例下的,datadir$lltotal20drwxr......
  • MySQL8.0主从关系 - 主人与仆从
    MySQL原本是一个开放源码的关系数据库管理系统,原开发者为瑞典的MySQLAB公司,该公司于2008年被昇阳微系统(SunMicrosystems)收购。2009年,甲骨文公司(Oracle)收购昇阳微系......
  • Mysql之主从复制原理
    1.主从复制步骤: 具体步骤:1、从库通过手工执行changemasterto语句连接主库,提供了连接的用户一切条件(user、password、port、ip),并且让从库知道,二进制日志的起点位置......
  • redis 主从复制
    redis主从配置只需要配置从库,redis默认本身是主库查看当前库的信息>inforeplication#查看当前库的信息#Replicationrole:master#角色connected_slaves:......