分布式系统:ACID与CAP

news2024/11/24 14:48:48

ACID: 在计算机科学中,ACID是数据库事务的一组特性,旨在保证数据的有效性,即使在出现错误、断电和其他意外情况下也能保持数据的一致性。在数据库的上下文中,满足ACID属性的一系列数据库操作(可以被视为对数据的单一逻辑操作)称为“事务”。例如,从一个银行账户向另一个账户转账,即使涉及多个更改(比如从一个账户借记并向另一个账户贷记),也视为单一事务。

CAP:在理论计算机科学中,CAP定理(也称为Brewer定理,以计算机科学家Eric Brewer命名)规定任何分布式数据存储只能提供三个特性中的两个(一致性、可用性、分区容错性)。

概要

•ACID处理个体节点的数据一致性 = 事务级别•CAP处理整个集群的数据一致性 = 节点级别

ACID:

原子性(Atomicity):

原子事务是一系列数据库操作的不可分割和不可约简,要么全部发生,要么全部不发生。

一个原子事务的例子是从账户A向账户B进行货币转账。它包括两个操作:从账户A取款和存入到账户B。通过在原子事务中执行这些操作,确保数据库保持在一致的状态,即如果这两个操作中的任何一个失败,资金既不会丢失也不会被创建。

一致性(Consistency):

所有已应用的数据更改为所有数据库连接提供一致的数据视图。也就是说,在成功写入、更新或删除记录之后,任何读取请求都会立即接收到记录的最新值。

一致性(或正确性)指的是任何给定的数据库事务必须仅按照允许的方式更改受影响的数据。写入数据库的任何数据必须符合所有定义的规则,包括约束、级联、触发器以及所有这些规则的组合。

隔离性(Isolation):

隔离性确定事务完整性对其他用户和系统的可见性。隔离性通常在数据库级别定义,是一个属性,定义了一个操作的更改在何时或如何成为对其他操作可见。

较低的隔离级别增加了许多用户同时访问相同数据的能力,但增加了用户可能遇到的并发效果(如脏读取或丢失更新)的数量。相反,较高的隔离级别减少了用户可能遇到的并发效果,但需要更多的系统资源,并增加了一个事务将阻塞另一个事务的机会。

二阶段锁定是数据库管理系统中最常见的事务并发控制方法,用于提供正确性的序列化和可恢复性。为了访问数据库对象,事务首先需要为该对象获取锁定。根据访问操作类型(例如读取或写入对象)和锁类型,如果另一个事务持有该对象的锁定,则获取锁定可能会被阻塞和延迟。

持久性(Durability):

持久性是ACID属性,保证已提交的事务将永久保存。例如,如果航班预订报告表示已成功预订座位,则即使系统崩溃,座位也将保留预订状态。

持久性可以通过将事务的日志记录刷新到非易失性存储中来实现,然后在确认提交之前。

在分布式事务中,所有参与的服务器必须在确认提交之前进行协调。这通常通过二阶段提交协议来完成。

许多数据库管理系统通过将事务写入事务日志来实现持久性,可以重新处理事务日志以在任何后续故障之前重新创建系统状态。只有在事务记录输入日志后,事务被视为已提交。

9452eb9dac10f204e4c6877d718256aa.jpeg
0*z5L-KJZpq5FAvqh9.jpeg

CAP

一致性(Consistency)(所有节点通过最终一致性拥有相同的数据):一致性意味着在一个节点上的更新/更改立即传播到其他节点。•可用性(Availability):每个请求都会收到(非错误的)响应,但不能保证它包含最新的写入。例如,我们需要跟踪和报告国家的公民数量,如果在计算中丢失了最新数据,不会对最终结果造成重大错误。我们可以使用支持可用性的数据存储。另一方面,当我们需要跟踪业务交易时,我们需要选择支持一致性的数据存储。•分区容错性(Partition Tolerance):即使发生节点之间的任意消息丢失(或延迟),系统仍然可以继续运行。

