浅谈Mysql数据库

一、为什么要使用数据库?

        使用一个东西,就要清楚它的功能价值,才能更好的利用它,使我们在工作生活中游刃有余。关于数据库的使用,好多人会说,一个数据库就是好多张表,那么为什么不使用如Excel的表格呢,作为Mysql的使用者,我们就必须清楚数据库区别于表格的地方,至少要对它有一点了解。

        1、首先,数据库的数据量是没有上限的,但是Excel表格却有。下面一组数据可以说明这个问题:

  •  在2003年之前,一个Excel表格最大行数为65536行
  •  在2007年之后,一个Excel表格的最大行数为1048576行

随着互联网越来越深入到人们生活的方方面面,市场的需求日益扩大,在大部分中大型公司甚至小公司的运营中,他们的业务数据量是千万甚至亿级的,如此庞大的数据信息,用Excel是不合适的,也是不现实的;虽然数据库单库行数过多时,存在性能上的问题,但是我们可以用过分库,分表,分布式,合理的索引等技术手段,来实现数据库的三高(高并发、高性能、高可用)。

        2、数据库具有完备的结构化查询语言,即sql语言,虽然Excel也有查询语言,但是性能却远远无法与sql相比。

3、数据库的服务化:数据库是面向软件的,这要区别于Excel,Excel是文件级别的,面向的始终是终端用户,而数据库只提供软件接口。

        4、支持事务:我们来看看事务的定义:事务是指是程序中一系列严密的逻辑操作,而且所有操作必须全部成功完成,否则在每个操作中所作的所有更改都会被撤消。可以通俗理解为:就是把多件事情当做一件事情来处理,好比大家同在一条船上,要活一起活,要完一起完 。事务是十分重要的,就好比如转账过程:小明和小王账户余额各为1000元,此时小明向小王转账500元,小王的账户应当加500,而小明的账户应当减500,这样子才算完成了转账,事务通过了,大家相安无事,如果中间出了什么问题,小明账户扣了500,但是小王的却没有加,那么就回滚到出现问题之前,两人账户都为1000元,这就是事务的作用,试想没有事务,那么会多出来多少纠纷呢?

        5、支持分布式,分布式是数据库的巨大潜力所在,数据库可以通过主备复制、高可用、分布式等形态,极大地提高性能。

二、软件的典型架构

        分析数据库的典型架构之前,我们先了解一下常见的软件设计架构:

  • 分层架构:这是最广泛也是最常见的架构,通过层(Layer)来隔离不同的关注点(Concern Point),以此应对不同需求的变化,使得这种变化可以独立进行;此外,分层架构模式还是隔离业务复杂度与技术复杂度的利器,常见的三层架构:表现层--->业务层---->数据持久层(与数据库交互),平时我们开发Web应用就会经常用到分层的设计。
  • 事件驱动架构:事件驱动架构模式是一种主流的异步分发事件架构模式,常用于设计高度可拓展的应用。事件驱动架构模式由高度解耦、单一目的的事件处理组件构成,这些组件负责异步接收和处理事件。如下图:

        通俗的讲:一个事件(Event)进入到事件通道(消息中间件)中,然后消息中间件再根据该事件的属性等特征,将其路由到事件进程中进行处理,然后响应结果给消息中间件,然后根据需要进行二次处理。

  • 管道——过滤器架构:相当于一个事件、数据输入进入一个管道进行filter,多次的过滤处理,达到我们想要的结果,进行输出。如下图:

  •  微核架构:主要依靠插件来实现功能,自己的内核是比较小型的,如IDEA,VScode。如图:

