NoSql的三大基石:CAP理论&BASE&最终一致性
关系型数据库的局限
NoSql出现在关系型数据库之后,主要是为了解决关系型数据库的短板,我们先来看看随着软件行业的发展,关系型数据库面临了哪些挑战:
1、高并发
一个最典型的就是电商网站,例如双11,几亿大军的点击造成在某一时刻的并发量是很高的,传统的关系型数据库肯定已经是不堪重负了,如Oracle的Session数量推荐的才只有500。
2、高效率存储海量数据
大数据时代,数据量已经不是用GB、TB来衡量了,而是EB、ZB了,面对这海量的数据,如何高效率的存储这些数据,关系型数据库无法解决这个问题,以Oracle为例,单机的物理扩展不仅成本高,而且难度也加大了。
3、高可用&高扩展
Oracle即使RAC能扩展数台机器,但数量也是有限。
NoSql的出现即是为了解决这些问题了,但是NoSql并不是用来替代关系型数据库的,因为它本身也有着不可克服的缺陷,俗话说,好处不可能都让你占了。
关系型数据库与NoSql一致性的比较
一般来说,构建NoSql,为了高可用和海量数据存储,我们会选择牺牲一致性,但这并不意味着我们不要一致性,而是我们可以选择不实现强一致性,而实现弱一致性或者最终一致性。无论是在关系型数据库或者NoSql中,我们都是通过事务来实现一致性,下面我们来讨论两者在一致性方面的差异:
关系型数据库事务的4个基本特性ACID,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。
而对于分布式事务的特性BASE,则是反这个标准的,即基本可用(Basically Availble)、软状态/柔性事务(Soft-state)、最终一致性(Eventual Consistency)。下面是Brewer教授在PODC大会展示的ACID vs BASE:

前面我们说过,NoSql的出现是为了解决高并发、海量数据、高可用等问题的,因而一般分布式是最优选项,我们先来说一下分布式系统的特性:CAP理论,当然,这也是NoSql的特性:
CAP理论
CAP理论是Brewer教授提出的:一个分布式系统不能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Tolerance of network Partition)。鱼和熊掌不可兼得。
一致性:任何一个读操作总是能读取到之前完成的写操作结果,也就是在分布式环境中,多点的数据是一致的。
可用性:每一个操作总是能在确定的时间内返回,也不是系统随时都是可用的。
分区容错性:在出现网络分区(如断网)的情况下,分离的系统也能正常运行。
PS:这里有人可能会问,可用性与分区容错性是不是一个意思(既然分区都可以容错了,不就是可用么),个人理解这里可用性说的是调用不会被阻塞。
而市场上的NoSql则以CAP理论为指导,大多选择实现了CAP理论的两点(如CA、CP、AP),未实现的即其缺陷部分。下面则是常见NoSql系统的特性:

