MySQL:MySQL体系结构和存储引擎

asds MySQL 被设计为一个可移植的数据库,几乎在当前所有系统上都能运行,如Linux, Solaris 、FreeBSD 、Mac 和Windows 。 尽管各平台在底层(如线程)实现方面都各有不同,但是MySQL 基本上能保证在各平台上的物理体系结构的一致性。因此,用户应该能很好地理解MySQL 数据库在所有这些平台上是如何运作的。!!!

asdsadasdasdasdsadasdasdasdsadassdasdsadasdasdsadasdsadassadasdas————《MySQL技术内幕INNODB存储引擎》


定义数据库和实例

sssa数据库:物理操作系统文件或其他形式文件类型的集合。

sdsssa注:当使用NDB 引擎时,数据库的文件可能不是操作系统上的文件,而是存放于内存之中的文件,但是定义仍然不变)

sssa数据库实例: MySQL 数据库由后台线程以及一个共享内存区组成。共享内存可以被运行的后台线程所共享。

sdsssa注:与数据库的关系通常是一一对应的,但是,在集群情况下可能存在一个数据库被多个数据实例使用的情况。

sssaMySQL 被设计为一个 单进程多线程 架构的数据库,MySQL 数据库实例在系统上的表现就是一个进程。(类似于程序和进程的关系,当然这样类比也不太恰当)

sssa总结:数据库是文件的集合,是依照某种数据模型组织起来并存放于二级存储器中的数据集合;数据库实例是程序,是位于用户与操作系统之间的一层数据管理软件, 用户对数据库数据的任何操作,包括数据库定义、数据查询、数据维护、数据库运行控制等都是在数据库实例下进行的,应用程序只有通过数据库实例才能和数据库打交道。

MySQL 体系结构

在这里插入图片描述
sdsssaMySQL 数据库区别于其他数据库的最重要的一个特点就是其 插件式的表存储引擎。MySQL 插件式的存储引擎架构提供了一系列标准的管理和服务支持,这些标准与存储引擎本身无关,可能是每个数据库系统本身都必需的,如SQL 分析器和优化器等,而存储引擎是底层物理结构的实现,每个存储引擎开发者可以按照自己的意愿来进行开发。需要特别注意的是,存储引擎是基于表的,而不是数据库

MySQL 存储引擎

sssa存储引擎的好处是,每个存储引擎都有各自的特点,能够根据具体的应用建立不同存储引擎表。

sssa由于 MySQL 数据库开源特性,存储引擎可以分为 MySQL 官方存储引擎和第三方存储引擎(比如 InnoDB 存储引擎)。

lnnoDB 存储引擎

sssaInnoDB 存储引擎 支持事务,其设计目标主要面向 在线事务处理( OLTP) 的应用。其特点是 行锁设计、支持外键,并支持类似于Oracle 的 非锁定读,即默认读取操作不会产生锁。(MySQL 数据库5.5.8 版本开始, InnoDB 存储引擎是默认的存储引擎,之前默认的是 MyISAM 存储引擎)

sssaInnoDB 存储引擎将数据放在一个逻辑的表空间中,这个表空间就像黑盒一样由InnoDB 存储引擎自身进行管理。

sssaInnoDB 通过 使用多版本并发控制(MVCC) 来获得高并发性,并且实现了SQL标准的4 种隔离级别,默认为 REPEATABLE 级别。(具体后面会说到)

sssa对于表中数据的存储, InnoDB 存储引擎采用了聚集(clustered) 的方式,因此每张表的存储都是按主键的顺序进行存放。如果没有显式地在表定义时指定主键, InnoDB 存储引擎会为每一行生成一个6 字节的ROWID, 并以此作为主键。

sssalnnoDB 存储引擎具备的高可用性、高性能以及高可扩展性。

MylSAM 存储引擎

sssaMyISAM 存储引擎 不支持事务、表锁设计,支待全文索引,主要面向一些 OLAP 数据库应用。

sssa数据库系统与文件系统很大的一个不同之处在于对事务的支持然而MyISAM 存储引擎是不支持事务的。毕竟在数据仓库中不是所有的操作都需要事务支持。

sssa最大的不同点:MyISAM 存储引擎的缓冲池只缓存(cache) 索引文件,而不缓冲数据文件。

sssaMylSAM 存储引擎表由MYD 和MYI 组成, MYD 用来存放数据文件, MYI 用来存放索引文件。

sdsssa注:在MySQL 5 . 0 版本之前, MyISAM 默认支持的表大小为4GB, 如果需要支持大于4GB 的MyISAM 表时,则需要制定 MAX_ROWSAVG_ROW_LENGTH 属性。从MySQL5.0 版本开始, MyISAM 默认支持 256TB 的单表数据。对于MyISAM 存储引擎表, MySQL 数据库只缓存其索引文件,数据文件的缓存交由操作系统本身来完成。

NDB存储引擎

sssaNDB 存储引擎是一个集群存储引擎

sssa特点:数据全部放在内存中(从MySQL 5.1 版本开始,可以将非索引数据放在磁盘上),因此主键查找的速度极快,并且通过添加 NDB 数据存储节点可以线性地提高数据库性能,是高可用、高性能的集群系统。

sdsssa注:NOB 存储引擎的连接操作CJOIN) 是在MySQL 数据库层完成的,而不是在存储引擎层完成的。

Memory 存储引擎

sssaMemory 存储引擎(之前称HEAP 存储引擎)将表中的数据存放在内存中,如果数据库重启或发生崩溃,表中的数据都将消失。
sssa适用范围:它非常适合用于 存储临时数据的临时表,以及数据仓库中的纬度表。Memory 存储引擎默认使用哈希索引,而不是我们熟悉的B+树索引。

