数据库读写分离主要解决高并发时,提高系统的吞吐量。因为大部分场景下都是读多写少。下图是数据库读写分离模型。

每次请求打到这个系统后:

读请求,直接读从库

写请求,先写入主库,然后主库将数据同步到其他从库

在高并发或者网络状况不理想时,写完数据后,主库还没来得及将数据同步到从库,其他读请求去读从库,发现从库中的数据仍然是旧数据。这就是读写分离数据库数据不一致的根本原因。

下面给出两种方案去解决这个问题:

缓存标记法

上图流程:

1)A发起写请求,更新了主库,再在缓存中设置一个标记,代表此数据已经更新,标记格式( 用户ID+业务ID+其他业务维度)

2)设置此标记,要加上过期时间,可以为预估的主库和从库同步延迟的时间

3)B发起读请求的时候,先判断此请求的业务在缓存中有没有更新标记

4)如果存在标记,走主库;如果没有走从库。

这个方案就有效了解决了数据不一致的问题。

但这个方案会有个严重的问题,也就是每次的读请求都要到缓存中去判断是否存在缓存标记,如果是单机部署用的是jvm缓存,对性能还好;但如果是集群部署缓存肯定用redis,每次读都要和redis进行交互,这样肯定会影响系统吞吐量。

那么解决这个问题可以用下面这个方案

本地缓存标记

上图流程:

1)用户A发起写请求,更新了主库,并在客户端设置标记,过期时间(预估的主库和从库同步延迟的时间),可以使用cookie实现

2)用户A再发起读请求时,带上这个cookie

3)服务器处理请求时,获取请求传过来的数据,看有没有这个标记

4)有这个业务标记,走主库;没有走从库。

这个方案就保证了用户A的读请求肯定是数据一致的,而且没有性能问题,因为标记是本地客户端传过去的。

但是无法保证其他用户读数据是一致的,但是实际场景很少需要保持其他用户也保持强一致。延迟个几秒也没问题。

mysql读写分离 保持数据一致性_读写分离数据库如何保持数据一致性相关推荐

  1. mysql字段值是什么_什么是数据库字段值

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  2. mysql异地灾备架构_最佳实践 数据库异地灾备

    方案概述 根据企业所在行业.合规要求.数据规模.RPO/RTO要求的不同,数据库灾备目的和要求各不相同,投入成本也是不同的.阿里云数据库灾备解决方案提供实时数据备份能力,满足企业备份多样化选择.通过数 ...

  3. mysql软件分为几种_常见的数据库软件有哪几种

    常见的数据库软件介绍: 一.MySQL MySQL是最受欢迎的开源SQL数据库管理系统,它由 MySQL AB开发.发布和支持. MySQL是一个快速的.多线程.多用户.健壮的SQL数据库服务器.My ...

  4. mysql 云无忧ps教程_华为云数据库MySQL一键开通读写分离,无忧应对企业业务高峰情景...

    业务大促,订单暴增,网站流量暴涨几倍,数据库服务器容量又要扛不住了,眼睁睁看着生意白白溜走,再苦逼也无法解决,"肿"么办? 别担心,一键开通读写分离,而且只需一个连接地址,就能让您 ...

  5. mysql killed进程不结束_优秀的数据库产品——MySQL 云数据库服务

    作为一种低成本,高性能,高可靠性和开放源代码的数据库产品,MySQL已在Internet公司中广泛使用. 例如,淘宝有数千个MySQL服务器. 尽管NoSQL在过去两年中发展迅速,新产品层出不穷,但N ...

  6. mysql galera集群搭建_搭建mysql_galera数据库集群

    1,Mariadb Galera Cluster 集群介绍 Mariadb Galera Cluster 是MySQL高可用性和可扩展的解决方案 Mariadb Galera Cluster 是一套在 ...

  7. mysql fa连接池中间件_小米开源数据库中间件gaea

    简介 Gaea是小米商城/系统组研发的基于 mysql 协议的 数据库 中间件,目前在小米商城大陆和海外得到广泛使用,包括订单.社区.活动等多个业务.Gaea支持分库分表.sql路由.读写分离.连接池 ...

  8. mysql事务的四大特性_浅谈数据库事务四大特性

    数据库四大特性分别是:原子性.一致性.分离性.持久性.下面我们看看具体介绍. 原子性 事务的原子性指的是,事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据修改操作要么全部执行,要么完全不执行. ...

  9. mysql被格式化恢复数据_三种常见数据库文件恢复方法介绍

    数据库可以说是一个数据仓库,因此在数据安全方面,每个数据库从备份到恢复,都有自己的一套方法流程.今天我们就从常见的MySQL, SQL以及Oracle三种数据库,来讲讲数据库恢复方法. 首先,最简单的 ...

最新文章

  1. python【数据结构与算法】—广度优先搜索(Breadth-First search)
  2. mac下server开发环境配置
  3. hdu 1505 City Game
  4. Titanic(泰坦尼克号生存预测)---(1)
  5. Laravel核心解读--Contracts契约
  6. ubuntu 虚拟机上的 django 服务,在外部Windows系统上无法访问
  7. mysql error trace_防止DedeCMS错误警告日志data/mysql_error_trace.inc暴露后台管
  8. 【C语言】利用递归解决猴子吃桃问题
  9. mysql语法子查询_(十四)MySQL语法-子查询(二)
  10. 微服务架构系列文章、精品教程
  11. JavaWeb——动态 web 资源开发
  12. shrio 权限管理filterChainDefinitions过滤器配置
  13. Selenium基础用法
  14. 经常失眠怎么办?失眠最快入睡的方法
  15. 快速在线查看字体,编辑字体
  16. pc端手机短信发送的介绍
  17. 高等数学学习笔记——综合练习——定积分性质与微积分基本定理(1)
  18. usesCleartextTraffic
  19. 为什么大部分对特斯拉的公众认知都是错误的呢?
  20. mysql主从配置 GTID 主从配置

热门文章

  1. jdbc basedao mysql_Java使用JDBC连接mysql、sqlserver、orcle数据库的baseDao类
  2. 7 php 内存泄漏_php 大数组导致内存泄露问题
  3. python内置模块在哪个文件夹_用 Python 内置模块处理 ini 配置文件
  4. 标签在线调整 http://labelary.com/viewer.html
  5. 利用计算机的图形能力来进行设计工作的是,计算机一级MSOffice考试巩固练习题...
  6. Java文档对象_java从文件读取对象
  7. datatable的数据进行组内排序_Spark实现分组Top-k排序的四种方案(scala语言)
  8. 如何在本机安装mysql_机器人之如何在本机安装MySQL,并配置电脑为数据库服务器...
  9. 大朗机器人餐厅在哪里_获得海内外一致好评,送餐机器人为中国餐饮打开新世界...
  10. android 获取sim卡信息list_提醒:手机要设置SIM卡密码!如何设置?有何用处?攻略来了...