1. <output id="hzk7v"><pre id="hzk7v"><address id="hzk7v"></address></pre></output>
      <output id="hzk7v"></output>
    2. <nav id="hzk7v"><i id="hzk7v"><em id="hzk7v"></em></i></nav>
    3. <listing id="hzk7v"><delect id="hzk7v"><em id="hzk7v"></em></delect></listing>

      MySQL高级学习笔记£¨三£©£ºMysql逻辑架构介绍¡¢mysql存储引擎详解

       更新时间£º2019年04月12日 11:12:33   作者£ºLeesin Dong   我要评论

      这篇文章主要介绍了Mysql逻辑架构介绍¡¢mysql存储引擎£¬文中通过示例代码介绍的非常详细£¬对大家的学习或者工作具有一定的参考学习价值£¬需要的朋友们下面随着小编来一起学习学习吧

      Mysql逻辑架构介绍总体概览

      和其它数据库相比£¬MySQL有点与众不同£¬它的架构可以在多种不同场景中应用并发挥良好作用¡£主要体现在存储引擎的架构上£¬插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离 ¡£ 这种架构可以根据业务的需求和?#23548;?#38656;要选择合适的存储引擎¡£

      controller层£º
      Connectors£º连?#30828;㣬c ¡¢java等连接mysql

      业务逻辑处理成£º
      Connection Pool£º连?#30828;?c3p0连接池等
      Manager Service util£º备份¡¢容灾恢?#30784;?#38598;群等
      sql interface£º存储过程¡¢视图触发器
      parser£º查询事物¡¢对象的权限
      如果是select开头的就认为是读的操作£¬insert开头的就是写的操作£¬
      sql语句的加载从from开始£¬转换成mysql能够读懂的形式
      optimizer£ºmysql优化器 £¬经过前面的转换£¬这里mysql会优化成mysql自己认为最优的方式
      £¬并不是我们人为的优化
      caches & buffers£º缓冲

      可拔插式的存储引擎
      plugin storage engine
      大部分用的是myism和innodb

      文件存储层 计算机硬件
      file system
      file & logs

      1.连?#30828;?/strong>

      最上层是一些客户端和连接服务£¬包含本地sock通信和大多数基于客户端/服务端工具实现的类似于tcp/ip的通信¡£主要完成一些类似于连接处理¡¢授权?#29616;¤¡?#21450;相关的安全方案¡£在该层上引入了线程池的概念£¬为通过?#29616;?#23433;全接入的客户端提供线程¡£同样在该层上可以实现基于SSL的安全链接¡£服务器?#19981;?#20026;安全接入的每个客户端验证它所具有的操作权限¡£

      2.服务层

      2.1 Management Serveices & Utilities £º 系统管理和控制工具

      2.2 SQL Interface : SQL接口
      接受用户的SQL命令£¬并且返回用户需要查询的结果¡£比如select from就是调用SQL Interface

      2.3 Parser : 解析器
      SQL命令传递到解析器的时候会被解析器验证和解析¡£

      2.4 Optimizer : 查询优化器¡£
      SQL语句在查询之前会使用查询优化器对查询进行优化¡£
      用一个例子就可以理解£º select uid,name from user where gender= 1;
      优化器来决定先投影还是先过滤¡£

      2.5 Cache和Buffer£º 查询缓存¡£
      如果查询缓存有命中的查询结果£¬查询语句就可以直接去查询缓存中取数据¡£
      这个缓存机制是由一系列小缓存组成的¡£比如表缓存£¬记录缓存£¬key缓存£¬权限缓存等
      缓存是负责读£¬缓冲负责?#30784;?/p>

      3.引擎层

      存储引擎层£¬存储引擎真正的负责了MySQL中数据的 存储和提取 £¬服务器通过API与存储引擎进行通信¡£不同的存储引擎具有的功能不同£¬这样我们可以根据自己的?#23548;?#38656;要进行选取¡£后面介绍MyISAM和InnoDB

      4.存储层

      数据存储层£¬主要是将数据存储在运行于裸设备的文件系统之上£¬并完成与存储引擎的交互¡£

      总体概览

      查询流程图£º

      首先£¬mysql的查询流程大致是£º
      •mysql客户端通过协议与mysql服务器建连接£¬发送查询语句£¬先检查查询缓存£¬如果命中(一模一样的sql才能命中)£¬直接返回结果£¬否则进行语句解析,也就是说£¬在解析查询之前£¬服务器会先访问查询缓存(query cache)¡ª¡ª它存储SELECT语句以及相应的查询结果集¡£如果某个查询结果已经位于缓存中£¬服务器就不会再对查询进行解析¡¢优化¡¢以及执?#23567;?#23427;仅仅将缓存中的结果返回给用户即可£¬这将大大提高系统的性能¡£

      语法解析器和预处理£º首先mysql通过关键字将SQL语句进行解析£¬并生成一颗对应的¡°解析树¡±¡£mysql解析器将使用mysql语法规则验证和解析查询£»预处理器则根据一些mysql规则进一步检查解析数是否合法¡£
      查询优化器当解析树被认为是合法的了£¬并且由优化器将其转化成执行计划¡£一条查询可以有很多种执行方式£¬最后都返回相同的结果¡£优化器的作用就是?#19994;?#36825;其中最好的执行计划¡£¡£
      ?#32531;ó£¬mysql默认使用的BTREE索引£¬并且一个大致方向是:无论怎么折腾sql£¬至少在目前来说£¬mysql最多只用到表中的一个索引¡£

      mysql存储引擎

      查看命令

      1 如何用命令查看

      看你的 mysql 现在已提供什么存储引擎 :

      mysql> show engines;


      InnoDB 默认的£¬支持事物支持外键£¬且是行锁

      看你的 mysql 当前默认的存储引擎 :

      mysql> show variables like ¡®%storage_engine%';


      默认的是InnoDB
      当前的也是InnoDB

      各个引擎简介

      1¡¢InnoDB存储引擎

      InnoDB是MySQL的默认 事务型引擎 £¬它被设计用来处理大量的短期(short-lived)事务¡£除非有非常特别的原因需要使用其他的存储引擎£¬否则应该优先考虑InnoDB引擎¡£ 行级锁£¬适合高并发情况

      2¡¢MyISAM存储引擎

      MyISAM提供了大量的特性£¬包括全文索引¡¢压缩¡¢空间函数(GIS)等£¬但MyISAM 不支持事务和行级锁(myisam改表时会将整个表全锁住) £¬有一个毫无疑问的缺陷就是?#35272;?#21518;无法安全恢?#30784;?/p>

      3¡¢Archive引擎

      Archive存储引擎 ?#24674;?#25345;INSERT和SELECT 操作£¬在MySQL5.1之?#23433;恢?#25345;索引¡£
      Archive表适合日志和数据采集类应用¡£ 适?#31995;头?#38382;量大数据等情况¡£
      根据英文的测试结论来看£¬Archive表比MyISAM表要小大约75%£¬比支持事务处理的InnoDB表小大约83%¡£

      4¡¢Blackhole引擎

      Blackhole引擎没有实现任何存储机制£¬它会丢弃所有插入的数据£¬不做任何保存¡£但服务器会记录Blackhole表的日志£¬所以可以用于复制数据到备库£¬或者简单地记录到日志¡£但这种应用方式会碰到很多问题£¬因此并不推荐¡£

      5¡¢CSV引擎

      CSV引擎可以将普通的CSV文件作为MySQL的表来处理£¬但不支持索引¡£
      CSV引擎可以作为一种数据交换的机制£¬非常有用¡£
      CSV存储的数据直接可以在操作系统里£¬用文本编辑器£¬或者excel读取¡£

      6¡¢Memory引擎

      如果需要快速地访问数据£¬并且这些数据不会被修?#27169;?#37325;启以后丢失也没有关系£¬那?#35789;?#29992;Memory表是非常有用¡£Memory表至少比MyISAM表要快一个数量级¡£(使用专业的内存数据库更快£¬如redis)

      7¡¢Federated引擎

      Federated引擎是访问其他MySQL服务器的一个代理£¬尽管该引擎看起来提供了一种很好的跨服务器的灵活性£¬但也经常带来问题£¬因此默认是禁用的¡£

      MyISAM和InnoDB£¨重点£©

      对比项 MyISAM InnoDB
      主外键 不支持 支持
      事务 不支持 支持
      行表锁 表锁£¬?#35789;?#25805;作一条记?#23478;不?#38145;住整个表£¬不适合高并发的操作 行锁,操作时只锁某一行£¬不对其它行有影响£¬ 适合高并发
      缓存 ?#25442;?#23384;索引£¬不缓存真实数据 不仅缓存索引还要缓存真实数据£¬对内存要求较高£¬而且内存大小对性能有决定性的影响
      表空间
      关注点 性能 事务
      默?#20064;?#35013; Y Y
      默?#20064;?#35013; Y Y
      默?#20064;?#35013; Y Y
      用户表默认使用 N Y
      ?#28304;?#31995;统表使用 Y N

      innodb 索引 使用 B+TREE myisam 索引使用 b-tree
      innodb 主键为聚簇索引£¬基于聚簇索引的增删改查效率非常高¡£

      阿里巴巴¡¢淘宝用哪个


      • Percona 为 MySQL 数据库服务器进行了改进£¬在功能和性能上较 MySQL 有着很?#28798;?#30340;提升¡£该版本提升了在高负载情况下的 InnoDB 的性能¡¢为 DBA 提供一些非常有用的性能诊断工具£»另外有更多的参数和命令来控制服务器行为¡£

      •该公司新建了一款存储引擎叫 xtradb 完全可以替代 innodb, 并且在性能和并发上做得更好,

      •阿里巴巴大部分 mysql 数据库其实使用的 percona 的原?#22270;?#20197;修改¡£
      •AliSql+AliRedis

      以上所述是小编给大家介绍的Mysql逻辑架构介绍¡¢mysql存储引擎详解整合£¬希望对大家有所帮助£¬如果大家有任?#25105;?#38382;请给我留言£¬小编会及时回复大家的¡£在此也非常?#34892;?#22823;家对脚本之家网站的支持£¡

      相关文章

      • 详解MySQL中的NULL值

        详解MySQL中的NULL值

        这篇文章主要介绍了MySQL中的NULL值的相关知识,是MySQL入门学习中的基础知识,需要的朋友可以参考下
        2015-05-05
      • 详解MySql存储过程参数的入门使用

        详解MySql存储过程参数的入门使用

        这篇文章主要介绍了MySql存储过程参数的入门使用£¬文中通过示例代码介绍的非常详细£¬对大家的学习或者工作具有一定的参考学习价值£¬需要的朋友们下面随着小编来一起学习学习吧
        2019-04-04
      • 深入讲解MySQL Innodb索引的原理

        深入讲解MySQL Innodb索引的原理

        这篇文章主要给大家介绍了关于MySQL Innodb索引原理的相关资?#24076;?#25991;中通过示例代码介绍的非常详细£¬对大家学习或者使用mysql具有一定的参考学习价值£¬需要的朋友们下面随着小编来一起学习学习吧
        2018-11-11
      • MySQL使用中遇到的问题记录

        MySQL使用中遇到的问题记录

        本文给大家汇总介绍了作者在mysql的使用过程中遇到的问题以及最终的解决方案£¬非常的实用£¬有需要的小伙伴可以参考下
        2017-11-11
      • Win10下mysql 8.0.15 安装配置方法图文教程

        Win10下mysql 8.0.15 安装配置方法图文教程

        这篇文章主要为大家详细介绍了Win10下mysql 8.0.15 安装配置方法图文教程£¬具有一定的参考价值£¬?#34892;?#36259;的小伙伴们可以参?#23478;?#19979;
        2019-02-02
      • mysql datetime查询异常问题解决

        mysql datetime查询异常问题解决

        这篇文章主要介绍了mysql datetime查询异常问题解决的相关资料,这里对异常进行了详细的介绍和该如何解决£¬需要的朋友可以参考下
        2016-11-11
      • MySQL子查询的几种常见形式介绍

        MySQL子查询的几种常见形式介绍

        mysql从4.1版开始支持子查询功能£¬在此版本前£¬可以用join写连表查询来进行替代£¬但不推荐这么写£¬相当的麻烦
        2014-04-04
      • MySQL存储引擎中的MyISAM和InnoDB区别详解

        MySQL存储引擎中的MyISAM和InnoDB区别详解

        这篇文章主要介绍了MySQL存储引擎中的MyISAM和InnoDB区别详解,本文总结了MyISAM与InnoDB的11点区别,需要的朋友可以参考下
        2015-03-03
      • 使用mss2sql工具将SqlServer转换为Mysql全记录

        使用mss2sql工具将SqlServer转换为Mysql全记录

        上篇文章我们?#33756;?#20102;在mssql数据转换成mysql数据中£¬用Navicat Premium导入数据很完?#28291;?#20294;是创建表的时候数据类型转换不是很完?#28291;?#26412;文我们来?#33756;?#19979;用mss2sql工具来创建表£¬顺便说下导入数据
        2014-08-08
      • CentOS 7.4 64位安装配置MySQL8.0的详细步骤

        CentOS 7.4 64位安装配置MySQL8.0的详细步骤

        本文分步骤给大家介绍了CentOS 7.4 64位安装配置MySQL8.0 的方法£¬非常不错£¬具有一定的参考借鉴价值,需要的朋友可以参考下
        2018-10-10

      最新评论

      3dÊÔ»úºÅÖвÊÍø

        1. <output id="hzk7v"><pre id="hzk7v"><address id="hzk7v"></address></pre></output>
          <output id="hzk7v"></output>
        2. <nav id="hzk7v"><i id="hzk7v"><em id="hzk7v"></em></i></nav>
        3. <listing id="hzk7v"><delect id="hzk7v"><em id="hzk7v"></em></delect></listing>

            1. <output id="hzk7v"><pre id="hzk7v"><address id="hzk7v"></address></pre></output>
              <output id="hzk7v"></output>
            2. <nav id="hzk7v"><i id="hzk7v"><em id="hzk7v"></em></i></nav>
            3. <listing id="hzk7v"><delect id="hzk7v"><em id="hzk7v"></em></delect></listing>