1. Nosql数据库的四大分类

2. 分布式数据库CAP原理

2.1 关系型数据库事务遵循的ACID规则

首先了解传统关系型数据库事务遵循的ACID规则:

  • 原子性(Atomicity):事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功。
  • 一致性(Consistency):数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束。
  • 独立性(Isolation):指并发的事务之间不会相互影响,一个事务要访问的数据正在被另一个事务修改,那么在另一个事务提交之前,看到的数据是未改变的。
  • 持久性(Durability):持久性是指事务提交后,他所做的修改将会永久的保存在数据库上,即使出现宕机也不会丢失。

随着软件行业的发展,关系型数据库面临如下挑战:

  • 高并发:一个最典型的就是电商网站,例如双11,几亿大军的点击造成在某一时刻的并发量是很高的,传统的关系型数据库肯定已经是不堪重负了,如Oracle的Session数量推荐的才只有500。
  • 高效率存储海量数据:大数据时代,数据量已经不是用GB、TB来衡量了,而是EB、ZB了,面对这海量的数据,如何高效率的存储这些数据,关系型数据库无法解决这个问题,以Oracle为例,单机的物理扩展不仅成本高,而且难度也加大了。
  • 高可用&高扩展:Oracle即使RAC能扩展数台机器,但数量也是有限。

Nosql的出现即是为了解决这些问题了,但是尽管Nosql解决了上面问题,它并不能用来替代关系型数据库,因为它本身也有着不可克服的缺陷。

2.2 分布式数据库的CAP规则

CAP理论:一个分布式系统不能同时满足一致性(Consistency)可用性(Availability)分区容错性(Tolerance of network Partition)

  • 一致性:任何一个读操作总是能读取到之前完成的写操作结果,也就是在分布式环境中,多点的数据是一致的。
  • 可用性:每一个操作总是能在确定的时间内返回,也不是系统随时都是可用的。
  • 分区容错性:在出现网络分区(如断网)的情况下,分离的系统也能正常运行。

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

  • CA  -单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。  如:传统Oracle数据库
  • CP  -满足一致性、分区容错性的系统,通常性能不是特别高。                  如:redis、mongodb
  • AP  -满足可用性、分区容错性的系统,通常可能对一致性要求低一些。    

在分布式系统中,由于分区容忍性是我们必须需要实现的。我们只能在一致性和可用性之间进行权衡,没有NoSQL系统能同时保证这三点。

2.3 分布式事务的BASE特性

BASE就是为了解决关系数据库强一致性引起的问题而引起的可用性降低而提出的解决方案。它的目的是通过让系统放松对某一时刻数据一致性的要求来换取系统整体伸缩性和性能上改观。BASE理论是对CAP理论的延伸,核心思想是即使无法做到强一致性(Strong Consistency,CAP的一致性就是强一致性),但应用可以采用适合的方式达到最终一致性(Eventual Consitency)。

BASE是指 基本可用(Basically Available)、软状态( Soft State)、最终一致性( Eventual Consistency)

  • 基本可用(Basically Available) 
    基本可用是指分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用。 
    电商大促时,为了应对访问量激增,部分用户可能会被引导到降级页面,服务层也可能只提供降级服务。这就是损失部分可用性的体现。

  • 软状态( Soft State) 
    软状态是指允许系统存在中间状态,而该中间状态不会影响系统整体可用性。分布式存储中一般一份数据至少会有三个副本,允许不同节点间副本同步的延时就是软状态的体现。mysql replication的异步复制也是一种体现。

  • 最终一致性( Eventual Consistency) 
    最终一致性是指系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。

  

BASE模型是传统ACID模型的反面,不同于ACID,BASE强调牺牲高一致性,从而获得可用性,数据允许在一段时间内的不一致,只要保证最终一致就可以了。

参考:https://blog.csdn.net/zjcjava/article/details/78893368

https://www.cnblogs.com/duanxz/p/5229352.html

