有了MySQL,为什么还需要NoSQL?

点击上方“Java基基”,选择“设为星标”

做积极的人,而不是积极废人!

每天 14:00 更新文章,每天掉亿点点头发...

源码精品专栏

 

来源:blog.csdn.net/weixin_68829137/

article/details/130269267


noSQL的大概意思

noSQL现在非常火,我看过的简历里面十个有九个都写了熟悉noSQL,但是对于noSQL背后的细节却很少有人能讲清楚,甚至连noSQL里面的这个no是什么意思都很多人搞错。这个no并不是not的意思,而是not only的缩写。不得不说这个缩写实在是很坑爹,单从字面上应该没人能猜出来它是这个意思。而且即使解读成not only SQL,还是有点云里雾里,不是很能精准地get到它的点。

因为SQL的英文全写是structured query language,也就是结构化查询语言的意思。它可以认为是一门特殊的编程语言,但“不仅仅是SQL”是啥意思?的确令人费解,所以我们从字面意思上去理解是不行的,我们需要从实际应用场景去理解。

SQL的应用场景是关系型数据库,比如我们常用的Oracle、MySQL,这些就是关系型数据库。我们理解数据库的时候,往往会从表的结构入手去理解。数据库当中存储的是一张张的表,表呢是一行行数据组成的,而每一行数据都有固定的字段。我想这点大家应该非常熟悉,即使没有学过数据库或者是像我这样已经还给老师的,应该或多或少都有印象。

但是为什么它会被叫做关系型数据库,而不是表结构数据库呢?

因为在数据库当中,关系要比表结构更重要。表结构只是一种形式,而数据库当中核心的设计理念其实是关系。这也是为什么我们学习数据库的时候都需要从ER图开始,而不是上来就讲数据库使用的方法,或者是SQL语言的细节。如果你想不明白这句话的含义,也没有关系,我们先放一放,最后再回到这个话题来。

问题来了,我们知道了常用的SQL数据库是关系型数据库,那么noSQL代表的数据库又是什么呢?

关于noSQL概念我至少看到了两种说法,一种说法是非关系型数据库,另一种说法是文档型数据库。我个人在理解的时候觉得这两种说法都不是非常完美,但相比之下显然是第二种更好,因为第一种说法完全没有给我们提供任何信息。文档型数据库这里的文档,并不是我们常规理解的一篇文档的含义,而是指的数据存储的结构和核心逻辑。

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro

  • 视频教程:https://doc.iocoder.cn/video/

理论支撑

数据库分类,简单分成,关系型数据库核非关系型数据库。

2f985aac078f198852c5bd0ae02e80a2.png

没错,NoSQL就属于非关系型数据库,它的理论支撑是CAP理论,CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。因此,根据 CAP 原理将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三 大类:

  • CA - 单点集群 ,满足一致性,可用性的系统,通常在可扩展性上不太强大。

  • CP - 满足一致性 ,分区容忍性的系统,通常性能不是特别高。

  • AP - 满足可用性 ,分区容忍性的系统,通常可能对一致性要求低一些。

7cf69fb704958891e3c73e423f411489.png

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud

  • 视频教程:https://doc.iocoder.cn/video/

为什么需要NoSQL

一句话是,传统关系型数据库处理不了超大规模和超高并发的场景。

这句话有些绝对,(如果不惜代价,拼命堆硬件,还是可以处理的),但是主要就是想表达这个意思,也是NoSQL的优势。其实有如下4个方面:

df7f79060bbd15a4966f4a127f70f86a.png

为什么NoSQL有处理超大规模和超高并发的场景的优势

超大规模的问题

关联扩展性:关系型数据库存在类似Join这样多表查询机制,使得数据库在扩展方面很艰难。非关系型没有Join这样的操作。

超高并发的问题

关联处理速度:数据量达到一定规模时,由于关系型数据库的系统逻辑非常复杂,使得其非常容易发生死锁等的并发问题,所以导致其读写速度下滑非常严重。

关系型数据库的特点

348843067547f5a7bc70e8c97b197668.png
NoSQL有哪些优势
7dc895599934333b82579671171a9f6b.png

也是非关系型数据库的优点

70414f8c7f16bc50eefd4de9413b36f3.png

NoSQL有哪些劣势

7fcb26623f6956af8929b9108fbec2f7.png

NoSQL 使用场景

98439359b4022052b0b870b8e2d55c83.png

NoSQL有6大类应用,及各个代表

8492ccb69cd293ce43d544f1db0fe783.png

全方位对比

5a25b23319a54f9ea3bc45a6d538e95d.png

关系型数据库的核心逻辑就是存储关系,使用规范、各种技巧和特性,本质上都是围绕这个核心展开的。如果我们没有get到这一层就来使用数据库很容易走偏,很多匪夷所思的操作就是这么来的,比如有人在数据库当中存储前端页面的代码,比如把id拼接成一个字符串来实现存储多个值等等。

这也说明了经典教材上的内容没有废话,每一个章节都有它预期的作用,因此当我们觉得某些内容没有用的时候,可能并不是教材错了,只是我们没有理解到位。

今天的文章就是这些,如果觉得有所收获,请顺手点个关注吧,你们的举手之劳对我来说很重要。



欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢

6edcf30c0774c75dc310885a1dd21315.png

已在知识星球更新源码解析如下:

313ef9041d73a0001279cc1c12f9638c.jpeg

cf4b4ad6030984db0876b5707493fa31.jpeg

1e69263752b36e0a4be561de8f4c988c.jpeg

fe3c5b1f2ff953122badd2eaf9cb1e4d.jpeg

最近更新《芋道 SpringBoot 2.X 入门》系列,已经 101 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。

提供近 3W 行代码的 SpringBoot 示例,以及超 6W 行代码的电商微服务项目。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值