关系型数据库的局限

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。

参考文档

nosql简答什么是最终一致性_NoSql的三大基石:CAP理论BASE最终一致性相关推荐

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

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

  2. nosql简答什么是最终一致性_最终一致性 – 如何在NoSQL中维护非规范化一致性?...

    假设我有两个集合,每个集合的值彼此独立,但每个集合彼此相关.他们是照片和用户.用户和照片之间存在一对多的关系. 非规范化数据的一个例子: users: { "id": " ...

  3. 「数据库系列四」分布式数据库CAP理论与最终一致性

    传统关系型数据库中事务有四个重要的特性,简称ACID,即 原子性 : 事务是一个不可分割的工作单位,事务中的操作要么都成功,如果有一个执行失败,所有的SQL将都被撤销,恢复到事务开始的状态 一致性 : ...

  4. nosql简答什么是最终一致性_可靠消息最终一致性方案中预发送作用是什么

    可靠消息最终一致性方案的核心流程 ①上游服务投递消息 如果要实现可靠消息最终一致性方案,一般你可以自己写一个可靠消息服务,实现一些业务逻辑. 首先,上游服务需要发送一条消息给可靠消息服务.这条消息说白 ...

  5. 什么是BASE最终一致性

    什么是BASE最终一致性 BASE最终一致性是指,在分布式系统中,数据副本可能存在不一致性,但最终数据会达成一致状态.BASE是指Basic Available(基本可用).Soft State(软状 ...

  6. 分布式系统架构系列讲解一(分布式一致性 1):CAP理论

    分布式系统架构系列讲解 - 总目录 集中式应用进行服务化拆分后,必然会出现一个问题:如何保证各个节点(Node)之间的数据一致性? 比如以下场景:用户首先发起一次更新操作,映射到节点A:然后,用户又做 ...

  7. 计算机基础知识简答题汇总,计算机基础(简答)

    计算机基础知识 简述计算机的发展经历了那几个阶段? 人们根据计算机采用的主要元器件的不同,将电子计算机的发展分为四代: 第一代(1946年-1956年)为电子管计算机,也叫真空管计算机,其主要逻辑元件 ...

  8. CAP BASE 最终一致性

    女主宣言 1998年,加州大学的计算机科学家 Eric Brewer 提出分布式系统有三个指标,即CAP,而这三个指标不能同时做到.今天小编就为大家分享分布式相关理论,希望能对大家有所帮助. PS:丰 ...

  9. 货币银行学简答论述题

    第二章 货币与货币制度 简答题 1.什么是货币的本质特征?它在商品经济中发挥着哪些主要功能? .答:货币是固定地充当一般等价物的特殊商品,并体现一定的社会生产关系.这就是货币的本质的规定. 货币在商品 ...

最新文章

  1. [codeVS1204] 单词背诵
  2. 财讯传媒集团首席战略官段永朝:AI等技术将带来认知重启
  3. LaTeX设置单双栏方法 基于LaTex+VSCode+MAC
  4. STL标准库vector笔记
  5. Spring Boot Admin的使用
  6. POJ 2676/2918 数独(dfs)
  7. oj系统格式错误_论文查重会不会检查格式?【paperpp吧】
  8. duilib设置滚动条自动滚动到底
  9. FCPX插件:科幻切割分屏转场效果XEffects Tech Transitions mac版
  10. 中国工业信息安全大会召开,开发新技术与新模式,推动工业互联网安全发展
  11. 农业银行王敬东——金融科技时代商业银行战略模式选择初探
  12. mongodb 分组聚合_MongoDB 临时表横空出现 1 万+,这条语句执行前请准备好翻车的姿势...
  13. Microsoft JET Database Engine 错误 '80004005' 操作必须使用一个可更新的查询。问题解决办法
  14. 张恩民谈程序员“三点式” 学习方法
  15. android本地视频播放demo,基于Android的本地视频播放器
  16. [bzoj2752]高速公路 题解(线段树)
  17. 学前教育试题库及答案_《学前教育科学研究》练习题库及答案汇总
  18. can总线rollingcounter_[翻译]识别 CAN 总线上的攻击
  19. BookKeeper源码解析之Bookie启动流程(一)
  20. 怎么让计算机休眠的时候不断网,Windows10系统如何让电脑睡眠状态也不断网?

热门文章

  1. JavaWeb核心常用API一览
  2. nutshell_Nutshell中的Java 8语言功能-第1部分
  3. lineseparator_首选System.lineSeparator()以用Java编写系统相关的行分隔符字符串
  4. jrebel gradle_JRebel适用于Gradle Spring Boot应用程序
  5. jcache_随机JCache内容:多个提供程序和JMX Bean
  6. javafx窗体程序_JavaFX真实世界应用程序:欧洲电视网广播联盟
  7. 美图手机投射功能在哪_在Java 8中进行投射(还有其他功能?)
  8. JDK 14中更好的NPE消息
  9. 2019年用于自动化的5个最佳Java测试框架
  10. adf开发_了解ADF Faces clientComponent属性