一、前言
在正式学习redis之前,我们需要问自己一个问题,NoSQL它是怎样发展出来的?为什么我们要使用它?互联网的数据库是怎样的发展历程?带着这些疑问,让我们开始下面的阅读吧。
二、互联网架构演变过程
我们知道数据库的演变过程是分三个阶段的,由开始的人工管理阶段 到文件系统阶段再到如今的数据库阶段。而在当今数据库情形下,出现了各种各样的数据库,呈现百花齐放的情形。最终大致分为关系型数据库和非关系型数据库两种。
2.1 单机mysql 时代(1w以下请求)
在互联网刚刚萌芽的时代,网民数量不多,一般的网站的访问量也不大,单个数据库可以轻松应付
此时数据存储的瓶颈取决于:
- 1、数据量的总大小
- 2、数据的索引(一个机器内存放不下)
- 3、访问量一个实例不能承受(未进行读写分离)
2.2 Memcached(缓存)+mysql + 垂直拆分
在09年之后,memcached技术开始普及,它作为一个独立的分布式缓存服务器,为多台web服务器提供了一个共享的高性能缓存服务,通过这种缓存来缓解数据库的压力,同时mysql数据库也开始垂直拆分
2.3 Mysql 主从读写分离
由于数据库的写入压力增加,Memcached 只能缓解数据库的读取压力。读写集中在一个数据库上造成数据库达到瓶颈,就出现了主从复制模式完成读写分离技术。主库负责写的操作,从库负责读的操作。
2.4 分库分表 +水平拆分+ mysql集群
在Memcached的高速缓存,mysql的主从复制,读写分离之后。还存在的问题是当数据量持续猛增的时候,mysql主库面临着很大的写压力,造成严重的锁问题,因此出现了行级锁的InnoDB引擎替代了之前表级锁的MyISAM。在复杂的业务下,出现了mysql集群。也就是多个主从复制。
2.5 以mysql代表的关系型数据库瓶颈
mysql数据库在存储大数据的时候在进行数据导出和恢复的时候非常慢,同时在存储上千万的数据的时候会存在很多瓶颈,另外它存在着强关系结构,就是关系型数据库的表结构具备很强的约束,典型的就是三大范式,表的结构修改不够灵活,速度也没有Nosql快。
因此,术业有专攻,它并不能应对所有的场合,随着大数据时代的来临,我们可能需要采用 nosql 来进行数据处理和挖掘。
三、Nosql 崛起
Nosql 是非关系型数据库,称为not only sql。NoSQL 是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储。
它针对关系型数据库进行了补充,弥补了一定的缺陷,但同时也丢失了一些特性,例如事务功能的缺失。通常情况下,我们可以这样考虑,如果我们的数据用不着sql 或者说用了sql 不行的情况,可以看看Nosql 是否满足我们的需求呢。
常见的NoSQL 分为5类:
- k-v :代表redis
- 文档型 :代表MongoDB
- 列式存储型 :代表Hbase
- 全文检索型: 代表Elasticsearch
- 图形关系数据库:代表Neo4j,不是存图片,放的是关系。比如:社交网络,广告推荐
NoSQL的适用场景:
- 对数据高并发的读写
- 海量数据的读写
- 对数据高可扩展的
NoSQL不适用场景:
- 需要事务支持
- 基于sql的结构化查询存储,处理复杂的关系。
四、小结
当然NoSQL本身具备着随意的特点,相对关系型数据来说它有着杂乱的结构,虽然它的查询是效率很高,但在实际场景中要看很多因素,最终形成的mysql + nosql 成为现在的开发主流。