mysql体系结构

来源:互联网 发布:维宏nk260下载软件 编辑:程序博客网 时间:2024/06/06 02:27

MySQL体系结构

1.概述

    MySQL数据库是一种可移植的开源数据库。所谓可移植是指MySQL几乎可以在所有的操作系统上运行;开源是指我们可以拿到MySQL数据的源码,如果有开发能力,可以根据自己的需求,来改动MySQL源码,以满足自己的需求。另外MySQL的存储引擎是插件式的,可以根据自己的系统需求来选择最优的存储引擎。当然MySQL插件式的存储引擎架构提供了一系列标准的管理和服务支持,这些标准与存储引擎本身无关,这说明你也可以开发自己的存储引擎。基于上述的这些优点,MySQL数据库的发展是特别快的。所以我们有必要来学习一下MySQL数据库,下面先来认识一下MySQL的体系结构。

2.MySQL体系结构

    关于关系型数据,有两个很关键的概念,一个是数据库(database),一个是实例(instance)。接触过Oracle的人都知道,在Oracle数据库中,所谓的实例就是指memory+process,例如SGA,PGA,background process等,感觉都是非常飘渺的东西(当然了,通过一些操作系统命令这些东西都是可以观察到的),随着数据库的启动和关闭而启动和关闭;所谓的数据库就是指一堆的数据文件的集合,我们可以可以看见这些文件,这些文件是实实在在存在于操作系统上的,例如数据文件,参数文件,控制文件等。在MySQL数据库中,所谓的数据库也就是.frm,.MYD,.idb等数据文件的集合,这些文件存在于操作系统之上,而实例是一个更加不好理解的东西,它是位于用户和操作系统给之间的一层数据管理软件,用户对数据(本质就是文件)的操作,包括数据库定义,数据的增删改查,数据库的运行控制等都是在数据库实例下进行的,应用程序只有先通过数据库实例才能和数据打交道。
    下面先来看一下MySQL的体系结构图

下面来详细的解释一下这个结构图,图中自上而下,从左到右由一下几部分组成:
        1)connecters
            这个其实就是客户端程序,MySQL提供了比较全面的API,它可以支持C,JdbC,ODBC等方式的连接
        2)连接池组件
            连接池主要的作用就是认证,分配连接线程,连接数控制,连接缓存等功能的。连接池的设计理念是为了节省系统资源,减少服务器压力。
        3)管理服务和工具组件
            就是MySQL提供的一些客户端或者命令行工具,比如mysqladmin,mysqldump,mysqlimport,mysqlbinlog,mysql,mysqldumpslow等等。
        4)sql接口组件
            接口组件主要是将客户端发送过来的sql语句或者命令分解成单个的元素, 然后将这些元素放在一个数据结构中。
        5)查询分析器组件
            验证操作的对象,权限等。 
        6)优化器组件
           优化器优化其sql语句,选择最优的sql执行计划
        7)缓冲组件
           提供MySQL的内存缓冲机制
        8)插件式存储引擎
           MySQL的存储引擎是可插拔式的,关于存储引擎是比较复杂的,这里我们对存储引擎先有一个大概的印象。还有一点,存储引擎是基于表的,而不是数据库,存储引擎是数据底层物理结构的实现。
        9)物理文件
            MySQL支持的文件系统可以是NTFS,ufs,ext2/3,NFS,SAN,NAS等,而包含的数据文件有数据文件,日志文件(redo,undo,binary,error,slow query等),索引文件等。

3.MySQL存储引擎概述

    关于MySQL的存储引擎是MySQL数据库的难点,这里我只是大概介绍一下MySQL中常见的存储引擎以及其主要特性。在实际的应用中,我们应该根据应用的具体特点,来选择最合适的存储引擎,也可以对现有的存储引擎做一些个性化的升级和改造,当然了,你也可以开发自己的存储引擎。
        1)innodb存储引擎
            InnoDB存储引擎已经是当前数据库版本中的默认数据库,他的显著特性是支持事物,行锁设计,支持主外键,并支持类似于Oracle的非锁定读,即默认读取数据操作时不会产生锁的。一般情况下,如果没有特殊的要求,我们都应该选择使用InnoDB存储引擎。
        2)Myisam存储引擎
            myisam存储引擎不支持事物,表锁设计,支持全文索引,主要面向一些Olap数据库应用。在之前的版本中myisam是MySQL的默认存储引擎,myisam存储引擎的另一个与众不同的地方是缓冲池中只缓存索引文件,而不缓冲数据文件,数据文件的缓存是交给操作系统本身来完成的,这点和大多数的数据库都不同。重启数据库或者操作系统并不会丢失表中的数据,这个和memory存储引擎不同。myisam存储引擎表由MYD和MYI文件组成,MYD用来存放数据,MYI用来存放索引。可以通过myisampack工具来进一步压缩数据文件,因为myisampack工具适应赫夫曼(Huffman)编码静态算法来压缩数据,因此数据工具myisampack工具压缩后的表是只读的,当然了,也可以用myisampack工具来解压缩数据文件。
        3)NDB存储引擎
            NDB存储引擎是MySQL集群环境使用的存储引擎,采用的是shared nothing结构,它也是将所有的数据缓存在内存中的,所以MySQL集群的启动时间跟数据量是有关系的,因为每次在启动的时候,需要将数据加载到内存中,重启数据库或者服务器不会造成数据的丢失。另外ndb存储引擎的连接操作是在MySQL数据库层完成的,而不是在存储引擎层完成的,这意味着复杂的连接操作需要耗费巨大的网络开销,因此查询速度很慢。个人感觉现在MySQL集群还不是一个非常成熟的产品,大家慎用。
        4)memory存储引擎
             memory存储引擎是将表中的所居全部存放在内存中的,(磁盘上只存储表结构,不存储数据)如果建数据库或者操作系统重启,则表中的数据全部丢失。memory存储引擎默认使用hash索引,另外memory存储引擎不支持text和blob的数据类型,还有在memory存储引擎上,会将varchar类型转换为char类型存储,从而浪费内存。
        5)Archive存储引擎
            Archive存储引擎只支持insert和select操作,现在的数据库版本已经开始支持索引。Archive存储引擎是使用zlib算法将数据行进行压缩后存储,压缩的比例可以达到1:10。Archive存储引擎非常适合存储柜当数据。
        6)Federated
        Fredrated存储引擎并不存放数据,它只是指向一台远程的MySQL数据库服务器上的表,这非常类似于Oracle中的透明网关,不同的是,当前的Federated存储引擎只支持MySQL数据库表,不支持异构的数据库表。
        7)CSV存储引擎
            CSV引擎可以将普通的CSV文件作为MySQL的表来处理,但这种表不支持索引,CSV引擎就是平面文件和MySQL数据库的一个桥梁。
        8)Blackhole存储引擎
            Blackhole数据库顾名思义就是指黑洞数据库,它不存储任何数据,进入到Blackhole存储引擎的数据都会消失,但是MySQL会记录其日志,基于此特点Blackhole存储引擎在复制中有着很重要的作用。

4.总结

    上面我们只是大概的介绍了一下MySQL数据库的体系结构和常见的存储引擎,希望对MySQL体系结构和存储引擎有一些概念上的认识。

0 0