感谢狂神提供的学习资源!https://www.bilibili.com/video/BV1S54y1R7SB
为什么要用Nosql
大数据时代中,一般的数据库无法进行分析处理了!
1、单机Mysql时代
数据库瓶颈:
- 数据量如果太大,一个机器放不下!
- 数据的索引 300万就要建立索引(B+Tree),一个机器内存放不下
- 访问量(读写混合),一个服务器承受不住
2、Memcached(缓存)+Mysql+垂直拆分(读写分离)
网站80%的情况都在读,如果每次查询就要走数据库就十分麻烦!所以我们需要用缓存来提高效率!
发展过程:优化数据结构和索引——>文件缓存(IO)——>缓存(Memcached)
3、分库分表+水平拆分+Mysql集群
数据库本质:读+写
早些年MyISAM:表锁——在查询的过程中,将整张表都加锁,直到查询结束,十分影响效率
转战Innodb:行锁
慢慢开始用分库分表来解决写的压力
4、如今年代
数据量大且更新快,比如说:用户的个人信息,社交网络,地理位置,用户自己产生的数据,用户日志等等爆发式增长
导致Mysql等关系型数据库就不够用了!
所以这个时候,多采用Nosql(非关系型数据库)来处理这些情况
什么是NoSQL
NoSQL
Nosql = Not Only Sql
Mysql等关系型数据库:表格,行,列!
NoSQL泛指非关系型数据库,随着web2.0互联网的诞生!传统的关系型数据库很难对付web2.0时代的产物,尤其是超大规模的高并发的社区,所以NoSQL在当今大数据环境下发展十分迅速,Redis是发展最快的,必须掌握!
很多数据类型用户的个人信息,社交网络,地理位置,这些数据类型的存储不需要一个固定的格式!
典型的数据结构就是k-v键值对!
NoSQL特点
- 方便扩展(数据之间没有关系,很好扩展!)
- 大数据量高性能(Redis一秒可以读11万,写8万)
- 数据类型的多样性(不需要事先设计数据库!随取随用)
- 传统的RDBMS和NoSQL
传统的RDBMS
——结构化组织
——SQL
——数据和关系都存在单独的表中
——ACID原则
NoSQL
——不仅仅是数据
——没有固定的查询语言
——键值对存储,列存储,文档存储,图形数据库(拓扑图)
——最终一致性
——CAP定理和BASE(异地多活)
——高性能,高可用,高可扩
了解:3V+3高
大数据时代的3V:描述问题
- 海量Volume
- 多样Variety
- 实时Velocity
大数据时代的3高:主要是对程序的要求
- 高性能(保证性能)
- 高并发(用户量)
- 高可拓(随时可以水平拆分)
真正的实践:NoSQL+RDBMS一起使用才是最强的!
阿里巴巴结构演进
#1、商品的基本信息
名称、价格、商家信息
关系型数据库就可以解决了!
淘宝内部的Mysql不是我们使用的Mysql,底层已经改变!
#2、商品的描述、评论(文字比较多)
文档型数据库 MongoDB
#3、图片
分布式文件系统 FastDFS
淘宝自己的TFS
Google的GFS
Hadoop的HDFS
阿里云的OSS
#4、商品的关键字(搜索)
搜索引擎 solr elasticsearch
淘宝的搜索引擎:ISerach ——创始人多隆
#5、商品热门的波段信息
内存数据库
Redis Tair Memeached...
#6、商品的交易,外部的支付接口
三方应用
要知道,一个简单的网页背后的技术一定不这么简单!
大型互联网应用问题:
- 数据类型太多了
- 数据源繁多,经常重构!
- 数据要改造,大面积改造
于是,为了解决数据库的差异性和数据源的差异性,在总舵webapp和数据库之间加一层同意数据服务平台(UDSL)来管理。在架构的思想中,没有什么问题是加一层不能解决的,如果有那就加两层!
NoSQL的四大分类
KV键值对
- 新浪:Redis
- 美团:Redis+Tair
- 阿里、百度:Redis+memecache
文档型数据库
- MongoDB(掌握)
- MongDB是一个基于分布式文件存储的数据库,C++编写,主要用力啊处理大量文档!
- MongDB是一个介于关系型数据库和非关系型数据中间的产品!MongDB是非关系型数据库中功能最丰富,最像关系型数据库
- ConthDB
列存储数据库
- HBase
- 分布式文件系统
图关系数据库
- 不是存储图,放的是关系,比如:朋友圈社交网络,广告推荐!
- Neo4j