关系型数据库的局限
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