MySQL系列(一):MySQL深入学习先导篇之基础架构

e85faf6bf844a5c3b6879f7eba0ecd73.png

作者:z小赵

★ 

一枚用心坚持写原创的“无趣”程序猿,在自身受益的同时也让朋友们在技术上有所提升。

文章目录

  • 为什么要学习 MySQL?

  • 本系列的侧重点是什么?

  • 本系列文章学完之后你能得到什么?

  • 关于 MySQL 环境及版本的选择

  • 本系列文章大纲

  • MySQL 的安装及验证

  • MySQL 的基础架构介绍

  • 总结

为什么要学习 MySQL?

目前在使用互联网技术的公司中,几乎每家公司都会用到数据库技术来存储一些信息。目前市面上用的比较多的主流数据库有 MySQL、Oracle,以及逐渐流行起来的 PostgreSQL;下图为截止发稿前各类数据库的排名情况(数据来源于 DB-Engines 官网)

a92e05be74d60445954dd2e77ff24e4e.png

数据库排名图

从图中可以看出,前 2 名是 Oracle 和 MySQL,可见其应用的受欢迎及广泛使用程度;由于 Oracle 和 MySQL 都是关系型数据库且 Oracle 不是免费的,本系列文章我们重点来讲解 MySQL 的相关原理实现。

本系列的侧重点是什么?

关于 SQL 基础语法不会做过多讲解,如果对 SQL 基础语法不熟悉的朋友可以在公众号后台回复 MySQL,下载《SQL 必知必会》PDF 进行自学,也可以通过 Google 方式进行自学。

本系列侧重点是 MySQL 的底层实现原理、SQL 调优、高性能的索引设计、MySQL 集群等等。

