• 进入"运维那点事"后,希望您第一件事就是阅读“关于”栏目,仔细阅读“关于Ctrl+c问题”,不希望误会!

MySQL特性及架构

MySQL 彭东稳 7年前 (2016-12-29) 26849次浏览 已收录 0个评论

一、MySQL数据库特性

1. 内部构件和可移植性

使用C和C++编写,保证了源代码的可移植性。

支持多种平台。

提供众多编程语言的API接口。

采用核心线程和完全多线程(使用多CPU)。

提供事务性和非事务性存储引擎。

使用极快的”B树”磁盘表和索引压缩。

极快的基于线程的内存分配系统。

提供TCP/IP、ODBC和JDBC等多种数据库连接途径。

存储器中的哈希表用作临时表。

SQL函数使用高度优化的类库实现。

支持插件式存储引擎。

2. 众多列类型

FLOAT,DOUBLE,CHAR,VARCHAR,TEXT,BLOB,DATE,TIME,DATETIME,TIMESTAMP,YEAR,SET,ENUM,以及OpenGIS空间类型

3. 语句和函数

按照标准SQL支持表别名和列别名,提供完整的操作符和函数支持。

4. 安全

十分灵活和安全的权限和密码系统,允许基于主机的验证。连接到服务器时,所有的密码传输均采用加密形式,从而保证了密码安全

5. 可伸缩和限制

处理大型数据库: 我们使用了MySQL服务器和含5千万条记录的数据库。我们还听说,有些用户将MySQL用于含60000个表和约50亿行的数据库。

每个表可支持高达64条索引;每条索引可由1~16个列或列元素组成。最大索引宽度为1000字节索引可使用具备CHAR、VARCHAR、BLOB或TEXT列类型的列前缀。

6. 本地化

支持众多字符集并提供unicode支持

7. 提供丰富的客户端工具

等等…

二、MySQL体系结构

MySQL是一种关系数据库产品。关系数据库,顾名思义,是建立在关系模型基础上的数据库。现实世界中,实体与实体之间的各种联系一般都可以用关系模型来表示。经过数十年的发展,关系数据库在理论和工业实践中都已经很成熟了。

对于MySQL,可以理解为如下的3个层次。

  • 应用层

负责和客户端、用户进行交互,需要和不同的客户端和中间服务器进行交互,建立连接,记住连接的状态,响应它们的请求,返回数据和控制信息(错误信息、状态码等)。

  • 逻辑层

负责具体的查询处理、事务管理、存储管理、恢复管理,以及其他的附加功能。查询处理器负责查询的解析、执行。当接收到客户端的查询时,数据库就会分配一个线程来处理它。先由查询处理器(优化器)生成执行计划,然后交库就会分配一个线程来处理它。先由查询处理器(优化器)生成执行计划,然后交由计划执行器来执行,执行器有时需要访问更底层的事务管理器、存储管理器来操作数据,事务管理器、存储管理器主要负责事务管理、并发控制、存储管理。这其中,将由事务管理器来确保“ACID”特性,通过锁管理器来控制并发,由日志管理器来确保数据持久化,存储管理器一般还包括一个缓冲管理器,由它来确定磁盘和内存缓冲之间的数据传输。

  • 物理层

实际物理磁盘(存储)上的数据库文件,比如,数据文件、日志文件等。

下图是MySQL官方文档的一个基础架构图,其中Connectors可以理解为各种客户端、应用服务;Connection Pool可以理解为应用层,负责连接、验证等功能;Management Services&Utilities、SQL Interface、Parser、Optimizer、Caches&Buffers、Pluggable Storage Engines可以理解为数据库的大脑——逻辑层;最下方的Files&Logs可以理解为物理层。

MySQL特性及架构

阐述一下各个组件:

connectors

用户通过本地或网络使用C、PHP等多种语言开发的接口连接MySQL数据库服务器进行交互。

connection pool

客户端认证、线程重用、连接数限制、内存检查、缓存。

management services & utilities

系统管理和控制工具,如备份与恢复、复制、集群、分区管理、数据模板管理等。

SQL interface

接受用户sql命令并且返回用户需要查询的结构;关系型数据库的基本抽象。

Parser

SQL命令传递到解析器的时候会被解析器验证和解析;其主要功能有将sql语句分解成数据结构、并将这个结构传递到后续步骤;如果在分解构成中遇到错误那么就说明这个sql语句是不合理的,语句将不会继续执行下去。

optimizer

SQL语句在查询之前会使用查询优化器对查询进行优化(产生多种执行计划,最终数据库会选择最优化的方案去执行,尽快返会结果) 他使用的是“选取-投影-联接”策略进行查询。

cache & buffer

如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等;buffer是缓冲、cache是缓存。

缓存在第一次查询后,MySQL便将查询语句以及查询结果进行hash处理并保留在缓存中,SQL查询到达之后,对其进行同样的hash处理后,将两个hash值进行对照,如果一样,则命中,从缓存中返回查询结果;否则,需要整个流程走一遍

engine

存储引擎是MySQL中具体的与文件打交道的子系统,也是MySQL最具有特色的一个地方。MySQL的存储引擎是插件式的。它根据MySQL AB公司提供的文件访问层的一个抽象接口来定制一种文件访问机制(这种访问机制就叫存储引擎)。存储引擎是基于表的而不是数据库的。

常见存储引擎有:Myisam、innobd、xtradb、memory、merge、csv等,后面会详细介绍。

MySQL工作机制流程图:

MySQL特性及架构

三、MySQL数据库与实例

在数据库领域中,数据库与实例这两个词很容易混淆,下面说说这两个词的定义:

  • 数据库

这概念上来说,数据库是物理操作系统文件或其他形式文件类型的集合,在MySQL数据库中,数据库文件可以使.frm、.MYD、.MYI、.ibd结尾的文件。当使用NDB引擎时,数据库的文件可能不是操作系统上的了,而是在内存中,但是定义仍然不变。

  • 实例

MySQL由后台线程以及一个共享内存区组成。共享内存可以被运行的后台线程所共享。需要牢记的是,数据库实例才是真正用于操作数据库文件的。数据库实例是程序,是真正的数据库管理软件。

一般这两个词也可以互换使用,不过两者的概念完全不同。在MySQL数据库中,实例与数据库的关系通常是一一对应的,即一个实例对应一个数据库,一个数据库对应一个实例。但是也可以存在一个数据库多个实例的情况,但使用的套接字不能相同即可。

MySQL被设计为一个单进程多线程的数据库架构,同Oracle数据库和SQL Server等大型数据库系统类似(与Oracle有一些区别),这样就是说,MySQL数据库实例在系统上的表现就是一个进程。

PS:MySQL数据库是开放源代码的关系型数据库。目前,它可以提供的功能有:支持sql语言、子查询、存储过程、触发器、视图、索引、事务、锁、外键约束和影像复制等。在后期,会详细讲解这些功能。


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (6)
[资助本站您就扫码 谢谢]
分享 (0)

您必须 登录 才能发表评论!