广告
返回顶部
首页 > 资讯 > 数据库 >数据一致性
  • 628
分享到

数据一致性

数据一致性 2014-10-25 03:10:46 628人浏览 无得
摘要

在分布式环境下,为了避免设备与网络不可靠带来的影响,通常会存储多个数据副本。逻辑上的一份数据,同时存储在多个物理副本上,带来了数据已执行的问题。数据一致性问题的前提是发生读写操作,就是多个副本上的读写策略。 数据一致性从不同的视角,可以分

数据一致性

分布式环境下,为了避免设备与网络不可靠带来的影响,通常会存储多个数据副本。逻辑上的一份数据,同时存储在多个物理副本上,带来了数据已执行的问题。数据一致性问题的前提是发生读写操作,就是多个副本上的读写策略。

数据一致性从不同的视角,可以分为状态一致性 和 操作一致性。

状态一致性指数据所处的客观,实际状态体现的一致。

操作一致性指外部用户通过协议约定的操作,能够读到一致的数据。

从状态视角看,任何数据变更后,数据只有两种状态:所有副本一致 或 不一致。正常情况下,不一致是暂时的,状态会由不一致转变为一致。

由此衍生出强一致性 和 最终一致性。

Mysql举例,mysql的主从同步机制,有异步,全同步 和 半同步之分。

异步指mysql主库将事务信息写入binlog文件中的时候,此时主库会通过binlog dump线程给从库发送这些新的binlog变化,然后并不等待从库的响应继续提交事务并写入binlog,所以主库并不保证这些事务变化的binlog数据会传输并应用到任何从库。

全同步指当主库提交事务的binlog后,所有的从库节点必须全部收到事务并且apply并且提交这些内容之后,即io_thread和sql_thread完成所有binlog变化的接受的应用执行,主库的线程才可以继续进行后续操作,但是缺点是,主库完成一个事务的时间会被拉长,性能急剧降低。

半同步介于异步和全同步之间,主库只需要等待至少一个从节点,收到并且flush binlog到relay log文件即可,主库不需要等待所有从库给主库反馈,这里只是一个收到的反馈,而并不是从库已经完成并提交的反馈,即从库只应用完成io_thread内容即可无需等到sql_thread的执行完成。

全同步即强一致性,该模式存在比较大的问题:

性能差。需要将数据同步给从库,才给用户返回成功。主库的响应时间取决于从库中时延最长的那个。

可用性问题。任何设备都有可能出现故障。但在全同步复制模式下,集群中的节点被串联起来,如果单机可用性是 95%,那么集群整体的可用性就是 N个95%相乘,3个节点,可用性就是95%*95%*95%=85.7%,跟单机相比反而降低了。

所以再生产上很少会采用全同步这种方案。

最终一致性可以理解为主节点执行写操作并反馈成功时,不要求其他副本与主副本保持一致,但在经过一段时间后这些副本最终会追上主副本的进度,重新达到数据状态的一致。

从状态视角看,也存在很多问题,此时就需要从操作视角看。

最终一致性,在语义上包含了很大的不确定性,所以很多时候并不是直接使用,而是加入一些限定条件,也就衍生出了若干种一致性模型。

假设有一主两从三台数据库

1、写后读一致性

      你发了一条朋友圈,你可以立刻看到这条消息,此时你刷新朋友圈,也应该看到这条消息,这就是写后读度一致性。从数据的角度来解析:

      你发送的信息,保存在主库中,此时主库会同步给两个从库,数据都同步成功了,你一直刷新,自然都会看到。

      如果只写入了主库,主库还没来得及同步给两个从库,此时你刷新一下,请求被分配到从库去读,这条消息就暂时看不到了。

      如果主库成功同步给一个从库A,还有一个从库B在同步过程中,刷新请求落在从库A,你可以看到消息,然后再次刷新,请求落在从库B,又突然看不到你发的消息了,此时你不会崩溃吗?

      写后读一致性要求我们写了一条数据进主库,之后不管有没有同步成功,我们都能看到自己写入的这条记录。

     实现方式:可以将自己写后的读,指向主库。

