mysql读写分离 保持数据一致性_读写分离数据库如何保持数据一致性
数据库读写分离主要解决高并发时,提高系统的吞吐量。因为大部分场景下都是读多写少。下图是数据库读写分离模型。
每次请求打到这个系统后:
读请求,直接读从库
写请求,先写入主库,然后主库将数据同步到其他从库
在高并发或者网络状况不理想时,写完数据后,主库还没来得及将数据同步到从库,其他读请求去读从库,发现从库中的数据仍然是旧数据。这就是读写分离数据库数据不一致的根本原因。
下面给出两种方案去解决这个问题:
缓存标记法
上图流程:
1)A发起写请求,更新了主库,再在缓存中设置一个标记,代表此数据已经更新,标记格式( 用户ID+业务ID+其他业务维度)
2)设置此标记,要加上过期时间,可以为预估的主库和从库同步延迟的时间
3)B发起读请求的时候,先判断此请求的业务在缓存中有没有更新标记
4)如果存在标记,走主库;如果没有走从库。
这个方案就有效了解决了数据不一致的问题。
但这个方案会有个严重的问题,也就是每次的读请求都要到缓存中去判断是否存在缓存标记,如果是单机部署用的是jvm缓存,对性能还好;但如果是集群部署缓存肯定用redis,每次读都要和redis进行交互,这样肯定会影响系统吞吐量。
那么解决这个问题可以用下面这个方案
本地缓存标记
上图流程:
1)用户A发起写请求,更新了主库,并在客户端设置标记,过期时间(预估的主库和从库同步延迟的时间),可以使用cookie实现
2)用户A再发起读请求时,带上这个cookie
3)服务器处理请求时,获取请求传过来的数据,看有没有这个标记
4)有这个业务标记,走主库;没有走从库。
这个方案就保证了用户A的读请求肯定是数据一致的,而且没有性能问题,因为标记是本地客户端传过去的。
但是无法保证其他用户读数据是一致的,但是实际场景很少需要保持其他用户也保持强一致。延迟个几秒也没问题。
mysql读写分离 保持数据一致性_读写分离数据库如何保持数据一致性相关推荐
- mysql字段值是什么_什么是数据库字段值
{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...
- mysql异地灾备架构_最佳实践 数据库异地灾备
方案概述 根据企业所在行业.合规要求.数据规模.RPO/RTO要求的不同,数据库灾备目的和要求各不相同,投入成本也是不同的.阿里云数据库灾备解决方案提供实时数据备份能力,满足企业备份多样化选择.通过数 ...
- mysql软件分为几种_常见的数据库软件有哪几种
常见的数据库软件介绍: 一.MySQL MySQL是最受欢迎的开源SQL数据库管理系统,它由 MySQL AB开发.发布和支持. MySQL是一个快速的.多线程.多用户.健壮的SQL数据库服务器.My ...
- mysql 云无忧ps教程_华为云数据库MySQL一键开通读写分离,无忧应对企业业务高峰情景...
业务大促,订单暴增,网站流量暴涨几倍,数据库服务器容量又要扛不住了,眼睁睁看着生意白白溜走,再苦逼也无法解决,"肿"么办? 别担心,一键开通读写分离,而且只需一个连接地址,就能让您 ...
- mysql killed进程不结束_优秀的数据库产品——MySQL 云数据库服务
作为一种低成本,高性能,高可靠性和开放源代码的数据库产品,MySQL已在Internet公司中广泛使用. 例如,淘宝有数千个MySQL服务器. 尽管NoSQL在过去两年中发展迅速,新产品层出不穷,但N ...
- mysql galera集群搭建_搭建mysql_galera数据库集群
1,Mariadb Galera Cluster 集群介绍 Mariadb Galera Cluster 是MySQL高可用性和可扩展的解决方案 Mariadb Galera Cluster 是一套在 ...
- mysql fa连接池中间件_小米开源数据库中间件gaea
简介 Gaea是小米商城/系统组研发的基于 mysql 协议的 数据库 中间件,目前在小米商城大陆和海外得到广泛使用,包括订单.社区.活动等多个业务.Gaea支持分库分表.sql路由.读写分离.连接池 ...
- mysql事务的四大特性_浅谈数据库事务四大特性
数据库四大特性分别是:原子性.一致性.分离性.持久性.下面我们看看具体介绍. 原子性 事务的原子性指的是,事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据修改操作要么全部执行,要么完全不执行. ...
- mysql被格式化恢复数据_三种常见数据库文件恢复方法介绍
数据库可以说是一个数据仓库,因此在数据安全方面,每个数据库从备份到恢复,都有自己的一套方法流程.今天我们就从常见的MySQL, SQL以及Oracle三种数据库,来讲讲数据库恢复方法. 首先,最简单的 ...
最新文章
- python【数据结构与算法】—广度优先搜索(Breadth-First search)
- mac下server开发环境配置
- hdu 1505 City Game
- Titanic(泰坦尼克号生存预测)---(1)
- Laravel核心解读--Contracts契约
- ubuntu 虚拟机上的 django 服务,在外部Windows系统上无法访问
- mysql error trace_防止DedeCMS错误警告日志data/mysql_error_trace.inc暴露后台管
- 【C语言】利用递归解决猴子吃桃问题
- mysql语法子查询_(十四)MySQL语法-子查询(二)
- 微服务架构系列文章、精品教程
- JavaWeb——动态 web 资源开发
- shrio 权限管理filterChainDefinitions过滤器配置
- Selenium基础用法
- 经常失眠怎么办?失眠最快入睡的方法
- 快速在线查看字体,编辑字体
- pc端手机短信发送的介绍
- 高等数学学习笔记——综合练习——定积分性质与微积分基本定理(1)
- usesCleartextTraffic
- 为什么大部分对特斯拉的公众认知都是错误的呢?
- mysql主从配置 GTID 主从配置
热门文章
- jdbc basedao mysql_Java使用JDBC连接mysql、sqlserver、orcle数据库的baseDao类
- 7 php 内存泄漏_php 大数组导致内存泄露问题
- python内置模块在哪个文件夹_用 Python 内置模块处理 ini 配置文件
- 标签在线调整 http://labelary.com/viewer.html
- 利用计算机的图形能力来进行设计工作的是,计算机一级MSOffice考试巩固练习题...
- Java文档对象_java从文件读取对象
- datatable的数据进行组内排序_Spark实现分组Top-k排序的四种方案(scala语言)
- 如何在本机安装mysql_机器人之如何在本机安装MySQL,并配置电脑为数据库服务器...
- 大朗机器人餐厅在哪里_获得海内外一致好评,送餐机器人为中国餐饮打开新世界...
- android 获取sim卡信息list_提醒:手机要设置SIM卡密码!如何设置?有何用处?攻略来了...