Nosql概述
1.为什么要学习Nosql
1.单机mysql的年代
90年代,一个基本的网络的访问量一般不会太大,单个数据库完全够用
那个时候更多的去使用静态网页,服务器没有什么压力
思考这种情况下,整个网站的瓶颈是什么
- 数据量如果太大,一个机器放不下
- 数据的索引(B+Tree),一个机器也放不下
- 访问量(读写混合),一个服务器承受不了
出现上述三种情况,需要晋级了
2.Memcached(缓存)+Mysql+垂直拆分
网站80%的情况都是在读数据,每次都去查询数据库的话就十分麻烦,所以希望减轻数据库的压力,可以使用缓存来提高效率
发展过程:优化数据结构和索引-->文件缓存(IO)-->Memcached(当时最热门的缓存技术)
3.分库分表+水平拆分+Mysql集群
技术和业务在发展的同时,对人的要求也越来越高(技术爆炸)
操作数据库的本质是读和写
早些年MyISAM:表锁,十分影响效率,高并发下就会出现严重的锁问题
之后转战Innodb:行锁
慢慢的就开始使用分库分表来解决写的压力,Mysql在哪拿个年代推出了表分区,但没有多少公司使用
Mysql的集群,很好的满足了那个年代的所有需求
Mysql集群:在不同的集群中存入等分的数据,三个集群,每个集群各存1/3的数据
4.如今最近的年代
2010-2020十年之间,时间已经发生了翻天覆地的变化(定位,音乐,热搜)
Mysql等关系型数据库不够用了,数据量很大,变化很快
Mysql有的使用它来存储一些比较大的文件,博客,图片,数据库表很大,效率很低
需要一种数据库来专门处理这些数据,Mysql的压力就变得什么小了
在大数据IO压力下,表几乎没法更改
5.目前一个基本的互联网项目
2.为什么要使用NoSQL
用户的个人信息,社交网络,地理位置。用户自己产生的数据,用户日志等等爆发式的增长
这个时候我们需要使用NoSQL数据库,NoSQL可以很好的处理以上的情况
3.什么是NoSQL
NoSQL==Not Only SQL(不仅仅是SQL)
关系型数据库:表格,行,列
NoSQL泛指非关系型数据库,随着web2.0互联网的诞生,传统的关系型数据库很难对付web2.0时代,尤其是超大规模的高并发的社区,暴露出来跟多难以克服的问题
NoSQL在当今大数据环境下发展的十分迅速,Redis是发展最快的,而且是我们当下一定要掌握的一个技术。
很多的数据类型用户的个人信息,社交网络,地理位置,这些数据类型的存储不需要一个固定的格式。
不需要多余操作就可以横向扩展的。
例如:Map<String,Object>使用键值对来控制
4.NoSQL的特点
解耦
- 方便扩展(数据之间没有关系,很好扩展)
- 大数据量高性能(Redis1秒写8万次,读取11万次,NoSQL的缓存记录级,是一种细粒度的缓存,性能会比较高)
- 数据类型是多样型(不需要事先设计数据库,随取随用,如果数据量十分大的表,很多人就无法设计)
- 传统的RDBMS和NoSQL
传统的RDBMS
- 结构化组织
- SQL语句
- 数据和关系都存在独立的表中
- 数据操作,定义数据语言
- 严格的一致性
- 基础的事务
- ......
NoSQL
- 不仅仅是数据
- 没有固定的查询语言
- 键值对存储,列存储,文档存储,图形数据库(社交关系)
- 最终一致性
- CAP定理和BASE(异地多活)初级架构师
- 高性能,高可用,高可扩
- ......
5.了解:3V+3高
大数据时代的3V:主要是描述问题的
- 海量Volume
- 多样Variety
- 实时Velocity
大数据时代的3高:主要是对程序的要求
- 高并发
- 高可拓
- 高性能