一、关系型数据库的缺陷
1)很难进行分布式部署,I/O瓶颈显著,依赖于强大的服务器。
2)难以处理非结构化数据
二、CAP定律(推动关系型数据库向非关系型数据库转变)
在任何分布式系统中,只可能满足一致性,可用性和分区容忍性三者中的两者,不可能全部满足。
三、什么是分区容忍性
(一)分区:在一个分布式系统里,节点组成的网络本来应该是联通的,然而可能因为一些故障,使得有些节点之间不再联通,整个网络就分成了几块区域。数据就分散在这些不联通的区域。当你一个数据项只在一个节点中保存,那么分区出现之后,和这个节点不联通的部分就访问不到这个数据,这是分区不能容忍的。
(二)提高分区容忍性的办法:将一个数据项复制到多个节点上,那么出现分区之后,这一项数据就可能分布到各个区里。
(三)一致性问题:数据复制到多个节点,可能会导致多个节点上的数据不一致,。要保证节点数据一致,每次写操作都要等待全部节点写成功。而这样的等待又可能会带来可用性的问题。
总的来说。数据存在的节点越多,分区容忍性就越高,但是复制更新的数据就越多,一致性就越难保证。s为了保证一致性,更新所有节点数据的时间就越长,可用性就会降低。
四、Hbase-强一致性数据库
Hbase是强一致性的。因为基于Hadoop,所以Hbase的数据是以HDFS的file(Hfile)的形式保存。换句话说,默认情况下Hfile保存在三个不同节点上。
思考:①既然有三个副本,如何保证Hbase的强一致性的?
Hfile是已经持久化在硬盘上,所以Hfile是不能改变。一旦在某一个DataNode上生成一个Hfile后就会异步更新到其他两个DataNode,这3个Hfile就会保持一致。
②数据在不同更新,如何保证修改?
Hbase之所以是优先写数据库,是因为所有写操作默认先写入一个空的内存文件,该内存文件被写满后整体提交到HDFS.
(四)、NoSQL(not only sql)的特点
①拓展性强
②并发性能好
③数据模型灵活