单调读一致性

      当你的朋友看到你发的朋友圈(从库A读取的数据)并点赞后,再刷新一次(从库B读取数据),结果发现消息没有了(从库A同步成功,从库B还在同步过程中),当从库A和B都同步成功,你朋友再刷新朋友圈,又看到你发的朋友圈,你朋友也会很懵逼。

     单调读一致性就是说用户读到一个值,不会读到比这个值更旧的值。

     假如X被赋值3次,分别是10,20,30,当你读到20时,后续只能读到20或30,不能再读到10。

     实现方式:用户和副本做映射关系,比如通过hash把用户id固定在某一副本上。

3、前缀一致性

      假如你朋友发了朋友圈,你在下面问他“中午吃的什么?”,你朋友在朋友圈回复你“中午吃的鱼”。你们远在国外的朋友看到朋友圈 评论是“中午吃的鱼”“中午吃什么”。两个评论顺序反了。这可能是因为数据同步时,网络传输问题,导致从节点接受顺序 和 写入顺序不一致。

      问题和回答存在一定的因果关系,但是同步时,忽略了这种关系。所以需要前缀一致性,可以考虑在原有的评论数据上增加一种显式的因果关系,这样系统可以据此控制在其他进程的读取顺序。     

线性一致性

      前缀一致性是显式指定一种关联关系,但实际场景可能更加复杂,不可能显式的加关系,所以就有了线性一致性。

      线性一致性(Linearizability)就是建立在事件的先后顺序之上的。在线性一致性下,整个系统表现得好像只有一个副本,所有操作被记录在一条时间线上,并且被原子化,这样任意两个事件都可以比较先后顺序。

      但是,集群中的各个节点不能做到真正的时钟同步,这样节点有各自的时间线。那么,如何将操作记录在一条时间线上呢?这就需要一个绝对时间,也就是全局时钟。

5、因果一致性

      线性一致性强依赖于时间,还是有其弊端,因此有了因果一致性。因果一致性弱于线性一致性,但是有更好的并发性能。

      因果一致性的基础是偏序关系,也就是说,部分事件顺序是可以比较的。至少一个节点内部的事件是可以排序的,依靠节点的本地时钟就行了;节点间如果发生通讯,则参与通讯的两个事件也是可以排序的,接收方的事件一定晚于调用方的事件。

     因果一致性没有依赖于全局时钟,但依赖于逻辑时钟,借助逻辑时钟仍然可以建立全序关系,当然这个全序关系是不够精确的。因为如果两个事件并不相关,那么逻辑时钟给出的大小关系是没有意义的。

© 著作权归作者所有 打赏 点赞 (0) 收藏 (0) 分享 微博 QQ 微信 打印 举报 上一篇: Docker笔记 下一篇: linux性能优化--针对CPU的一些指标

幽冥领域

粉丝 2 博文 33 码字总数 21369 作品 0 成都 关注 私信 提问 加载中 请先登录后再评论。
插入表情 {{ emoji.type }} 插入软件 发表评论
删除一条评论

评论删除后,数据将无法恢复

取消 确定 相关文章 最新文章 开源数据访问组件--Smark.Data

Smark.Data是基于Ado.net实现的数据访问组件,提供基于强类型的查询表达式进行灵活的数据查询,统计,修改和删除等操作;采用基于条件驱动的操作模式,使数据操作更简单轻松;内部通过标准SQL...

泥水佬 2013/03/12 2.6K 0 数据中心生命周期管理--Foreman

Foreman是一个集成的数据中心生命周期管理工具,提供了服务开通,配置管理以及报告 功能,和Puppet Dahboard一样,Foreman也是一个Ruby on Rails程序.Foreman和 Dashboard不同的地方是在于,Fore...

匿名 2012/10/24 1.5W 0 python数据分析工具包--pandas

Python Data Analysis Library 或 pandas 是连接 SciPy 和 NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集...

匿名 2012/10/30 2.1W 2 轻量级数据存储服务--LLServer

LLServer是本人基于libevent和leveldb这两个开源软件,开发的轻量级数据存储服务器软件,借助libevent高效网络接口实现对leveldb的访问封装。 其支持Http协议和memcached协议。也就是可以通过...

代震军 2012/11/06 1K 0 ORM数据访问组件--ELinq