Nosql数据库的四大分类及分布式数据库CAP原理的更多相关文章

  1. 【巨杉数据库SequoiaDB】巨杉Tech | 分布式数据库千亿级超大表优化实践

    01 引言 随着用户的增长.业务的发展,大型企业用户的业务系统的数据量越来越大,超大数据表的性能问题成为阻碍业务功能实现的一大障碍.其中,流水表作为最常见的一类超大表,是企业级用户经常碰到的性能瓶颈. ...

  2. 【巨杉数据库SequoiaDB】巨杉Tech | 分布式数据库Sysbench测试最佳实践

    引言 作为一名DBA,时常需要对某些数据库进行一些基准测试,进而掌握数据库的性能情况.本文就针对sysbench展开介绍,帮助大家了解sysbench的一般使用方法. ​ sysbench简介 什么是 ...

  3. NoSQL数据库的四大分类的分析

    分类 Examples举例 典型应用场景 数据模型 优点 缺点 键值(key-value) Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB 内容缓 ...

  4. NoSQL数据库的四大分类表格分析

  5. 分布式的cap原理

    由来 1998年的加州大学的计算机科学家 Eric Brewer 提出,分布式有三个指标. Consistency,Availability,Partition tolerance. 简称即为CAP. ...

  6. Redis_NoSql分布式数据库CAP原理

    前文简单介绍了NoSql数据库的四大分类以及常用的数据库技术,本文简单介绍分布式数据库CAP原理. 一.传统的CAID是什么 1. A(Atomicity)原子性:事务里的所有操作要么全部做完,要么都 ...

  7. 五分钟DBA:浅谈伪分布式数据库架构

    [IT168 技术]12月25日消息,2010互联网行业技术研讨峰会今日在上海华东理工大学召开.本次峰会以“互联网行业应用最佳实践”为主题,定位于互联网架构设计.应用开发.应用运维管理,同时,峰会邀请 ...

  8. ThinkPHP 数据库操作(五) : 存储过程、数据集、分布式数据库

    存储过程 5.0支持存储过程,如果我们定义了一个数据库存储过程 sp_query ,可以使用下面的方式调用: $result = Db::query('call sp_query(8)'); 返回的是 ...

  9. 新浪微博基于MySQL的分布式数据库实践

    提起微博,相信大家都是很了解的.但是有谁知道微博的数据库架构是怎样的呢?在今天举行的2011数据库技术大会上,新浪首席DBA杨海潮为我们详细解读了新浪微博的数据库架构——基于MySQL的分布式数据库实 ...

随机推荐

  1. 第二十八章 springboot + zipkin(brave定制-AsyncHttpClient)

    brave本身没有对AsyncHttpClient提供类似于brave-okhttp的ClientRequestInterceptor和ClientResponseInterceptor,所以需要我们 ...

  2. [leetcode]Longest Consecutive Sequence @ Python

    原题地址:https://oj.leetcode.com/problems/longest-consecutive-sequence/ 题意: Given an unsorted array of i ...

  3. jQuery对象初始化的多种传参数形式

    jQuery对象初始化的传参方式包括:1.$(DOMElement)2.$('<h1>...</h1>'), $('#id'), $('.class') 传入字符串, 这是最常 ...

  4. KDiff

    BeyondCompare是收费的,用了一段时间不能用了.找到一个 KDiff做对比工具,也很好用. 在这里下载: http://sourceforge.net/projects/kdiff3/fil ...

  5. Jquery中"$(document).ready(function(){ })"函数的使用详解

    Jquery是优秀的Javascrīpt框架,$是jquery库的申明,它很不稳定(我就常遇上),换一种稳定的写法jQuery.noConflict(); jQuery(document).ready ...

  6. [RxJS] Build your own RxJS

    JavaScript has multiple APIs that use callback functions that all do nearly the same thing with slig ...

  7. js 前加分号和感叹号的含义

    ;!function(){}();  ;!有什么用? 从语法上来开.Javascript中分号表示语句结束,在开头加上.可能是为了压缩的时候和别的方法切割一下,表示一个新的语句開始.所以,假设在一个单 ...

  8. iOS运用keychain 把identifierForVendor当成唯一标识。替换advertisingIdentifier

    iOS运用keychain 结合[[[UIDevice currentDevice] identifierForVendor] UUIDString] 取得设备唯一标识 NSString *ident ...

  9. Dictionary应用

    using System; using System.Collections.Generic; using System.Data; using System.Web; using System.We ...

  10. JavaWeb之tomcat安装、配置与使用(一)

    一.Tomcat下载与安装: 1.直接到官网下载Tomcat安装程序包:http://tomcat.apache.org/ 2.下载下来后是个压缩包,如:apache-tomcat-7.0.40.zi ...