[数据库]ACID、CAP、BASE特性

SQL与noSQL

对比项 关系型SQL 非关系型SQL

关系表 数据集(键值/JSON文档/哈希表/其它)

结构化、提前定义表结构 动态调整模式,非结构化

纵向扩展,提高处理能力 横向扩展、增加分布式节点

标准通用的查询语言SQL 非标准非结构化的查询语言(unQL)

ACID CAP、BASE

结构化、事务处理、易于维护使用 扩展性、灵活调整、大数据分析

扩展性、高并发场景、大数据分析 事务支持较弱、标准不统一

ACID特性

关系型数据库遵从ACID规则:

A:Atomicity, 原子性,一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间的某个环节。如果执行过程中发生错误,会被恢复到事务开始前的状态,就像这个事务从来没有执行过一样。

C:Consistency, 一致性,在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。

I:Isolation, 隔离性,数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。

D:Durability, 持久性,事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

CAP特性

非关系型数据库遵从CAP规则:

C:Consistency, 强一致性

A:Availability, 可用性

P:Partition tolerance, 分区容错性

CAP的3选2:

  • CAP特性,在分布式系统中,最多只能实现上面的两点
  • 由于网络硬件肯定会出现延时、丢包等问题,所以,分区容性是必须要实现的
  • 需要在一致性和可用性之间进行权衡,没有NoSQL系统能够同时保证这三点

BASE特性

BASE理论是对CAP中一致性和可用性权衡的结果:

BA:Basically Available, 基本可用

S:Soft state, 软状态

E:Eventually consistent, 最终一致性

BASE理论的核心思想是:即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。

Original: https://www.cnblogs.com/Skybiubiu/p/15930703.html
Author: SkyBiuBiu
Title: [数据库]ACID、CAP、BASE特性

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/606256/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • [云计算]OpenStack这一篇就够了!

    OpenStack简介 OpenStack背景介绍 OpenStack应用场景 OpenStack发展历程 OpenStack架构 架构设计原则 架构全景图 核心服务组件 系统通信…

    Linux 2023年6月13日
    0223
  • Linux基线加固

    bash;gutter:true; 1、修改vsftp回显信息 (1)检查办法 修改vsftp回显信息: 需在安装VSFTP的情况下检查,未安装可忽略或禁用该项。 查看ftpd_b…

    Linux 2023年6月13日
    081
  • GDT表实现

    GDT是保护模式下的内存段登记表。 段界限计算 段界限用 20 个二进制位来表示。只不过此段界限只是个单位量,它的单位要么是字节,要么是 4K,这是由描述符中的G位来指 定的。由于…

    Linux 2023年6月7日
    080
  • 如何在 python 中解决 ImportError: DLL load failed while importing win32api

    问题描述 安装完 pywin32 之后,如果直接在代码中 import win32api 可能会报下述错误: ImportError: DLL load failed while …

    Linux 2023年6月7日
    082
  • Conda虚拟环境中的pip,python 等路径是base环境而非本虚拟环境

    现象 一次运行项目发现,原本可以正常运行的项目,突然提示有个包不存在,但是经过 pip list 发现在我的虚拟环境中是存在这个包的,并且此时我是正常的位于我的虚拟环境中。 报错:…

    Linux 2023年6月7日
    092
  • OS模块中获取当前文件的绝对路径的相关方法

    os.path.realpath(file) 作用:获取当前执行py脚本的绝对路径(在当前工作目录下的绝对路径) file : 表示当前文件的本身,一般值是当前文件的相对路径 例如…

    Linux 2023年6月7日
    084
  • 将Java代码打包成jar文件转换为.exe可执行程序方法

    ​ 做完学生管理系统后我想将代码打包成一个可执行程序,那样就可以直接点击在Windows下运行了,下面就跟大家分享下打包方法。 将Java的代码转换成 .exe 文件需要先把代码打…

    Linux 2023年6月6日
    096
  • 关于python3 sqlite3模块打开数据库报错unable to open database file解决方案

    一、运行环境 1、操作系统: windows 102、python版本: python3.63、编辑器: vscode 二、报错截图 使用绝对路径打开sqlite数据库时报错如下所…

    Linux 2023年6月8日
    081
  • linux常用命令(持续更新中…)

    查看所有开机启动服务:systemctl list-unit-files # 按Enter翻页 查看所有开机启动服务:systemctl list-unit-files | gre…

    Linux 2023年6月7日
    079
  • Ubuntu18开启默认root登录方法

    默认的Ubuntu 18.04系统在登陆界面上是不支持root用户直接登录的,但是你可以使用下面的方法让Ubuntu 18.04也支持root登录,其他类似的版本参考在Ubuntu…

    Linux 2023年6月7日
    091
  • 如何写好倒计时

    引言 本文讲解倒计时为什么建议使用 setTimeout而不使用 setInterval,倒计时为什么存在误差,以及如何解决。 倒计时器 在前端开发中,倒计时器功能比较常见,比如活…

    Linux 2023年6月7日
    0322
  • 算法小技巧 — 链表

    一、快慢指针 1、核心思想 【核心思想:】 采用双指针完成,一个指针永远比另一个指针稍快一点。 【常见案例:】 找到单链表的中间节点    环形链表 【单链表结构:】 class …

    Linux 2023年6月14日
    070
  • SSH的 Write failed: Broken pipe 问题

    问题现象: 表示连接管道已经断开 解决方法: 方法一:客户端配置在客户端的 ~/.ssh/ config文件(如不存在请自行创建)中添加下面内容:ServerAliveInterv…

    Linux 2023年6月8日
    091
  • cobbler部署

    cobbler cobbler 一、cobbler简介 二、cobbler对应关系 三、cobbler工作原理 cobbler部署 进行测试 web界面自动安装 一、cobbler…

    Linux 2023年6月6日
    0108
  • vue3中iview框架初始值赋值问题

    问题:今天有个小伙伴说我们前端有个页面异常奇怪,没有显示数据。 开发小伙伴进行查询之后(非专业前端),明明进行了绑定,页面死活无法渲染,归属于灵异事件了,对于这种灵异事件,我总会想…

    Linux 2023年6月7日
    084
  • [云原生]Kubernetes-Pod控制器详解(第6章)

    一、Pod控制器介绍 二、ReplicaSet(RS) 三、Deployment(Deploy) 四、Horizontal Pod Autoscaler(HPA) 五、Daemon…

    Linux 2023年6月13日
    0117
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球