ELinq 是一个轻量简单易用的开源Linq ORM数据访问组件,支持Nullable类型和枚举类型,对Linq的谓词提供了完美的支持,旨在让绝大部份的主流数据库都使用 Linq 来进行程序开发,让开发人员访问...

netcasewqs 2012/12/17 2K 2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

自制超声波驱狗器(第三版)

文档标识符:Ultrasonic_Dog_Repellent_II_T-D-P7 作者:DLHC 最后修改日期:2020.8.13 本文链接: https://www.cnblogs.com/DLHC-TECH/p/Ultrasonic_Dog_Repellent_II_T-D-P7.html “威力”......

osc_t4kk3au7 21分钟前 0 0 测试框架mocha入门

单元测试 今天带你了解下测试框架mocha,这是一个js的测试框架,而且适用于node和浏览器环境。通过它,我们可以为我们模块、组件级别以上的代码编写单元测试用例,保证代码输出质量。 一、安...

字节逆旅 昨天 0 0 elasticsearch 7.8.1集群搭建

通往集群的大门 集群由什么用? 高可用   高可用(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。如果系统每运行100个时间...

osc_hwc3munb 23分钟前 13 0 如何面对人生危机?

点击蓝字关注,回复“职场进阶”获取职场进阶精品资料一份 一名读者提问:洋哥,我7年前从大厂出来,创业多年。连续失败,没买车也没房,女朋友也和我分手了,父母也对我失望至极。最近我开始...

张善友 今天 0 0 手写aop实现过程

一.手写Aop前基础知识 1.aop是什么? 面向切面编程(AOP):是一种编程范式,提供从另一个角度来考虑程序结构从而完善面向对象编程(OOP)。 在进行OOP开发时,都是基于对组件(比如类)进行开发...

osc_qyg23ccq 23分钟前 0 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

OSCHINA 社区

关于我们 联系我们 合作伙伴 Open api

在线工具

码云 gitee.com 企业研发管理 CopyCat-代码克隆检测 实用在线工具

微信公众号

微信公众号

OSCHINA APP

聚合全网技术文章,根据你的阅读喜好进行个性推荐

下载 APP ©OSCHINA(OSChina.NET) 工信部 开源软件推进联盟 指定官方社区 深圳市奥思网络科技有限公司版权所有 粤ICP备12009483号 返回顶部 顶部
您可能感兴趣的文档:

--结束END--

本文标题: 数据一致性

本文链接: https://www.lsjlt.com/news/7827.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 数据一致性
    在分布式环境下,为了避免设备与网络不可靠带来的影响,通常会存储多个数据副本。逻辑上的一份数据,同时存储在多个物理副本上,带来了数据已执行的问题。数据一致性问题的前提是发生读写操作,就是多个副本上的读写策略。 数据一致性从不同的视角,可以分...
    99+
    2014-10-25
    数据一致性
  • 什么是数据库的读一致性和写一致性
    一、读一致性 读一致性是指在数据库中的并发读操作中,读取到的数据应该是一致的。具体来说,当一个事务在执行读取操作时,如果另一个事务正在对同一数据进行修改(写操作),那么读取操作应该获取到已经提交的最新版本的数据,而不是读取到部分修改完成的数...
    99+
    2023-10-29
    数据库 读一致性 写一致性
  • Mysql和Redis数据一致性
    什么是数据库与缓存一致性 数据一致性指的是:缓存的数据值 = 数据库中的值 为什么会出现数据一致性问题呢? 在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节。所以,就需要使用red...
    99+
    2023-09-07
    redis mysql 数据库 java 缓存
  • 数据表迁移数据一致性验证
    在迁移数据库的时候做一些必要的验证还是很有用的,比如说迁移前后的数据条数是否一致,数据是否一致,这个时候怎么办呢,验证条数还好说,要是验证数据是否一致呢,对于重要的数据当然要每条都不会有差错,随机抽样验...
    99+
    2022-10-18
  • kafka如何实现数据一致性
    Kafka是一个分布式流处理平台,它通过分布式发布-订阅系统来实现高可靠性和高吞吐量的数据传输。由于Kafka的设计目标是提供高效的...
    99+
    2023-09-14
    kafka
  • mysql怎么保证数据一致性
    在MySQL中,可以采取以下几种方式来保证数据的一致性:1. 使用事务:事务可以将一系列操作单独的执行单元,要么全部成功提交,要么全...
    99+
    2023-09-15
    mysql
  • canal怎么保证数据一致性
    canal可以通过以下方式来保证数据一致性: 基于事务日志解析:canal通过解析数据库的事务日志来获取数据变更的信息。由于数据...
    99+
    2023-10-22
    canal
  • 如何实现redis数据一致性
    小编给大家分享一下如何实现redis数据一致性,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、缓存一致的必要性还是接上篇来说,我们已经解决了redis缓存穿透的...
    99+
    2023-06-29
  • redis怎么保证数据一致性
    一般来说,只要你用到了缓存,不管是Redis还是memcache,就可能会涉及到数据库缓存与数据的一致性问题,这里我们以Redis为例。我们该如何保证Redis与数据库的一致性呢? So easy: (推荐...
    99+
    2017-04-27
    redis
  • 数据库的读一致性分析
    前言提起数据库的事务,我们就会想到ACID特性:A:Atomicity 原子性    事务中包含的各种操作,要么一起成功,要么全部失败C:Consistency 一致性  事务...
    99+
    2022-10-18
  • redis中 数据一致性的方案
    背景:现在redis在互联中有大量的使用,根据业务的不同,其使用上也有所不同,但一般都有数据存储和缓存的一致性问题,下面就给大家介绍几个比较成熟实用的方案,希望对大家有帮助,如果大家有好的方案和建议欢迎给我...
    99+
    2022-10-18
  • 一致性非锁定读与一致性锁定读的大数据分析
    本篇文章为大家展示了一致性非锁定读与一致性锁定读的大数据分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。背景innodb存储引擎实现了两种标准的行级锁:S锁和X锁...
    99+
    2022-10-19
  • SQLServer 数据库中怎么保持数据一致性
    本篇文章给大家分享的是有关SQLServer 数据库中怎么保持数据一致性,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、数据更改比较少的系统...
    99+
    2022-10-18
  • MySQL和Redis的数据一致性问题
    目录一、一致性问题二、方案选择1、是删除缓存还是更新缓存?2、先更新数据库,再删除缓存3、失败重试4、异步更新缓存5、、先删除缓存,再更新数据库前言: 在数据读多写少的情况下作为缓存...
    99+
    2022-11-13
  • 缓存与数据库一致性保证
    全是干货!本文主要讨论这么几个问题:(1)啥时候数据库和缓存中的数据会不一致(2)不一致优化思路(3)如何保证数据库与缓存的一致性一、需求缘起当数据发生变化时,“先淘汰缓存,再修改数据库”这个点是大家讨论的...
    99+
    2022-10-18
  • MySQL45讲之主备数据一致性 - flowers
    本文主要介绍 MySQL 主备数据同步的重要日志 binlog 的三种格式,和双 M 结构的循环复制问题。 前言 本文主要介绍 MySQL 主备数据同步的重要日志 binlog 的三种格式,和...
    99+
    2019-06-13
    MySQL45讲之主备数据一致性 - flowers
  • 缓存和数据库一致性问题
    1、想要提高应用的性能,可以引入「缓存」来解决 2、引入缓存后,需要考虑缓存和数据库一致性问题,可选的方案有:「更新数据库 + 更新缓存」、「更新数据库 + 删除缓存」 3、更新数据库 + 更新缓存方案,...
    99+
    2021-04-23
    缓存和数据库一致性问题
  • MySQL保证数据一致性的方式
    这篇文章主要讲解了“MySQL保证数据一致性的方式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL保证数据一致性的方式”吧!一、MySQL事务模型A...
    99+
    2022-10-18
  • redis数据一致性的实现示例
    前言 所谓的redis数据一致性即当进行修改或者保存、删除之后,redis中的数据也应该进行相应变化,不然用户再次查询的时候很可能查询出已经删除过的脏数据。 一、缓存一致的必要性 还...
    99+
    2022-11-13
  • rabbitmq如何保证数据的一致性
    RabbitMQ 通过以下方式来保证数据的一致性: 事务: RabbitMQ 支持事务机制,可以将多条消息发送到队列中原子操作。...
    99+
    2023-10-26
    rabbitmq
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作