大数据技术原理与应用【第五讲】NoSQL数据库:5.1 NoSQL概论&5.2 NoSQL与关系数据库的比较
5.1 NoSQL概论
最初:反SQL
概念演变,现在:Not only SQL
特点:
1.灵活的可扩展性
所以支持海量数据存储
2.灵活的数据模型
例如:HBase
3.和云计算的紧密结合
(一)nosql兴起原因:
1.关系性数据库无法满足web2.0的需求;
传统的关系数据库优点:
1.非常完备的关系理论基础
2.具有事务机制的支持
3.高效的查询优化机制
传统的关系数据库性能上的缺陷:
1.无法满足海量数据的管理需求:
互联网时代,数据产生速度非常快,那么庞大的数据如果还是按照传统的关系数据库进行搜索,效率低下,响应时间慢。
2.无法满足高并发的需求:
网页先访问底层数据库,找到相关满足要求的记录,再去生成网页。
以前:动态网页静态化,事先保存HTML。存在性能瓶颈。
现在:很多网页(动态数据)需要实时生成;实时生成的数据对关系数据库的负载很高;基本上用关系数据库无法满足这个高并发的需求。
3.无法满足高扩展性和高可用性的需求;
某些网站很多时候会面临负载高峰期。对于关系数据库来讲无法在短时间提升整个对外的服务能力,因为关系数据库不具备非常好的可扩展性。
很多企业采用mysql集群。
mysql集群:主从备份,一主一从。主从机制读写分离,可以解决阶段性问题,无法完全解决问题。
缺陷:
1.复杂性:整个集群部署管理配置都非常复杂。
2.延迟性:(一般采取异步方式)当主库压力较大时,会带来较大的延迟。
3.扩容问题:整个集群压力过大时,需要增加新的机器,对整个数据集进行重新分区,非常复杂。
2.数据模型的局限性
关系数据库设计提出理想的模式:One size fits all.
提出一个关系模型去适用于所有的业务场景。
不同业务场景的特性不同,不实际。
3.web2.0关系数据库许多特性没有发挥
没有发挥作用,反而成了鸡肋:完善的事务机制,高效的查询机制
1.Web2.0通常是不用严格数据库事务
2.Web2.0不要求严格的读写实时性
3.Web2.0不包含复杂的sql语句(有范式)
5.2 NoSQL与关系数据库的比较
一、数据库原理方面:
NoSQL数据库产品没有同一的理论基础。分为不同的大类,每个大类都有自己的产品规范。
二、数据规模方面:
![](https://img2018.cnblogs.com/blog/1491599/201906/1491599-20190608213237415-1604082660.png)
![](https://img2018.cnblogs.com/blog/1491599/201906/1491599-20190608213237415-1604082660.png)
纵向扩展:加CPU,加内存。再怎么加都是有上限的。
NoSQL数据库:增加结点的方式,扩大性能,提升处理能力。
三、数据库模式方面:
![](https://img2018.cnblogs.com/blog/1491599/201906/1491599-20190608213351875-497705328.png)
关系数据库:严格的数据库模式,不灵活。
NoSQL数据库:不存在固定的数据库模式。
四、查询效率方面:
![](https://img2018.cnblogs.com/blog/1491599/201906/1491599-20190608213703485-651940064.png)
关系数据库:有索引机制,也有非常好的查询优化引擎;在适当数量级的时候,查询效率很高;数据量大,查询效率下降;
NoSQL数据库:很多数据库没有构建起面向复杂查询的索引,面对复杂的查询时的性能不如关系数据库。
五、事务一致性方面:
![](https://img2018.cnblogs.com/blog/1491599/201906/1491599-20190609105810875-1216565194.png)
NoSQL:很多产品在设计时,放松了对ACID四种性质的要求;采用另一种方法,BASE模型(BASE模型是NoSQL数据库三大理论基础之一);很多NoSQL只能保证最终一致性,不能保证事务强一致性。
(NoSQL有ACID特性,NewSQL没有ACID)
六、数据完整性方面:
![](https://img2018.cnblogs.com/blog/1491599/201906/1491599-20190609110353458-180702607.png)
关系数据库:会设置主键或相关的约束,来实现实体完整性、参照完整性、用户自定义完整性。
NoSQL:
七:可扩展方面:
![](https://img2018.cnblogs.com/blog/1491599/201906/1491599-20190609110431207-36922374.png)
八,在可用性方面:
![](https://img2018.cnblogs.com/blog/1491599/201906/1491599-20190609110559427-316399609.png)
关系:优先目标是,保证数据的一致性。
NoSQL:为了提高可用性来设计的,有时会适当牺牲一致性。
九、在标准化方面:
![](https://img2018.cnblogs.com/blog/1491599/201906/1491599-20190609110749143-306281645.png)
关系:遵循一套标准
NoSQL:有很多不同类别,不可能统一标准。
十、技术支持方面:
![](https://img2018.cnblogs.com/blog/1491599/201906/1491599-20190609110929915-1852364171.png)
十一、在可维护性方面:
![](https://img2018.cnblogs.com/blog/1491599/201906/1491599-20190609111001321-388259267.png)
NoSQL:不像关系数据库一样有成熟的基础,以及实践的操作规范,维护起来较为复杂。
总结:
1.关系数据库的优势:
![](https://img2018.cnblogs.com/blog/1491599/201906/1491599-20190609111154633-266367179.png)
2.关系数据库的劣势
3.nosql优势与劣势:
很多NoSQL产品不支持事务强一致性,直接影响了它在一些企业的关键业务系统中的应用。
这两种数据库各有优缺点,所以无法互相取代。
(二)两种数据库的应用场景:(可采用混合型架构)
![](https://img2018.cnblogs.com/blog/1491599/201906/1491599-20190609111956641-1050722752.png)
电信银行等关键业务,需要保证事务的强一致性。