首页 > 数据库 >分布式数据库CAP原理

分布式数据库CAP原理

时间:2023-08-26 11:23:31浏览次数:35  
标签:事务 可用性 数据库 CAP 查询 一致性 分布式

看完了阳哥的redis视频课,理解了MySQL和NoSQL的区别,下面来总结一下

传统的ACID分别是什么
A (Atomicity) 原子性
C (Consistency) 一致性
I (Isolation) 独立性
D (Durability) 持久性
关系型数据库遵循ACID规则,事务在英文中是transaction,有如下四个特性:

1、A (Atomicity) 原子性 原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。

2、C (Consistency) 一致性 一致性也比较容易理解,也就是说数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束。

3、I (Isolation) 独立性 所谓的独立性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。

4、D (Durability) 持久性 持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现宕机也不会丢失。

CAP
C:Consistency(强一致性)
A:Availability(可用性)
P:Partition tolerance(分区容错性)
CAP理论就是说在分布式存储系统中,最多只能实现上面的两点。

而由于当前的网络硬件肯定会出现延迟丢包等问题,所以分区容忍性是我们必须需要实现的。所以我们只能在一致性和可用性之间进行权衡,没有NoSQL系统能同时保证这三点。

CA 传统Oracle数据库
AP 大多数网站架构的选择
CP Redis、Mongodb
注意:分布式架构的时候必须做出取舍。

一致性和可用性之间取一个平衡。多余大多数web应用,其实并不需要强一致性。因此牺牲C换取P,这是目前分布式数据库产品的方向。

一致性与可用性的决择

对于web2.0网站来说,关系数据库的很多主要特性却往往无用武之地

数据库事务一致性需求

很多web实时系统并不要求严格的数据库事务,对读一致性的要求很低, 有些场合对写一致性要求并不高。允许实现最终一致性。

数据库的写实时性和读实时性需求

对关系数据库来说,插入一条数据之后立刻查询,是肯定可以读出来这条数据的,但是对于很多web应用来说,并不要求这么高的实时性,比方说在微博发一条消息之后,过几秒乃至十几秒之后,我的订阅者才看到这条动态是完全可以接受的。

对复杂的SQL查询,特别是多表关联查询的需求

任何大数据量的web系统,都非常忌讳多个大表的关联查询,以及复杂的数据分析类型的报表查询,特别是SNS类型的网站,从需求以及产品设计角 度,就避免了这种情况的产生。往往更多的只是单表的主键查询,以及单表的简单条件分页查询,SQL的功能被极大的弱化了。

经典CAP图
CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。

因此,根据 CAP 原理将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三 大类:

CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。
CP - 满足一致性,分区容忍必的系统,通常性能不是特别高。
AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。

 

此图摘自阳哥上课的笔记

 

标签:事务,可用性,数据库,CAP,查询,一致性,分布式
From: https://www.cnblogs.com/huwy-123/p/17658521.html

相关文章

  • 分布式锁、分布式ID
    分布式锁、分布式IDhttps://www.cnblogs.com/liuqingzheng/p/11080501.html#分布式系统中加锁-->悲观锁 -mysql行锁 性能不高-需要性能更高的分布式锁#python线程锁#分布式锁需要的条件1、在分布式系统环境下,一个方法在同一时间只能被一个机器的一个线程执行;2、......
  • 跨平台通信:数字化工厂中基于OPC UA的分布式IO模块介绍
    背景近年来,为了提升在全球范围内的竞争力,制造企业希望自己工厂的机器之间协同性更强,自动化设备采集到的数据能够发挥更大的价值,越来越多的传统型工业制造企业开始加入数字化工厂建设的行列,实现智能制造。数字化改造推动工厂越来越“聪明”1数字化车间的概述简单来讲,相较于传统工厂......
  • redis 实现分布式锁原理
    通过原子操作实现redis锁redis内部是通过key/value的形式存储的,核心原理是设置一个唯一的key,如果这个key存在,说明有服务在使用具体实现方式:首先判断redis中是否存在某个key,并且为某个值如果这个key不存在,说明当前没有服务在使用,设置key如果这个key存在,说明当前有服......
  • sqlserver跨数据库查询
    方法一`execsp_droplinkedsrvloginpms,Nullexecsp_dropserverpmsexecsp_addlinkedserver@server='pms',--被访问的服务器别名@srvproduct='',@provider='SQLOLEDB',@datasrc=''--要访问的服务器execsp_addlinkedsrvlogin'pms�......
  • 时序数据库 TDengine 与创意信息兼容性互认,让你的数据共享方案更丰富
    新型物联网实现良好建设的第一要务就是打破信息孤岛,将数据汇聚在平台统一处理,实现数据共享,放大物联终端的行业价值,实现系统开放性,以此营造丰富的行业应用环境。在此背景下,物联感知平台应运而生,成为推动智慧城市建设,强化物联网感知设施跨行业、跨领域共享的重要支撑平台。近日,涛思......
  • OceanBase通过基表检索数据库中的函数索引
    其实通过dba_indexes这个视图也能检索出来,但是如果通过index_type来过滤性能会极差,实际效率会差很多,可能十几秒中才会出来结果,下面是通过基表视图跳过index_type来检索函数索引。 ......
  • 数据库 自增主键插入数据
    1. 现在报错是因为这个自增主键冲突了:id你先把之前的delete了,该插入的SQL应该是这样,你看看有没有问题INSERTINTO"public"."tmall_aggregate_item"("create_time","last_update_time","color_name","product_id","tenant_id","......
  • 【MySQL 8.0】通过Clone Plugin实现数据库的复制
    (root@node01)>createuser'donor'@'%'identifiedby'donor';QueryOK,0rowsaffected(0.10sec)(root@node01)>grantbackup_adminon*.*to'donor'@'%';QueryOK,0rowsaffected(0.23sec)(r......
  • 【MySQL 8.0】通过mysqlpump实现数据库对象的逻辑备份与恢复
    转储数据库mysqlpump-uroot-p--all-databases>full.sqlmysqlpump-uroot-p--all-databases--exclude-databases=soe>full.sqlmysqlpump-uroot-p--databasestpcc10>tpcc10.sqlmysqlpump-uroot-p--parallel-schemas=4:tpcc10>tpcc10.sql......
  • Mongodb数据库基于spring-boot-starter-data-mongodb的查询工具
    /***字段注解*/public@interfaceBuilderField{/***对应的数据库字段名称*@return*/Stringname();}importlombok.SneakyThrows;importjava.io.Serializable;importjava.lang.invoke.SerializedLambda;importjava.lang.reflec......