传统关系型数据库中事务有四个重要的特性,简称ACID,即

  • 原子性 : 事务是一个不可分割的工作单位,事务中的操作要么都成功,如果有一个执行失败,所有的SQL将都被撤销,恢复到事务开始的状态
  • 一致性 : 事务前后数据的完整性必须保持一致。 例如转账前AB两账户金额之和是2000元,事务结束后,金额之和仍然是2000元
  • 隔离性:当多个用户并发的访问数据库时,数据库为每一个用户开启的事务之间是隔离的,一个事务不能被其他事务的操作所干扰
  • 持久性 : 持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响 , 即使发生系统崩溃,重新启动数据库系统后,数据库还能恢复到事务成功结束时的状态。

NoSql出现在关系型数据库之后,主要是为了解决关系型数据库的短板,我们先来看看随着软件行业的发展,关系型数据库面临了哪些挑战:

1、高并发

一个最典型的就是电商网站,例如双11,几亿大军的点击造成在某一时刻的并发量是很高的,传统的关系型数据库肯定已经是不堪重负了,如Oracle的Session数量推荐的才只有500。

2、高效率存储海量数据

大数据时代,数据量已经不是用GB、TB来衡量了,而是EB、ZB了,面对这海量的数据,如何高效率的存储这些数据,关系型数据库无法解决这个问题,以Oracle为例,单机的物理扩展不仅成本高,而且难度也加大了。

3、高可用&高扩展

Oracle即使RAC能扩展数台机器,但数量也是有限。

NoSql的出现即是为了解决这些问题了,但是NoSql并不是用来替代关系型数据库的,因为它本身也有着不可克服的缺陷(当然也不影响总有挑战者,manggo就宣称他们要替代关系型数据库,但是在强一致的情况下是非常困难的)。

CAP理论是Brewer教授提出的:一个分布式系统不能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Tolerance of network Partition)。

一致性:任何一个读操作总是能读取到之前完成的写操作结果,也就是在分布式环境中,多点的数据是一致的。

可用性:每一个操作总是能在确定的时间内返回,也不是系统随时都是可用的。

分区容错性:在出现网络分区(如断网)的情况下,分离的系统也能正常运行。

不能同时满足CAP的原因是因为分布式系统中必须满足P,也就是分区容错性的原因,因为可能出现网络通信失败。假设此时分布式系统中有两台服务器N1 N2,假设N1和N2之间通信的时候网络突然出现故障,有用户向N1发送数据更新请求,那N1中的数据DB0将被更新为DB1,由于网络是断开的,N2中的数据库仍旧是DB0;如果这个时候,有用户向N2发送数据读取请求,由于数据还没有进行同步(一致性),应用程序没办法立即给用户返回最新的数据DB1,怎么办呢?有二种选择,第一,牺牲数据一致性,响应旧的数据DB0给用户;第二,牺牲可用性,阻塞等待,直到网络连接恢复,数据更新操作完成之后,再给用户响应最新的数据DB1。以上就是不能同时满足CAP的原因

CAP的选择策略

