Nosql
为什么要用 Nosql ?
咱们一起来看看数据库的发展过程
1、单机的 MYSQL 时代
应用访问数据库是 应用 – DAL 数据库访问层 – DB 数据库
文章图片
在单机的 MYSQL 时代,数据都不会太大,而且网页也是静态网页,一般网站的访问量也小,因此单数据库就完全够用了
上面这种网站,瓶颈就会很明显:
- 数据量变得大了,一个机器放不下如何处理
- 数据的索引 (B+ Tree),一个机器的内存放不下了如何处理
- 读写的访问量,一个服务器承受不了了如何处理
2、Memecache + MYSQL + 垂直拆分
为了解决上面的问题,一个机器处理不过来,我们就放多个机器,但是如何保证数据的一致性呢?
因此就想到了读写分离,专门指定一个数据库用于写数据,其他数据库用于读取数据,并且其他的数据库会同步用于写数据的 MYSQL 中的数据
![【Redis 系列】redis 学习一,数据库的演进及 Nosql 的初步认知](https://img.it610.com/image/info9/55a9f0f31ad84ee8962c072138de9432.png)
文章图片
渐渐的发现每次请求,都需要去操作数据库,这样耗时耗力,需要改变
因此在访问数据库之前,加入了缓存服务器 Memcache,第一次读取数据库,第二次读取的时候在数据库不改变的情况下,读取 Memcache 中的数据,减小数据库的压力
![【Redis 系列】redis 学习一,数据库的演进及 Nosql 的初步认知](https://img.it610.com/image/info9/7f503054fd7a449cbb83cd6bfa5e9b73.png)
文章图片
这一块发展历程是这样的:
优化数据库的结构和索引 – 文件缓存(IO) – 缓存服务器 Memcache
3、分库分表 + 水平拆分 + MYSQL 集群
随着技术发展,业务也跟着飞越发展,也就带来了更多的问题
最开始我们使用的 MYSQL 使用的引擎的是
MyISAM
,他是表锁,十分影响效率,当在高并发的情况下,问题尤为明显后面就有了 MYSQL 的
InnoDB
引擎,他是行锁,随着业务的不停增长,就有了 MYSQL 集群![【Redis 系列】redis 学习一,数据库的演进及 Nosql 的初步认知](https://img.it610.com/image/info9/b32179ef34474bf4bde70588dc940a6c.png)
文章图片
使用集群的方式,每一个集群存储一部分数据,若数据量仍然上升,那么继续增加集群部署
4、现在
由于现代的数据量真的非常大了,大数据时代了,MYSQL 关系型数据库就不够用了,现在数据量多,变化快,以前使用 MYSQL ,设计的时候,就得把所有字段,可能用到的字段,全部想清楚,设计明白,对于现在瞬息万变的时代,这就很难了
现在就会期望,例如存储文件的有文件服务器,存储图片的有图片服务器,有专门的数据库来存这些数据,那么 MYSQL 的压力就会小很多
【【Redis 系列】redis 学习一,数据库的演进及 Nosql 的初步认知】现在 的互联网项目简单来看是这个样子的
![【Redis 系列】redis 学习一,数据库的演进及 Nosql 的初步认知](https://img.it610.com/image/info9/8bb0830fbacd48d0988da240b19c629d.jpg)
文章图片
对于这样的互联网项目,就非常需要 Nosql 了,Nosql 能处理上述出现的问题
Nosql 是什么? Nosql
Not only sql , 不仅仅是 sql
泛指非关系型数据库,随着 web2.0 互联网的诞生,传统的关系型数据库很难对付 web2.0 时代了
例如现在互联网用户需要存储个人信息,定位信息,社交网络等等数据,Nosql 对于这些数据存储不需要用一个固定的格式就可以存储,而且很轻易就可以横向扩展,例如Map ,使用键值对来控制就很 nice 了
Nosql 的特点
- 方便扩展,因为数据之间没有关系,很容易扩展
- 高性能,例如 redis 1 秒能写 8 万次,能读 11 万次,且 Nosql 的存储是记录级别的,是一种细粒度的缓存,因此性能高
- 数据类型多样,不需要事先设计数据库
RDBMS:
- 结构化组织
- sql 语句
- 数据和关系都存在单独的表中
- 数据操作,数据定义语言
- 严格的一致性
- 事务处理 等等
- 不仅仅是数据
- 没有固定的查询语言
- 键值对存储,列存储,文件存储,图形数据库 例如社交关系等等
- 最终一致性
- CAP 定理和 BASE 原理
- 高可用,高性能,高可扩展
3 V,主要是用来描述问题的:
- 海量数据 volume
- 多样性 variety
- 实时性 velocity
- 高并发
- 高性能
- 高可扩展
- Redis
文档型数据库:
- Mongdb
Mongdb 还是一个介于关系型数据库和非关系型数据库中间的产品,他是非关系型数据库中功能最丰富的,最像关系型数据库的非关系型数据库
列存储型数据库:
- HBase
- 分布式文件系统
- Neo4j
- InfoGrid
![【Redis 系列】redis 学习一,数据库的演进及 Nosql 的初步认知](https://img.it610.com/image/info9/c57e24dea20b4fb1bf0089c620bd3399.jpg)
文章图片
咱们来对比一下上述四种分类:
![【Redis 系列】redis 学习一,数据库的演进及 Nosql 的初步认知](https://img.it610.com/image/info9/fbc4f893d20e47a6a8d0488e140b8ed1.jpg)
文章图片
图片来源于网络,这张图片已经很清晰的描述了KV 键值对,文档型数据库,列存储数据库,图形数据库的案例,数据模型,优缺点,现在对于 Nosql 会有了一个大体的认知了吧
欢迎点赞,关注,收藏 朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力
![【Redis 系列】redis 学习一,数据库的演进及 Nosql 的初步认知](https://img.it610.com/image/info9/05a5f86f2a3041aca705c8e34adeccc2.gif)
文章图片
好了,本次就到这里
技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。
我是小魔童哪吒,欢迎点赞关注收藏,下次见~
推荐阅读
- Redis|redis原理之布隆过滤器(Bloom Filter)
- redis安装与基本使用
- java|图解四种 IO 模型
- Redis|Redis性能解析--Redis为什么那么快()
- java|你跳一次涨多少(今天见识到跳槽天花板!!)
- java|送你一份大厂都这么解决Redis缓存问题,面试官必问!
- (免费领取红包封面)【Redis 系列】redis 学习四,set 集合,hash 哈希,zset 有序集合初步认知
- redis优化(bigkey、hotkey)
- redis高可用(主从、哨兵、集群)
- 【Redis 系列】redis 学习四,set 集合,hash 哈希,zset 有序集合初步认知