当发生网络分区故障时,必须决定采取以下其中一种操作:

•取消操作,从而降低可用性但确保一致性•继续操作,从而提供可用性但可能导致不一致性。

234546b76201d05d52750a1e24d51942.png

CAP定理的维恩图

因此,如果存在网络分区,则必须在一致性和可用性之间选择。

4e0e96b26a7c49386a3a5d408fccda54.png
0*PyiMBeDQi3RZpeLR.png

作为CAP权衡

CAP定理基于三个权衡,其中之一是“原子一致性”(缩写为“一致性”),“讨论原子一致性与讨论ACID数据库有些不同,因为数据库一致性是指事务,而原子一致性仅指单个请求/响应操作序列的属性”。

5f8327654986246596c23974f42546c4.png
 

注意:尽管一些人偏向一致性,而其他人偏向可用性,但其他NoSQL数据存储(如Cassandra和DynamoDB)可以同时提供两者。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/839643.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于C#的应用程序单例唯一运行的完美解决方案 - 开源研究系列文章

今次介绍一个应用程序单例唯一运行方案的代码。 我们知道,有些应用程序在操作系统中需要单例唯一运行,因为程序多开的话会对程序运行效果有影响,最基本的例子就是打印机,只能运行一个实例。这里将笔者单例运行的代码共享出来&…

kubernetes基于helm部署gitlab-runner

kubernetes基于helm部署gitlab-runner 这篇博文介绍如何在 Kubernetes 中使用helm部署 GitLab-runner。 先决条件: 已运行的 Kubernetes 集群已运行的 gitlab 实例 项目地址:https://gitlab.com/gitlab-org/charts/gitlab-runner 官方文档&#xff…

【Spring】Spring AOP 初识及实现原理解析

博主简介:想进大厂的打工人博主主页:xyk:所属专栏: JavaEE进阶 目录 文章目录 一、初识AOP 1.1 什么是AOP? 1.2 AOP的组成 1.2.1 切面(Aspect) 1.2.2 切点(Pointcut) 1.2.3 连接点&…

OKR管理策略:为开发团队注入动力

引言 在这个快速变化的世界中,公司需要迅速应对市场变化,并保持其目标和战略的清晰性和一致性。而OKR(Objectives and Key Results)正是这个挑战的解决方案之一。OKR的实施可以帮助开发团队明确目标,关注关键结果&…

java使用openOffice将excel转换pdf时,将所有列显示在一页

1.接上文,格式转换的基础问题已解决,但还有些细节问题需要单独处理,如excel转换至pdf时,如何将所有列显示在一页的问题,此问题大家都有遇到,解决方案也比较多,我也尝试过重写某类,来…

arcgis--网络分析(理论篇)

1、定义概念 (1)网络:由一系列相互联通的点和线组成,用来描述地理要素(资源)的流动情况。 (2)网络分析:对地理网络(如交通网络、水系网络)&…

Emacs之set-face-attribute与font-lock-add-keywords用法区别(一百二十八)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

怎样将项目jar包放到服务器上

目录 1、在配置文件中配置账号密码 2.在父级的pom里面,加上这个标签 3. deploy部署 4. 注:这两个id得匹配上(原因:有的人会只有上传到测试包的权限,id对应,拥有账号密码的才能有权限) 5.子项…

Milvus Cloud凭借AI原生,可视化优势荣登全球向量数据库性能排行榜VectorDBBench.com 榜首

在当今的大数据时代,随着人工智能技术的快速发展,向量数据库作为处理大规模数据的关键工具,其性能和效率越来越受到关注。最近,全球向量数据库性能排行榜 VectorDBBench.com 公布了一份最新的评估报告,引人瞩目的是,成立不到一年的新兴公司 Milvus Cloud 凭借其 AI 原生和…

leetcode 1290.二进制链表转整数

