在应用Impala这种所谓大年夜数据引擎的时刻,总会感到有些处所设计的不是那么精细绝伦,比如说缓存,Impala的萌芽结不雅是没有经由缓存的,也就是说每次都相当于须要从新对文件履行一遍萌芽。

MySQL根本架构如下图,是MySQL的逻辑架构图:

将SQL语句分化成数据构造,并将这个构造传递到后续步调,今后SQL语句的传递和处理就是基于这个构造的

下面挑几个模块解释一下:

1.解析器

SQL敕令传递到解析器的时刻会被解析器验证和解析。解析器是由Lex和YACC实现的,是一个很长的脚本。

重要功能:

SQL语句在萌芽之前会应用萌芽优化器对萌芽进行优化。他应用的是“拔取-投影-联接”策略进行萌芽。

用一个例子就可以懂得:select uid,name from user where gender = 1;

这个select 萌芽先根据where 语句进行拔取,而不是先将表全部萌芽出来今后再进行gender过滤

这个select萌芽先根据uid和name进行属性投影,而不是将属性全部掏出今后再进行过滤

将这两个萌芽前提联接起来生成最终萌芽结不雅。

3.缓存

如不雅萌芽缓存有射中的萌芽结不雅,萌芽语句就可以直接去萌芽缓存中取数据。

最上层的办事并不是MySQL所独有的,大年夜多半基于收集的客户端/办事器的对象或者办事都有类似的架构,比如连接处理、授权认证、安然等等。

第二层架构是MySQL比较有意思的部分大年夜多半MySQL的核心办事功能都在这一层。包含萌芽解析、分析、优化、缓存以及所有的内置函数,所有跨存储引擎的功能都在这一层实现:存储过程、触发器、视图等。

第三层包含了存储引擎。存储引擎负责MySQL中数据的存储和提取。和GNU/Linux下的各类文件系同一样,每个存储引擎都有它的优势和劣势。办事器经由过程API与存储引擎进行通信。这些接口樊篱了不合存储引擎之间的差别。

这个缓存机制是由一系列小缓存构成的。比如表缓存,记录缓存,key缓存,权限缓存等。

2.优化器

弥补常识

1.萌芽优化和履行(Optimization and Execution)

MySQL将用户的萌芽语句进行解析,并创建一个内部的数据构造——分析树,然落后行各类优化,例如重写萌芽、选择攫取表的次序,以及应用哪个索引等。

萌芽优化器不关怀一个表所应用的存储引擎,然则存储引擎会影响办事器若何优化萌芽。优化器经由过程存储引擎获取一些参数、某个操作的履行价值、以及统计信息等。在解析萌芽之前,办事器会先拜访萌芽缓存(query cache)——它存储SELECT语句以及响应的萌芽结不雅集。如不雅某个萌芽结不雅已经位于缓存中,办事器就不会再对萌芽进行解析、优化、以及履行。它仅仅精华存中的结不雅返回给用户即可,这将大年夜大年夜进步体系的机能。

2.并发控制(锁粒度)

MySQL供给两个级其余并发控制:办事器级(the server level)和存储引擎级(the storage engine level)。加锁是实现并发控制的根本办法,MySQL中锁的粒度:

表级锁:MySQL自力于存储引擎供给表锁,例如,对于ALTER TABLE语句,办事器供给表锁(table-level lock)。

行级锁:InnoDB和Falcon存储引擎供给行级锁,此外,BDB支撑页级锁。InnoDB的并发控制机制,下节具体评论辩论。

别的,值得一提的是,MySQL的一些存储引擎(如InnoDB、BDB)除了应用封锁机制外,还同时结合MVCC机制,即多版本两阶段封锁协定(Multiversion two-phrase locking protocal),来实现事务的并发控制,大年夜而使得只读事务不消等待锁,进步了事务的并发性。

留意: 行级锁只在存储引擎层实现,而MySQL办事器层没有实现。办事器层完全不懂得存储引种的锁实现。

3.事务

MySQL中,InnoDB和BDB都支撑事务处理。这里重要评论辩论InnoDB的事务处理。

如不雅在分化构成中碰到缺点,那么就解释这个sql语句是不合理的

事务的ACID特点:事务是由一组SQL语句构成的逻辑处理单位,事务具有以下4个属性,平日简称为事务的ACID属性。

原子性(Atomicity):事务是一个原子操作单位,其对数据的修改,要么全都履行,要么全都不履行。

一致性(Consistent):在事务开端和完成时,数据都必须保持一致状况。这意味着所有相干的数据规矩都必须应用于事务的修改,以保持数据的完全性;事务停止时,所有的内部数据构造(如B树索引或双向链表)也都必须是精确的。

隔离性(Isolation):数据库体系供给必定的隔离机制,包管事务在不受外部并发操作影响的“自力”情况履行。这意味着事务处理过程中的中心状况对外部是弗成见的,反之亦然。

持久性(Durable):事务完成之后,它对于数据的修改是永远性的,即使出现体系故障也可以或许保持。

事务处理带来的相干问题:因为事务的并发履行,带来以下一些有名的问题:

更新损掉(Lost Update):当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,因为每个事务都不知道其他事务的存在,就会产生损掉更新问题--最后的更新覆盖了由其他事务所做的更新。