三、Mysql软件架构

        如图:  

        *其中InnoDB、MyISAM、Archive为存储引擎。 

       1、 分析架构:

  • 对于上图的MySQL架构,我们可以看成五层,分别为客户端——>连接器——>server层(缓存、分析器、优化器及执行器)——>存储引擎——>文件系统,这是典型的分层架构;
  • 横看成岭侧成峰,远近高低各不同,我们可以从sql的执行着手分析,这便是一个管道过滤器架构,客户端到连接器再到后面的分析器、优化器、执行器,最后通过存储引擎再到客户端,层层分析优化到执行落盘。
  • 如果我们把连接器到执行器这一部分看做是MySQL的内核,将三种存储引擎当做插件,那么这便是一个微内核架构,存储引擎越多,功能越加强大,即使MySQL没有这些存储引擎,他也是能工作的,有了他们是锦上添花,更加强大丰富。

        2、对此总结:大型的软件并不是单一的架构,如MySQL可以看到分层、管道过滤器(责任链)、微内核等架构的集合。

 四、MySQL四种常见的存储引擎

        1、InnoDB:作为MySQL5.5.5版本之后默认的存储引擎,红的发紫,支持事务、外键、崩溃修复、并发控制等,也为MySQL在市场上的地位的保持提供了强有力的支持。

        2、MyISAM:MySQL5.5.5版本之前默认的存储引擎,插入、查询数据的速度快,性能好,也为它在数据的存储上采用了B+树结构,且不支持事务(功能越少,事情越少,当然也就比较快),而且该引擎的空间利用率较高。

        3、Memory:单词memory内存的意思,顾名思义,该引擎所有的数据都存在内存中,速度很快(不论是查询还是插入),但是数据安全性低,因为都在内存中,一旦设备断电损坏等,容易造成数据的丢失,从而造成不可估量的损失,所以在使用存储引擎时要评估风险,因业务性质制宜。

        4、Archive:数据压缩放进磁盘,空间利用率高,但不支持索引,这也导致了它插入数据快,取出数据慢,查询性能差。一般我们用它存放一些日志信息等不经常查询的数据。

五、客户端是如何连接MySQL数据库的

        1、常见的连接方式有很多种,这里举例四种:

  • TCP/IP连接:MySQL在任何平台都提供的连接方式。
  • 命名管道:Windows系统特有的连接方式,需要在同一台服务器才能进行通讯,开启方式为:--enable-named-pipe。
  • 共享内存:开启方式:                                      

             服务端:--shared-memory

             客户端:--protocol=memory

  • UNIX域套接字:开启方式:                                    

             客户端:-S=/tem/mysql.sock

             服务端:--socket=/tem/mysql.sock

        2、MySQL的TCP讯通协议基本过程:

         *过程分析:

  • 认证连接:服务端向客户端发送握手初始化包——>客户端向服务端发送验证——>服务端向客户端发送认证结果消息。这个过程为什么是服务端先发送数据包呢?就好比如我们去饭店吃饭,服务员会先开口欢迎并询问吃什么,几个人一样,再由我们顾客来回答。
  • 命令执行:客户端向服务端发送命令包(Command Packet)——>服务端向客户端发送回应包。
  • 断开连接:客户端向服务器发送退出命令包

        3、MySQL TCP报文格式:

  •  消息头(header):三字节报文长度,一字节为序列号。
  • 消息体(body):一字节为指令其余为参数,即数据,例如切换数据库的指令为0X02、查询命令指令为0X03。
  • 推荐抓包工具:wireshark网络分析器。

六、一条sql是如何执行的(步骤及其功能作用)?

  1.   连接器:监听客户端请求,然后将请求指令转发给缓存(查询缓存)
  2. 查询缓存:缓存是指之前执行过的语句以K-V键值对的形式存在内存中;数据表被删除后,会删除所有相关的缓存;所有在MySQL8.0之后,缓存功能由于性能的浪费被删除了。
  3. 分析器:先做词法分析,分析该语句关键字(如SELECT、DELETE、JOIN、UPDATE等),再做句法分析,判断sql是否符合语法。
  4. 优化器:主要工作为决定如何使用索引。
  5. 执行器:主要工作为校验权限,以行作为粒度调用存储引擎;校验权限是校验此用户对目标数据是否有访问操作的权限;在没有索引时,执行器会循环查询所有行(索引对于性能的提高很重要)
  6. 存储引擎(这里以InnoDB为例):将指令落实在数据文件上。

完毕!谢谢耐心观看。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小蔡学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值