⭐️ 题目描述 &#x1f31f; leetcode链接&#xff1a;二进制链表转整数 ps&#xff1a; 1 0 1 (0 << 1) 1 0 1 1 (1 << 1) 0 2 0 2 (2 << 1) 1 4 1 5代码&#xff1a; int getDecimalValue(struct ListNode* head) {int ans 0;while(head !…

MySQL — InnoDB介绍

文章目录 InnoDB 主要特点InnoDB 架构In-Memory StructuresBuffer PoolChange BufferAdaptive Hash IndexLog Buffer On-Disk StructuresSystem TablespaceFile-Per-Table TablespacesGeneral TablespacesUndo TablespacesTemporary TablespacesDoublewrite BufferRedo LogUndo…

spring boot中web容器配置

web容器配置 spring boot 默认的web容器是 tomcat&#xff0c;如果需要换成其他的 web 容器&#xff0c;可以如下配置。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!-- 默…

ROS添加节点

1 下载项目源码 &#xff08;1&#xff09;这里我使用是哔哩哔哩的博主源码机器人工匠王杰 https://github.com/6-robot/wpr_simulation.git &#xff08;2&#xff09;建立工作空间 在主目录下载建立如下文件夹 catkin_ws----       ----src &#xff08;3&#xff09;…

Spring Boot、Spring Cloud、Spring Alibaba 版本对照关系及稳定兼容版本

Spring Boot、Spring Cloud、Spring Alibaba 版本对照关系及稳定兼容版本 引言 在 Java 生态系统中&#xff0c;Spring Boot、Spring Cloud 和 Spring Alibaba 是非常流行的框架&#xff0c;它们提供了丰富的功能和优雅的解决方案。然而&#xff0c;随着不断的发展和更新&…

【51单片机】晨启科技,酷黑版,音乐播放器

四、音乐播放器 任务要求&#xff1a; 设计制作一个简易音乐播放器&#xff08;通过手柄板上的蜂鸣器发声&#xff0c;播放2到4首音乐&#xff09;&#xff0c;同时LED模块闪烁&#xff0c;给人视、听觉美的感受。 评分细则&#xff1a; 按下播放按键A6开始播放音乐&#xff0…

使用Socket实现TCP版的回显服务器

文章目录 1. Socket简介2. ServerSocket3. Socket4. 服务器端代码5. 客户端代码 1. Socket简介 Socket&#xff08;Java套接字&#xff09;是Java编程语言提供的一组类和接口&#xff0c;用于实现网络通信。它基于Socket编程接口&#xff0c;提供了一种简单而强大的方式来实现…

SpringBoot项目上传至服务器

1.服务器安装JDK1.8 通过包管理器安装 2.服务器安装数据库 参考链接&#xff1a; CentOS 7 通过 yum 安装 MariaDB - 知乎 1. 安装之后没有密码&#xff0c;所以需要设置密码&#xff0c;使用下面的语句 set password for rootlocalhost password(111111); 2.在数据库中建…

子集 II——力扣90

文章目录 题目描述题目描述 class Solution {public:vector<int> t;vector<vector<int>> ans;vector<vector

康冠医疗2021笔试题

笔试时间:2020.09.24。 岗位:嵌入式软件工程师。 题型:13道题,40分钟。 6道填空,2道简答,5道编程,时间紧任务重。 1、填空 4、考察extern关键字。 6、const可以用来代替define ,define 只是简单的代替,但是const还会进行类型检查。 怎么避免头文件重复包含: #…

前端 页面地址栏修改Url参数后回车 路由页面不刷新!

关于&#xff1a;页面地址栏修改Url参数后回车 路由页面不刷新的问题 需要回车两次才会触发刷新 重新加载 原因&#xff1a;因为你的路由Url是相同的&#xff0c;vue会认为你是同一个页面&#xff0c;从而复用已加载的页面 从缓存里面拿&#xff0c;而不会重新加载&#xff0c;…