脏读(Dirty Reads):一个事务正在对一笔记录做修改,在这个事务完成并提交前,这笔记录的数据就处于不一致状况;这时,另一个事务也来攫取同一笔记录,如不雅不加控制,第二个事务攫取了这些“脏”数据,并据此做进一步的处理,就会产生未提交的数据依附关系。这种现象被形象地叫做”脏读”。

弗成反复读(Non-Repeatable Reads):一个事务在攫取某些数据后的某个时光,再次攫取以前读过的数据,却发明其读出的数据已经产生了改变、或某些记录已经被删除了!这种现象就叫做“弗成反复读”。

推荐阅读

摘要: 本文以浅近易懂的说话介绍了机械进修和深度进修的定义及应用,以及在源数据请求,硬件支撑,特点工程、问题解决方法、履行时光及可解释性等方面的差别,对于新手入门有很大年夜启发>>>详细阅读

地址:http://www.17bianji.com/lsqh/35162.html

mysql设计架构_MySQL设计架构相关推荐

  1. mysql case默认_MySQL数据库架构和同步复制流程

    在分布式系统里面,往往制约整个系统发展的瓶颈点就是数据库,所以数据库的架构和高可用以及数据库的切分都是我们值得花大力气去学习的. 首先我们来说说数据库的架构. 1.mysql主从架构,如图: 这种架构 ...

  2. mysql的set架构_MYSQL 整体架构浅析

    对于一个服务端开发来说 MYSQL 可能是他使用最熟悉的数据库工具,然而熟练掌握 MYSQL 语句的拼写和卓越的多条件查询不代表出现性能问题的时候你知道该怎么解决.致力于不当 SQL boby,我们从 ...

  3. mysql三范式_MySQL设计之三范式的理解

    转自:https://blog.csdn.net/wangqyoho/article/details/52900585 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要 ...

  4. mysql知识点概览_MySQL 基本架构概览

    下图是 MySQL 的一个简要架构图,从下图可以清晰的看到 SQL 语句在 MySQL 内部是如何执行的. 先简单介绍下图涉及的一些组件的基本作用,后面还会详细介绍到这些组件的作用. 连接器: 身份认 ...

  5. mysql主从技术_MySQL主从架构的实现

    目录 一主一从 1.1 环境准备: 1.2 准备步骤: 1.3 实现步骤: 1.3.1 配置master主服务器 1.3.2 创建复制帐号 1.3.3 查看主服务器状态 1.3.4 配置slave从服 ...

  6. mysql 数据结构设计_MYSQL 设计数据结构需注意问题

    在设计数据结构时需要注意: 1.永远为表设定一个自增主键ID,并尽可能的利用此ID进行构造 (在配置表中)尽可能的用上unsigned,并尽可能的小.能用tinyint(1字节).smallint(2 ...

  7. mysql性能视频教程_MySQL性能管理及架构设计视频教程

    最新MySQL性能管理及架构设计视频教程 课程介绍: 数据库优化是系统工程,性能的提升靠整体.本课程将面面俱到的讲解提升数据库性能的各种因素,让你在最短的时间从小白到资深,将数据库整体架构了然于胸 . ...

  8. 转】MYSQL性能调优与架构设计之select count(*)的思考

    原博文出自于: http://blog.fens.me/category/%E6%95%B0%E6%8D%AE%E5%BA%93/page/5/ 感谢! Posted: Feb 7, 2013 Tag ...

  9. MySQL性能调优与架构设计——第4章 MySQL安全管理

    第4章 MySQL安全管理 前言 对于任何一个企业来说,其数据库系统中所保存数据的安全性无疑是非常重要的,尤其是公司的有些商业数据,可能数据就是公司的根本,失去了数据的安全性,可能就是失去了公司的一切 ...

最新文章

  1. xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found b‘b\x14#e\xbc\
  2. Python3-Cookbook总结 - 第一章:数据结构和算法
  3. iOS:使用集成的支付宝SDK的支付流程
  4. 再谈 Devstack(Rocky)
  5. 用阿里云镜像解决Maven速度慢问题
  6. memcache-session-manager(flexjson)
  7. Libra 新编程语言 :Move 所有权模型灵感竟是来自它……
  8. oracle java 映射_java程序访问映射后的oracle
  9. 基本共射放大电路概念详解
  10. linux跨平台通信软件,下载:跨平台即时通信工具Pidgin 2.7.5
  11. google 企业邮箱 smtp pop3设置
  12. 【JavaSE】多线程基础
  13. 帕卡贝尔的D大调卡农之由来
  14. Node.js基础2 fs方法和path方法的使用
  15. 数学建模——规划问题
  16. 教你一招:使用最快速的方式激活windows10专业版
  17. 如何让应用支持64位 Android,Sailfish OS 4.1终于拥抱64位 Android10应用支持API等级
  18. Co-saliency 经典算法文献汇总
  19. 同花顺公式转python_请把通达信公式转换成同花顺公式,谢谢
  20. 梁宁《产品思维》之7自我观察

热门文章

  1. 基于ie内核,浏览器自带flash插件
  2. 当你的开源软件被他人申请专利
  3. 萤石网络递交上会稿:年营收42亿 海康威视持股60%
  4. linux qt 导入gl库,Ubuntu下QtOpenGL无法正常使用GLU库的解决方法
  5. 开源sso单点登陆系统推荐
  6. 小米与美的的“初吻”是为了什么
  7. linux版本的RAR压缩软件
  8. IT人人际交往篇—战胜害羞的心态
  9. 蓝绿部署、滚动部署、灰度发布(金丝雀发布)
  10. 打印formdata的值