NoSql的三大基石:CAP理论&BASE&最终一致性

关系型数据库的局限
html

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

      一、高并发json

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

      二、高效率存储海量数据并发

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

      三、高可用&高扩展高并发

      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

     http://www.javashuo.com/article/p-biouxmif-hm.html

     https://baike.baidu.com/item/NoSQL/8828247

     http://www.studyofnet.com/news/365.html

相关文章
相关标签/搜索