而市场上的NoSql则以CAP理论为指导,大多选择实现了CAP理论的两点(如CA(关系型数据库如mysql、AP(nosql数据库manggo)、CP(如zk)),未实现的即其缺陷部分。所以我们经常mysql很少看到分片集群,即使是做集群方案也会十分复杂,而nosql如manggo、es等往往是以集群形式存在,而cp相对来说较少。

常见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。

妥协的艺术:最终一致性

为了解决关系型数据库由于一致性导致的可用性降低的问题的解决方案,是基本可用,软形态,最终一致性的缩写,思路是放松对某一时刻一致性的要求来换取可用性和系统带的性能,等该时刻过去之后,再保证最终数据一致性,例如淘宝双11的浏览量,等等这些数据,在0点时刻不关注这些数据,尽可能为可用性服务,保证服务器不崩,等高峰期过后,比如说第二天,再将这些数据同步,完成最终一致性。

「数据库系列四」分布式数据库CAP理论与最终一致性相关推荐

  1. nosql简答什么是最终一致性_NoSql的三大基石:CAP理论BASE最终一致性

    关系型数据库的局限 NoSql出现在关系型数据库之后,主要是为了解决关系型数据库的短板,我们先来看看随着软件行业的发展,关系型数据库面临了哪些挑战: 1.高并发 一个最典型的就是电商网站,例如双11, ...

  2. 第四章-分布式数据库HBase

    第四章-分布式数据库HBase 文章目录 第四章-分布式数据库HBase HBase简介 HBase数据模型 数据模型概念 概念视图 物理视图 面向列的存储 HBase实现原理 HBase功能组件 表 ...

  3. 四种分布式数据库场景选型、优缺点对比分析和未来展望 | 趋势解读

    [摘要]随着互联网金融场景的不断拓展,海量的数据访问和处理造成传统的集中式数据库开始表现出性能瓶颈,分布式数据库的研究和场景使用应运而生,而数据的安全和合规也随着企业对数据使用的要求越来越高更加重视. ...

  4. 分布式数据库实战第一节 分布式数据库的前世今生

    开篇词 吃透分布式数据库,提升职场竞争力 你好,我是高洪涛,前华为云技术专家.前当当网系统架构师和 Oracle DBA,也是 Apache ShardingSphere PMC 成员.作为创始团队核 ...

  5. oracle分布式数据库搭建,ORACLE实现分布式数据库应用

    原文链接:http://user2005.blog.163.com/blog/static/137589500201123141041319/ 序 言 ORACLE分布式数据库系统是一个客户/服务器体 ...

  6. 分布式领域CAP理论

    分布式领域CAP理论具体如下: Consistency(一致性):数据一致更新,所有数据变动都是同步的: Availability(可用性):好的响应性能: Partition tolerance(分 ...

  7. 事务连接中断_一文搞懂分布式事务-CAP理论

    互联网系统中,分布式事务是无法避免的,目前多数解决方案是BASE理论,最终一致性,结合事务补偿. 1.什么是CAP理论. CAP理论,又称为布鲁尔定理,是加州大学伯克利分校的计算机科学家埃里克.布鲁尔 ...

  8. CAP理论与MongoDB一致性、可用性的一些思考

    大约在五六年前,第一次接触到了当时已经是hot topic的NoSql.不过那个时候学的用的都是mysql,Nosql对于我而言还是新事物,并没有真正使用,只是不明觉厉.但是印象深刻的是这么一张图片( ...

  9. 「数据库系列杂谈」数据库访问性能优化

    为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 一.数据库访问优化法则简介 ...

最新文章

  1. Python变量作用域问题
  2. SAP WM初阶之WM层面的移动类型可以配置成后续TO单据自动产生
  3. jq 获取当时时间的到秒_空军飞行员忆战机被鸟撞后的37秒
  4. 教你搭建Tiles工程-HelloTiles(附源码)
  5. revit如何根据坐标进行画线_铭成教你如何根据同步带的齿形进行选型
  6. 计算机用户win7修改不,Win7电脑时间改不了的解决方法
  7. IBM总架构师寇卫东:话说程序员的职业生涯-IT程序人生-职业生涯规划
  8. 常用负载均衡策略分析
  9. java for(o t :object) 获取顺序号_JAVA泛型通配符T,E,K,V区别 瞬间豁然开朗
  10. 常用的变量值交换方法总结(C++实现)
  11. Python 3.6部分新特性
  12. CGAffineTransform 放射变换
  13. Activity常用设置
  14. [转载] 七龙珠第一部——第012话 向神龙许愿
  15. 6m缓存和8m缓存差距_R5 3600和R5 3600X性能差距大吗?Ryzen5 3600和3600X区别对比评测(转)...
  16. 罗马数字java代码实现_6.2 罗马数字转整数
  17. ps背景不变换字_ps里怎么在不改变背景的前提改变文字
  18. 【查缺补漏 | JAVA 基础知识 | 粗略复习②】
  19. 打开Word提示向程序发送命令时出现问题怎么办
  20. Lonlife-ACM 1000 - Spoon Devil's 3-D Matrix(最小生成树)——“玲珑杯”acm比赛-试运行赛

热门文章

  1. Hdu 1072 【广搜】.cpp
  2. 感情沟通出了问题要怎么解决_冬养的月季花枝条干枯,开花萎蔫,哪里出了问题,该怎么解决?...
  3. linux路由修改密码,Linux中修改Mysql root用户密码的方法
  4. python矩阵sin计算器_Python-Numpy科学计算器的基本软件包
  5. 工具类软件操作手册_北京数字化的金蝶云团队-北京金普蝶软件科技有限公司...
  6. 简述python垃圾回收机制_python中的垃圾回收机制简述
  7. rnn 梯度消失爆炸
  8. IDEA2021创建Java Web项目
  9. python多线程怎么写日志_Python日志记录在多进程下的使用
  10. java resources 路径_Java工程读取resources中资源文件路径问题