Redis(缓存数据库,有效控制查询)是非关系型数据库
缓存穿透、缓存击穿,缓存雪崩
Nosql概述
为什么使用NoSQL
大数据时代,那么什么是大数据,大数据就是一般的数据库没有办法进行分析处理,其中大数据处理产品就有Hadoop【2006】,【springBoot、springcould分布式开发】
1.单机MySQL的时代
App -> DAL -> MySQL
最早的时候数据模型是App又叫Web -> DAL数据库访问层 -> MySQL
最早的时候是一种数据库对应的一套语言,后来有了JDBC,使用JDBC可以做到,一种语言可以对应多种数据库,再到后台出现了现在的MyBatise,实现的方式越来越简单
为什么会出现缓存(用户太大,信息太多)
1. 数据库太大,一个机器放不下
2. 数据的索引太大,比如MySQL单表超过300万数据,就必须建立索引,不建立索引就会查询很慢,就必须创建索引
3. 访问量(读写)太大,一个服务器承受不了
2.Memcached(缓存) + MySQL+ 垂直拆分
读写分离
网页百分之八十都是在对,每次查询都去去查询数据库,会很慢,并且相同的查询会被重复调用会导致效率低,所以使用缓存来提高服务器和数据库的效率,所以缓存主要是解决读的问题
发展过程:优化数据结构和索引 -> 文件缓存(数据流的读写IO)-> Memcached
3.分库分表 + 水平拆分 + MySQL集群
技术和业务在发展,对人的要求就高,技术越来越复杂,
本质,数据库的读写
一开始一条线读写单机,后台加缓存,读的问题解决。再往后读的问题解决了,那么写的问题也要解决,
MyISM:锁表,影响效率,在高并发下就会出现很大问题
升级InnoDB:行锁,提高效率
慢慢的使用分库分表,解决写的压力
4.近年来(2010-2020)
因为数据量大,变化快导致mysql关系型数据库就不够用了,所以又出现了其他的的数据库,比如把数据放到缓存里,经过一定固定的时间再把数据放到持久层数据库中持久化,保证数据的安全。mysql有时候也会存储比较大的文件,比如图片,导致数据表很大,数据表大那么再去做查询的时候效率就会低,所以就在想可不可将一些公共的数据拿出去单独的管理,用来专门处理这些数据,那么mysql的压力就会变小。要处理这些数据,用关系型数据库就已经处理不了了,比如大数据的IO压力下,表的结构几乎是不能改的,因为数据再存储之前数据的列都是已经设计好的,那么在数据量很大的基础上,要去动态对列进行增加或者减少,这几乎是不可能的或者是费劲的。这里有一个名词叫“灰度发布”又叫“金丝雀发布”意思是在发布或者更新项目的时候是平滑的。
5.目前一个基本的互联网项目
用户去访问企业某些信息的时候,用户先是访问企业的防火墙或者一些路由网关,访问防火墙之前要做一个事情叫“负载均衡”(主机和备机)通过负载均衡去搭上各个服务器,,每个服务器都有对应的多个myslq服务器,除了mysql花卉进阿里一些缓存服务器、移动信息服务器、hadoop集群、实时通信服务器、流媒体服务器、图片服务器、文件服务器、群发服务器等等...
什么是NoSQL
NoSQL = Not Only SQL
NoSQL泛指非关系型数据库,传统的关系型数据库(关系型数据库是由行和列组成的)对超大规模的高并发的社区处理不了,就会暴露出来很多难以克服的问题,所以产生了非关系型数据库,NoSQL在当今数据环境下发展的十分迅速,Redis是发展最快的,而且四我们当先必须掌握的技术!
很多的数据类型,比如用户信息,社交网络,地理位置。这些数据类型的存储不需要一个固定的格式(行列,关系)!是动态发展的,不许哟啊多余的操作就可以横向扩展的。类似于java里的Map<String,Object>,这是最典型的NoSQL,以(key,value)键值对来控制使用(注:键值对控制只是NoSQL的一种NoSQ总共有四大分类,这只是其中的一种,典型代表是Redis)
NoSQL的特点
1.方便扩展(数据之前没有关系,解耦)
2.大数据量高性能(Redis一秒可以写8万字,读取11万字,NoSQL的缓存记录级是一种细粒度的缓存)
3.数据类型是多样型的(不需要事先设计数据库,如果是Redis可以用过get、set随取随用的)
4.传统的RDBMS和NoSQL区别
传统的RDBMS
- 结构化组织
- SQL
- 数据和关系都存在单独的表中(row col)
- 操作操作数据的操作语言,数据定义语言
- 严格的一致性
- 基础的事务操作
.....
NoSQL
- 不仅仅是数据
- 没有固定的查询语言,有很多的语法,去学语法就可以了
- 很多的存储方式,比如:键值对存储、列存储、文档存储、图形数据库(社交关系)...
- 最终一致性
- CAP定理和BASE(异地多活,保证整个服务器不荡机,一个地方崩了其他的地方还可以正常的运行)
- 保证“三高”问题,高性能、高可用、高可扩展性
- ....
了解:3V+3高
大数据时间的3V:主要是描述问题的
1.海量Volume
2.多样Variety
3.实时Velocity
大数据时间的3高:主要是对程序的要求
1.高并发
2.高可扩
3.高性能
真正在公司实践中是MySQL + NoSQL一起使用的