常见NoSql的分类
|
类型 |
部分代表 |
特点 |
|
列存储 |
Hbase Cassandra Hypertable |
顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势。 |
|
文档存储 |
MongoDB CouchDB |
文档存储一般用类似json的格式存储,存储的内容是文档型的。这样也就有有机会对某些字段建立索引,实现关系数据库的某些功能。 |
|
kv存储 |
Tokyo Cabinet / Tyrant Berkeley DB MemcacheDB Redis |
可以通过key快速查询到其value。一般来说,存储不管value的格式,照单全收。(Redis包含了其他功能) |
|
图存储 |
Neo4J FlockDB |
图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,而且设计使用不方便。 |
|
对象存储 |
db4o Versant |
通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据。 |
|
xml数据库 |
Berkeley DB XML |
高效的存储XML数据,并支持XML的内部查询语法,比如XQuery,Xpath。 |
参考文档
https://www.zhihu.com/question/54105974
http://blog.sina.com.cn/s/blog_3fe961ae010139u6.html
https://www.cnblogs.com/chaser24/p/6417757.html
https://baike.baidu.com/item/NoSQL/8828247
http://www.studyofnet.com/news/365.html
NoSql的三大基石:CAP理论&BASE&最终一致性的更多相关文章
- 大数据技术原理与应用【第五讲】NoSQL数据库:5.4 NoSQL的三大基石
NoSQL的三大基石:cap,Base,最终一致性 5.4.1 cap理论(帽子理论): consistency:一致性availability:可用性partition tolerance: ...
- CAP理论与MongoDB一致性、可用性的一些思考
大约在五六年前,第一次接触到了当时已经是hot topic的NoSql.不过那个时候学的用的都是mysql,Nosql对于我而言还是新事物,并没有真正使用,只是不明觉厉.但是印象深刻的是这么一张图片( ...
- 大数据 --> CAP原理和最终一致性
CAP原理和最终一致性 CAP原理和最终一致性(Eventually Consistency)
- NoSQL的三大基石(CAP、BASE和最终一致性)
CAP,BASE和最终一致性是NoSQL数据库存在的三大基石.而五分钟法则是内存数据存储了理论依据.这个是一切的源头. CAP C: Consistency 一致性 A: Availability 可 ...
- 解决分布式事务基本思想Base和CPA理论、最终一致性|刚性事务、柔性事务
在学习解决分布式事务基本思路之前,大家要熟悉一些基本解决分布式事务概念名词比如:CAP与Base理论.柔性事务与刚性事务.理解最终一致性思想,JTA+XA.两阶段与三阶段提交等. 如何保证强一致性呢? ...
- [转]CAP原理与最终一致性 强一致性 透析
在足球比赛里,一个球员在一场比赛中进三个球,称之为帽子戏法(Hat-trick).在分布式数据系统中,也有一个帽子原理(CAP Theorem),不过此帽子非彼帽子.CAP原理中,有三个要素: 一致性 ...
- CAP原理与最终一致性 强一致性 弱一致性
CAP原理中,有三个要素: 一致性(Consistency) 可用性(Availability) 分区容忍性(Partition tolerance) CAP原理指的是,这三个要素最多只能同时实现两点 ...
- 精彩的解释CAP理论的文章
强一致性(Consistency): 更新操作成功并返回客户端完成后,分布式的所有节点在同一时间的数据完全一致. 可用性(Availability):读和写操作都能成功. 分区容错性(Partiti ...
- 可能是CAP理论的最好解释
一篇非常精彩的解释CAP理论的文章,翻译水平有限,不准确之处请参考原文,还请见谅. Chapter 1: "Remembrance Inc" Your new venture : ...
随机推荐
- Centos7安装搭建Bugzilla 5.0
1.安装准备: Centos7保证网络连通,如果网络不能连通,可通过配置yum源使用代理服务. vim /etc/yum.conf # The proxy server - proxy server: ...
- python第九天----今天来晚了!
作业 1. HAproxy配置文件操作1. 根据用户输入输出对应的backend下的server信息2. 可添加backend 和sever信息3. 可修改backend 和sever信息4. 可删除 ...
- UITableViewCell 获取当前位置
CGRect rectInTableView = [tableView rectForRowAtIndexPath:indexPath]; CGRect rectInSuperview = [tabl ...
- vsftpd不支持目录软链接的解决办法
vsftpd本身不支持软连接,而在用FTP共享的时候又不想移动文件位置,便在网上找到了一个workaround: Linux内核从2..0开始支持把一部分文件系统挂载到文件系统中的其他位置,mount ...
- 1.1开篇一:C语言编译器的选择---Dev C++
返回总目录 目录: 1.Dev C++的下载&安装: 2.Dev C++的使用: 前言: 那么多编译器,为什么选择Dev C++?理由有下 理由一:Dev C++ 体积比较小,不占用太多的内存 ...
- ELK-elasticsearch-6.3.2部署
参考博客:linux下ElasticSearch.6.2.2集群安装与head.Kibana.X-Pack..插件的配置安装 参考博客:ELK5.5.1 插件安装实践纪要(head/bigdesk/k ...
- golang的json序列化问题
首先看一段代码: package main import ( "encoding/json" "fmt" ) type Result struct { //st ...
- Tomcat 访问页面或服务器异常,请检查这些方面
若还没有部署网站,请检查 防火墙是否关闭 数据库服务是否打开 浏览器访问的地址和端口是否正确 tomcat 配置文件中的端口是否发生冲突,换一个试试 若出现的是"拒绝连接",检查阿 ...
- 解决LINUX 只读文件系统的问题
mount -o rw,remount /dev/mapper/vg_nips-lv_root /
- 关于使用jquery修改hover伪标签的样式
HTML如下: <div class=".nav-subitem"> <div classs="nav-subitem-link">标题 ...