在分布式数据库中CAP原理CAP+BASE以及分布式和集群的区别

分布式数据库中的CAP原理

大家好,又见面了,我是全栈君。

本篇博文的内容均来源于网络,本人只是整理,仅供学习!

相关阅读 【CAP 定理的含义 】作者: 阮一峰

一.关系型数据

关系型数据库遵循ACID规则
事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性:

1、A (Atomicity) 原子性
原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。比如银行转账,从A账户转100元至B账户,分为两个步骤:1)从A账户取100元;2)存入100元至B账户。这两步要么一起完成,要么一起不完成,如果只完成第一步,第二步失败,钱会莫名其妙少了100元。

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

3、I (Isolation) 独立性
所谓的独立性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。比如现有有个交易是从A账户转100元至B账户,在这个交易还未完成的情况下,如果此时B查询自己的账户,是看不到新增加的100元的

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

二:CAP是没什么
百度百科 CAP原则
C:Consistency(强一致性)
A:Availability(可用性)
P:Partition tolerance(分区容错性)

三:CAP原理

CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,
最多只能同时较好的满足两个。
因此,根据 CAP 原理将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三 大类:
CA – 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。
CP – 满足一致性,分区容忍必的系统,通常性能不是特别高。
AP – 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。

CAP理论就是说在分布式存储系统中,最多只能实现上面的两点。
而由于当前的网络硬件肯定会出现延迟丢包等问题,所以分区容忍性是我们必须需要实现的

所以我们只能在一致性和可用性之间进行权衡,没有NoSQL系统能同时保证这三点。

C:强一致性 A:高可用性 P:分布式容忍性
CA 传统Oracle数据库

AP 大多数网站架构的选择

CP Redis、Mongodb

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

一致性与可用性的决择

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

数据库事务一致性需求
  很多web实时系统并不要求严格的数据库事务,对读一致性的要求很低, 有些场合对写一致性要求并不高。允许实现最终一致性。
数据库的写实时性和读实时性需求
  对关系数据库来说,插入一条数据之后立刻查询,是肯定可以读出来这条数据的,但是对于很多web应用来说,并不要求这么高的实时性,比方说发一条消息之 后,过几秒乃至十几秒之后,我的订阅者才看到这条动态是完全可以接受的。
对复杂的SQL查询,特别是多表关联查询的需求
  任何大数据量的web系统,都非常忌讳多个大表的关联查询,以及复杂的数据分析类型的报表查询,特别是SNS类型的网站,从需求以及产品设计角 度,就避免了这种情况的产生。往往更多的只是单表的主键查询,以及单表的简单条件分页查询,SQL的功能被极大的弱化了。

四:集群和分布式系统

分布式系统(distributed system)
由多台计算机和通信的软件组件通过计算机网络连接(本地网络或广域网)组成。分布式系统是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。分布式系统可以应用在在不同的平台上如:Pc、工作站、局域网和广域网上等。

简单来讲:
1分布式:不同的多台服务器上面部署不同的服务模块(工程),他们之间通过Rpc/Rmi之间通信和调用,对外提供服务和组内协作。

2集群:不同的多台服务器上面部署相同的服务模块,通过分布式调度软件进行统一的调度,对外提供服务和访问。

链接外文:
分布式与集群的区别是什么?知乎https://www.zhihu.com/question/20004877


欢迎访问我的csdn博客,我们一同成长!

不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!

博客首页:http://blog.csdn.net/u010648555

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/121165.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 思科交换机-常用命令及配置[通俗易懂]

    switch>用户模式1:进入特权模式enableswitch>enableswitch# 2:进入全局配置模式configureterminalswitch>enableswitch#configureterminalswitch(conf)# 3:交换机命名hostnamename以cisco001为例switch>enable

    2022年4月7日
    73
  • Spring的两种代理JDK和CGLIB的区别浅谈

    Spring的两种代理JDK和CGLIB的区别浅谈我的店铺一、原理区别:java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。而cglib动态代理是利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP…

    2022年6月10日
    22
  • Windowsapp_windowsserver是什么

    Windowsapp_windowsserver是什么WindowsServerAppFabric扩展了WindowsServer以为Web应用程序和中间层服务提供增强的托管、管理和缓存功能。AppFabric托管功能向Internet信息服务(IIS)、WindowsProcessActivationService(WAS)和.NETFramework4添加了服务管理扩展。其中包括托管服务和托管管理工具,

    2022年10月17日
    0
  • C语言-链表排序_单链表的排序c语言

    C语言-链表排序_单链表的排序c语言C语言-链表排序题目描述已有a、b两个链表,每个链表中的结点包括学号、成绩。要求把两个链表合并,按学号升序排列。输入第一行,a、b两个链表元素的数量N、M,用空格隔开。接下来N行是a的数据然后M行是b的数据每行数据由学号和成绩两部分组成输出按照学号升序排列的数据样例输入235100689382495210样例输出210382…

    2022年10月11日
    0
  • 对深度可分离卷积、分组卷积、扩张卷积、转置卷积(反卷积)的理解

    对深度可分离卷积、分组卷积、扩张卷积、转置卷积(反卷积)的理解参考:https://zhuanlan.zhihu.com/p/28749411https://zhuanlan.zhihu.com/p/28186857https://blog.yani.io/filter-group-tutorial/https://www.zhihu.com/question/54149221http://blog.csdn.net/guvcolie/a…

    2022年6月21日
    37
  • JavaScript之继承

    JavaScript之继承

    2020年11月19日
    170

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号