本系列文章学完之后你能得到什么?

  • 了解 SQL 语句执行的底层实现原理,从而写出更加高效的 SQL

  • 学会如何设计和使用索引,从而使其效果最大化

  • 学会如何构建稳定的 MySQL 集群

  • 应付面试及升职加薪(当然,这才是我们的最终目标

关于 MySQL 环境及版本的选择

  1. 安装使用环境:MacBook Pro 10.14.6

  2. MySQL 版本:5.6,选择该版本原因有二:

  • 作者公司使用的是 5.6,目前库里单表存储数据量亿级别

  • 网上调研各大互联网公司使用的 5.6 和 5.7 居多

基于以上两点,最终选择使用 5.6 作为本系列内容讲解的版本,当然也会介绍一些最新版本下的新特性供大家了解学习。

本系列文章大纲

  1. MySQL 安装及基本架构原理介绍

  2. MySQL 的并发控制和锁机制是怎么工作的

  3. MySQL 索引构建原理,如果创建出高效的索引

  4. SQL 执行原理及优化

  5. MySQL 集群搭建及主从同步原理

  6. MySQL 集群的高可用

  7. 实际生产环境中 MySQL 与缓存是如何配合使用的?

  8. MySQL 数据备份与恢复(了解学习)

  9. ......

以上为本系列文章大纲,当然会随着文章的逐步讲解会根据实际情况进行相应的调整(主要是作者写文章比较随性,想到比较好的话题会随时插入到系列文章中来)。

MySQL 的安装及验证

  1. MySQL 下载地址(https://downloads.mysql.com/archives/community/),选择5.7的dmg版本下载。

55d88ae285efe5deec28959ca59b38b1.png
  1. 安装,完成后打开系统偏好设置 -> 点击 MySQL -> Start MySQL Server

87c6e9a042bb1f625e8bea3b3010e1bc.png f11eba41100ba0ca29ac80780d63b7db.png
  1. 配置环境变量

ac0d2051906811ae62cf93b3a2ea6e11.png
  1. 验证

  • 查看 MySQL 版本号

2f69c47e03d72642f5a13b8c419de971.png

  • 登录 MySQL 服务端

667c059e75466ba391e56a1a8a2532f0.png

  • 查看数据库

76b33db8892dd813ef2885276ef3d414.png

到此,MySQL 安装完成,关于 MySQL 的语法基本使用,不熟悉的朋友请先看文章开头下载 PDF 进行学习。

MySQL 的基础架构介绍

36a5bafac4f3c333ab0c6b621842a8c5.png

MySQL 整个架构图如上所示,可以分为三部分。第一部分是客户端,用于向服务端发送请求;第二部分为淡绿色框里面的内容:

  • 连接及线程管理模块:用于管理客户端请求的,比如检查验证请求连接的合法性,对于合法用户分配处理线程去执行任务等等工作。验证合法性就相当于你要回家,但是门上了锁,你只有拥有正确的钥匙才能把房门打开进去,而分配处理线程去执行任务就相当于你回家了让扫地机器人帮你扫地,让电饭煲帮你煮粥,而你只是任务的分配者。

  • 缓存:用于存储被频繁访问的热点数据。其作用是用户请求的数据如果在缓存中存在,则直接返回缓存中的数据,而不需要再去经过解析器、优化器等操作从存储引擎中获取,从而加快了数据的读取速度。(题外话,一般涉及到缓存时,绝大部分情况下是为了提高数据的访问速度)

  • 解析器:用于解析用户提交的 SQL 语句,分析请求想要做什么样的事情。用户一般提交的请求是 CRUD,比如某个请求是个 Select,则解析器通过解析 SQL 语句,发现是一个查询请求,则接下来就会进行查询相关的操作。

  • 优化器:用于优化或者重写用户的请求 SQL。优化或者重写 SQL 就是优化器觉得用户提交的 SQL 不够高效,优化器通过自己的一套逻辑处理后重写了执行相同功能的 SQL 语句,并且其执行效率比用户提交的 SQL 执行效率更高。

第三部分是存储引擎,存储引擎是用于存储数据进行 CRUD 操作后对数据处理结果进行存储的;不同的存储引擎实现的功能也不一样,比如 InnoDB 存储引擎实现了事务功能,而 MYISAM 存储引擎并没有事务的功能,再比如 InnoBD 存储引擎对于并发操作实现了行级锁,而 MYISAM 存储引擎是表锁。常见的存储引擎有如下:InnoDB、MYISAM、NDB、Memory 等等,文章以 InnoDB 存储引擎贯穿整个系列,因为 InnoDB 在生产环境中也是使用最多的存储引擎。存储引擎究竟实现了哪些功能呢?这里以 InnoDB 为例:

  1. 支持事务。对于日常开发需求中,有些应用场景需要联动多个资源同时处理,要么多个资源同时处理成功,要么只要有一个失败则全体进行回滚操作,即是通过事务的方式将多个处理动作做成一个原子性操作。

  2. MVCC 机制。InnoDB采用了行级锁,但是为了进一步降低锁资源的竞争程度,采用 MVCC 机制实现更高效的并发操作。

  3. 索引机制。不同引擎实现的索引机制各不相同,InnoDB 引擎通过对主键建立索引或者主键结合其他列建立二级索引,加速数据的读取速度。

  4. 可预测性预读策略。InnoDB 通过可预测性预读策略对磁盘中的数据进行读取,然后在内存中建立 hash 索引,从而进一步提升读取数据的速度。

以上为 InnoDB 引擎的部分常见的特性,通过简单了解之后能够对第三层的引擎能够先有个直观的认识。

总结

本文主要介绍了为什么要学习 MySQL,MySQL 的安装及基本架构组成部分的功能介绍,下篇文章我们来深入了解一下 MySQL 的并发控制和锁机制,敬请期待。

 z小赵

189a82f1ce8f6cb3085a56dfdeff40b7.jpeg

关注系列优秀文章不走丢

进群的小伙伴请加右侧私人微信(备注:进群)

< END >

往期精选

 记一次腾讯云(西安)后台开发面试经历

 Redis系列(七):缓存只是读写回种这么简单吗?如果是,那么请你一定看看这篇文章!

 Kafka系列10:面试题是否有必要深入了解其背后的原理?我觉得应该刨根究底(下)

 Kafka系列第7篇:你必须要知道集群内部工作原理的一些事!

 Redis系列(六):你说要看Redis线程模型?安排

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值