mysql设计架构_MySQL设计架构

在应用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.缓存

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

e93618c0be71b81fdc72cbe54ff2ab00.png-wh_651x-s_410522212.png最上层的办事并不是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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值