MySQL逻辑架构简介

2020-04-25 11:46 来源:未知

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

Blackhole引擎没有存储机制,不做保存处理,但是服务器还是会记录Blackhole表的日志,所以可以用于复制数据到备库,或者用于记录日志

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

数据库引进锁机制是为了控制并发,举个例子,电商抢购案例,加入某类商品的库存只有一件了,然后这时候有两个用户在抢这个商品,按照逻辑,一个用户购物成功,库存就应该减1的,然后事务并发没控制好,这种情况是很容易出现商品没库存了,然后还可以下单的案例,这种是不合理的,这时候可以用数据库的锁机制来做,一个用户在下单时,锁存商品库存的表,操作成功后才释放锁,另外一个用户才可以操作

2.5 Cache和Buffer: 查询缓存。如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等缓存是负责读,缓冲负责写。

CSV引擎可以将普通的CSV文件作为MySql的表处理,可以在数据库运行时拷贝文件,将Excel表另存为CSV文件,然后就可以直接复制到数据库,不过这种表是不支持索引的

对比项

Merge引擎是由多个MyISAM表合并而来的表,可以用于存储日志或者用于当数据存库

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

第一层结构主要处理客户端与mysql服务端的连接、授权认证、安全等;第二层是Mysql服务端的核心,功能包括查询解析、分析、优化、缓存等,存储过程、触发器、视图等都在这一层实现;第三层的存储引擎主要负责数据存储和提取,存储引擎不会去解析sql,不同存储引擎之间不会通讯,只会简单地响应上层服务器的请求

2、MyISAM存储引擎

篮球世界杯赌球,SQL标准中定义四种隔离级别,每种存储引擎实现的隔离级别是不同的

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

InnoDB存储引擎

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

Federated引擎是访问其它服务器的代理,会 创 建 一 个 到 远 程 MySQL 服 务 器 的 客 户 端 连 接, 并 将 查 询 传 输 到 远 程 服 务 器 执 行, 然 后 提 取 或 者 发 送 需 要 的 数 据。

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

SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

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

事务日志可以用于提高事务的效率,有了事务日志,数据存储引擎在修改表数据时就只需要修改其内存拷贝,然后再将修改的行为数据持久化到硬盘,而不用修改数据本身再持久化到硬盘。事务日志采用的是追加的方式

mysql存储引擎

每个客户端连接成功,都会在服务器进程中拥有一个线程,服务器会缓存线程,该线程只能轮流在某个CPU中运行,所以不需要创建和销毁线程

2.服务层

Blackhole存储引擎

4.存储层

大部分数据库系统的默认隔离级别都是READ COMMIT,很明显这种隔离级别只能读取到已经提交事务的数据

阿里巴巴、淘宝用哪个

然后介绍一下mysql的读锁(read lock)和写锁(write lock),读锁也可以称作共享锁(shared lock),写锁称为排他锁(exclusive lock),读锁是共享的,是允许多个用户同个时刻同时读取同个资源的,写锁是排他的,这也是出于安全策略考虑的,写锁会阻塞其它的读锁和写锁,然后操作完成后才释放锁,接着其它的锁才可以操作

1.连接层

Mysql服务器逻辑架构图,图来自《高性能MySQL》一书:

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

持久性(durability):事务一旦提交,所做的状态就会永久保存在数据库中,即使系统奔溃,修改的数据也不会丢

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

READ COMMIT(提交读)

查询流程图:

时间: 2019-08-01阅读: 204标签: 架构

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

NDB集群存储引擎

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

5.2 隔离级别

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

原文

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

Memory存储引擎

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

InnoDB存储引擎是mysql默认的存储引擎,也是使用最广泛的存储引擎,前面也说了,InnoDB是一种可以支持事务的存储引擎,InnoDB是mysql 5.1才开始出现的,之前名称是称为InnoDB plugin,直到被oracle收购mysql后,才正式命名为InnoDB。InnoDB采用MVCC来支持事务一致性和并发,并且实现了4个基本的隔离级别,默认级别是PREATABLE READ(可重复读),并且通过间隙锁(next-key loking)策略来防止欢读的出现,

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

提到事务肯定会想到事务的4个特性ACID,要保证业务的正常使用,必须保证ACID,ACID表示原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability),一个运行良好的事务系统也是要求具备这些特征

Mysql逻辑架构介绍总体概览

在READ UNCOMMITTED级别,事务即使没提交,对其它事务也是可见,允许事务读取未提交的数据,这也被称为脏读(Dirty Read),所以在实际生产中很少用

各个引擎简介

隔离性(isolation):一般来说,一个事务所做的修改在提交之前对其它事务来说都是不可见的

mysql show variables like ‘%storage_engine%';

ALTER TABLE mytable ENGINE = InnoDB;

3、Archive引擎

REPEATABLE READ(可重复读)

MyISAM和InnoDB

SQL查询,1或者ON表示启动,0或者OFF表示关闭

主外键 不支持 支持 事务 不支持 支持 行表锁 表锁,即使操作一条记录也会锁住整个表,不适合高并发的操作 行锁,操作时只锁某一行,不对其它行有影响, 适合高并发 缓存 只缓存索引,不缓存真实数据 不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响 表空间 小 大 关注点 性能 事务 默认安装 Y Y 默认安装 Y Y 默认安装 Y Y 用户表默认使用 N Y 自带系统表使用 Y N

原子性(atomicity):一个事务必须被视为一个不可分割的最小工作单位,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,不能只执行一部分操作

controller层:Connectors:连接层,c 、java等连接mysql

Federated存储引擎

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

READ UNCOMMITTED(未提交读)

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

设置隔离级别,可以通过SQL:

TAG标签:
版权声明:本文由美洲杯赌球发布于计算机教程,转载请注明出处:MySQL逻辑架构简介