IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 分布式事务 -> 正文阅读

[大数据]分布式事务

1. 分布式事务

1.1. 数据库事务

如果一个数据库声称支持事务的操作, 那么该数据库必须要具备以下四个特性 (ACID):

  • 原子性 (Atomicity): 事务里的所有操作要么全部做完, 要么都不做。
  • 一致性 (Consistency): 数据库要一直处于一致的状态, 事务的运行不会改变数据库原本的一致性约束。
  • 隔离性 (Isolation): 并发的事务之间不会互相影响。
  • 持久性 (Durability): 持久性是指一旦事务提交后, 它所做的修改将会永久的保存在数据库上, 即使出现宕机也不会丢失。

1.1.1. 隔离性

我们先看看如果不考虑事务的隔离性, 会发生的几种问题:

  • 脏读: 在一个事务处理过程里读取了另一个未提交的事务中的数据。
  • 不可重复读: 在对于数据库中的某个数据, 一个事务范围内多次查询却返回了不同的数据值, 这是由于在查询间隔, 被另一个事务修改并提交了。
  • 虚读 (幻读): 例如事务 T1 对一个表中所有的行的某个数据项做了从 “1” 修改为 “2” 的操作, 这时事务 T2 又对这个表中插入了一行数据项, 而这个数据项的数值还是为 “1” 并且提交给数据库。而操作事务 T1 的用户如果再查看刚刚修改的数据, 会发现还有一行没有修改, 其实这行是从事务 T2 中添加的, 就好像产生幻觉一样, 这就是发生了幻读。

MySQL 数据库为我们提供的四种隔离级别:

  • Serializable (串行化): 可避免脏读、不可重复读、幻读的发生。
  • Repeatable read (可重复读): 可避免脏读、不可重复读的发生。
  • Read committed (读已提交): 可避免脏读的发生。
  • Read uncommitted (读未提交): 最低级别, 任何情况都无法保证。

隔离级别的设置只对当前链接有效。

1.2. CAP

  • 一致性 (Consistency) : 客户端知道一系列的操作都会同时发生 (生效)
  • 可用性 (Availability) : 每个操作都必须以可预期的响应结束
  • 分区容错性 (Partition tolerance) : 即使出现单个组件无法可用, 操作依然可以完成

一个 Web 应用至多只能同时支持上面的两个属性。

1.3. BASE

在分布式系统中, 我们往往追求的是可用性, 它的重要程序比一致性要高, 那么如何实现高可用性呢? 前人已经给我们提出来了另外一个理论, 就是 BASE 理论, 它是用来对 CAP 定理进行进一步扩充的。BASE 理论指的是:

  • Basically Available – 基本可用
  • Soft-state – 软状态 / 柔性事务。 “Soft state” 可以理解为 “无连接” 的, 而 “Hard state” 是 “面向连接” 的
  • Eventually Consistency – 最终一致性, 也是 ACID 的最终目的。

BASE 理论是对 CAP 中的一致性和可用性进行一个权衡的结果, 理论的核心思想就是: 我们无法做到强一致, 但每个应用都可以根据自身的业务特点, 采用适当的方式来使系统达到最终一致性(Eventual consistency)。

1.4. 分布式事务

在分布式系统中,要实现分布式事务,无外乎那几种解决方案。

1.4.1. 两阶段提交(2PC)

1.4.2. 三阶段提交(3PC)

1.4.3. TCC

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-09-22 14:44:36  更:2021-09-22 14:47:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 22:01:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码