sssa限制:虽然存储引擎速度非常快,但只支持表锁,并发性能较差,并且不支持TEXT 和BLOB 列类型。

sdsssa注:存储 变长字段(varchar) 时是按照 定常字段(char) 的方式进行的,因此会浪费内存(这个问题之前已经提到, eBay 的工程师Igor Chernyshev 已经给出了patch 解决方案)。

sssaMySQL 数据库使用Memory 存储引擎作为临时表来存放查询的中间结果集。如果中间结果集大于 Memory 存储引擎表的容量设置,又或者中间结果含有TEXT 或BLOB 列类型字段,则MySQL 数据库会把其转换到 MyISAM 存储引擎表而存放到磁盘中。

sdsssa注:之前提到 MyISAM 不缓存数据文件,因此这时产生的临时表的性能对于查询会有损失。

Archive 存储引擎

sssaArchive 存储引擎只支持INSERT 和SELECT 操作,从MySQL 5.1 开始支持索引。Archive 存储引擎使用zlib 算法将数据行Crow) 进行压缩后存储。

sssaArchive 存储引擎非常适合存储归档数据,如日志信息。使用行锁来实现高并发的插入操作,但是其本身并不是事务安全的存储引擎,其设计目标主要是提供高速的插入和压缩功能

Federated 存储引擎

sssaFederated 存储引擎表并不存放数据,它只是指向一台远程MySQL 数据库服务器上的表。

Maria 存储引擎

sssaMaria 存储引擎是新开发的引擎,设计目标主要是用来取代原有的MyISAM 存储引擎,从而成为MySQL 的默认存储引擎

其他存储引擎

sssa除了上面提到的7 种存储引擎外, MySQL 数据库还有很多其他的存储引擎,它们都有各自使用的场合。

sssa MySQL 数据库支不支持全文索引? 支持! MylSAMInnoDBSphinx 存储引擎都支持全文索引。

sssaMySQL 数据库速度快是因为不支持事务?错!虽然MySQL 的MyISAM 存储引擎不支持事务,但是InnoDB 支持。“快”是相对于不同应用来说的。

sssa当表的数据量大于1000 万时MySQL 的性能会急剧下降吗? 不! MySQL 是数据库,不是文件,随着数据行数的增加,性能当然会有所下降,但是这些下降不是线性的,如果用户选择了正确的存储引擎,以及正确的配置,再多的数据量MySQL 也能承受。

各存储引擎之间的比较

在这里插入图片描述
sdsssa注:MySQL 提供了一个非常好的用来演示MySQL 各项功能的示例数据库,如SQL Server 提供的AdventureWorks 示例数据库和Oracle 提供的示例数据库。

连接MySQL

sssa连接MySQL 操作是一个连接进程和MySQL 数据库实例进行通信。 本质上是进程通信,常用的进程通信方式有管道、命名管道、命名字、TCP/IP 套接字、UNIX 域套接字

TCP/IP

sssaTCP/IP 套接字方式是MySQL 数据库在任何平台下都提供的连接方式,也是网络中使用得最多的一种方式。这种方式在TCP/IP 连接上建立一个基于网络的连接请求,一般情况下客户端(client) 在一台服务器上,而MySQL 实例( server) 在另一台服务器上,这两台机器通过一个TCP/IP 网络连接。

sdsssa例如用户可以在Windows 服务器下请求一台远程Linux 服务器下的MySQL 实例:

C:\>mysql -h 192.168.0.101 - u david -p
Enter password :
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 18358

sdsssa这里的客户端是Windows, 它向一台Host IP 为192.168 . 0.101 的MySQL 实例发起了TCP/IP 连接请求,并且连接成功。之后就可以对MySQL 数据库进行一些数据库操作,如DDL 和DML 等。在通过TCP/IP 连接到MySQL 实例时, MySQL 数据库会先检查一张权限视图,用来判断发起请求的客户端IP 是否允许连接到MySQL 实例。

命名管道和共享内存

sssa在Windows2000 、WindowsXP 、Windows 2003 和Windows Vista 以及在此之上的平台上,如果两个需要进程通信的进程在同一台服务器上,那么可以使用命名管道。在MySQL4.1之后的版本中, MySQL 还提供了共享内存的连接方式,这是通过在配置文件中添加–shared-memory 实现的。如果想使用共享内存的方式,在连接时, MySQL 客户端还必须使用–protocol=memory 选项。

UNIX 域套接字

sssa在Linux 和UNIX 环境下,还可以使用UNIX 域套接字。UNIX 域套接字其实不是一个网络协议,所以只能在MySQL 客户端和数据库实例在一台服务器上的情况下使用。

sdsssa用户可以在配置文件中指定套接字文件的路径,如 –socket=/tmp/mysql.sock 。当数据库实例启动后,用户可以通过下列命令来进行UNIX 域套接字文件的查找:

mysql>SHOW VARIABLES LIKE'socket ';
*************************** 1. row***************************
Variable_ name: socket
Value: / tmp/mysql.sock
1 row in set (0.00 sec)

sdsssa在知道了UNIX 域套接字文件的路径后,就可以使用该方式进行连接了,如下所示:

[root@stargazer -] # mysql 一udavid -S /tmp/mysql . sock
Welcome to the MySQL monitor. Commands end with; or \g .
Your MySQL connection id is 20333
Server version : 5.0.77-log MySQL Community Server (GPL)
Type'help;'or' \ h'for help.Type'\c ' to clear the buffer.
mysql>

感谢各位的暴击三连~

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值