一、Nosql概述:
1、为什么要用Nosql?
用户的个人信息、社交网络、地理位置、用户自己产生的数据,用户日志等等在爆发式增涨,这时候我们就需要使用NoSQL数据库,可以很好处理以上情况
2、 什么是NoSQL(not only sql)
泛指非关系型数据库,随着web2.0互联网的诞生,传统的关系型数据库很难对付web2.0时代,尤其是超大规模的高并发社区。暴露出来很多难以克服的问题,NoSQL在当下大数据环境下发展十分迅速,Redis是发展最快的,而且是我们当下必须要掌握的一个技术。
很多的数据类型:用户的个人信息、社交网络、地理位置。这些数据类型的存储不需要一个固定的格式
3、NoSQL特点
①方便扩展(数据之间没有关系,很好扩展)
②大数据量高性能(redis一秒可以写8万次,读11万次,nosql的缓存记录集是一种细粒度的缓存,性能比较高)
③数据类型是多样的(不需要事先设计数据库,随取随用,如果是数据量十分大的表,很多人就无法设计了)
④传统RDBMS和NoSQL
传统的RDBMS:
结构化组织
sql
数据和关系都存在单独的表中
数据操作,数据定义语言
严格的一致性
基础的事物操作
NoSQL:
不仅仅是数据
没有固定的查询语言
键值对存储,列存储、文档存储、图形数据库
最终一致性
CAP定理和BASE
高性能,高可用、高可扩展性
二、阿里巴巴演进分析
1、商品的基本信息
名称、价格、商家信息:关系型数据库就可以解决(mysql、oracle)推荐文章:阿里云的这群疯子
2、商品的描述、评论(文字比较多)
文档型数据库中:mongdb
3、图片
分布式文件系统:FastDFS
4、商品的关键字(搜索)
搜索引擎:solr
5、商品热门的波段信息
内存数据库:redis、Tair
6、商品的交易、外部的支付接口
三方应用
思考:大型互联网应用问题:
数据类型太多了
数据源太多了,经常重构
数据要改造,大面积改造
三、NOSQL四大分类
1、KV键值对
redis
2、文档型数据库
mongdb(一般必须要掌握):
一个基于分布式文件存储的数据库,C++编写,主要用来处理大量的文档,是一个介于关系型数据库和非关系型数据库中中间产品,mongdb是非关系型数据库中功能最丰富,最像关系型数据库的
3、列存储数据库
分布式文件系统:FastFDS
4、图形关系数据库
graph
存放的不是图片,存放的是关系,比如:朋友圈社交网络,广告推荐
四、redis入门
1、redis是什么?
Remote Dictionary Server,远程字典服务
是一个开源的使用C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
免费何开源,是当下最热门的NoSQL技术之一,也被人们称之为结构化数据库。
2、redis能干嘛?
①内存存储、持久化,内存是断电即失,所以持久化很重要(rdb、aof)
②效率高、可以用于高速缓存
③发布订阅系统
④地图信息分析
⑤计时器、计数器
3、特性
支持多种数据类型
支持持久化
支持集群
支持事物
4、学习中需要用到的东西
①狂神的公众号:狂神说
②官网:https://redis.io/
③中文网:http://www.redis.cn/
④下载地址:通过官网下载即可(windows在github上下载)
⑤学习视频:https://www.bilibili.com/video/BV1S54y1R7SB?p=1
5、安装
windows安装:https://www.cnblogs.com/zhangguosheng1121/p/11153548.html
linux安装:https://www.cnblogs.com/zhangguosheng1121/p/11988497.html
6、redis基础知识
redis是单线程的:
redis是很快的,官方表示,redis是基于内存操作的,cpu不是redis性能瓶颈,redis的瓶颈是根据机器的内存和网络带宽,既然可以使用单线程来实现,就使用单线程了,所以就有了单线程
redis是c语言写的,官方提供的数据为100000+的QPS,完全不比同样是使用key-value的Memecache差
思考:redis为什么单线程还真么快:
1、误区1:高性能的服务器一定是多线程的
2、误区2:多线程(cpu上下文切换)一定比单线程效率高
核心:redis是将所有的数据全部放在内存的,所以说使用单线程去操作效率就是高,多线程(cpu上下文切换:耗时的操作)
对于内存系统来说,如果没有上线文切换效率就是最高的。多次读写都是在一个cpu上的,在内存情况下,这个就是最佳的方案