MySQL存储引擎InnoDB学习01-MySQL体系结构和存储引擎

第一章:MySQL体系结构和存储引擎

Mysql被设计为一个单进程多线程的架构的数据库,MySql数据库实例在系统上的表现就是一个进程。
当我们启动一个Mysql实例时,MySQL数据库会去读取配置文件,根据配置文件的参数来启动数据库实例(这与Oracle的参数文件spfile相似,但不同的是,Oracle中如果没有参数文件,在启动实例时会提示找不到该参数文件,数据库启动会失败。而在MySQL数据库中,可以没有配置文件,这时MySQL会按编译时默认的参数启动实例),MySQL数据库是按如下顺序读取配置文件的:

/etc/my.cnf 
/etc/mysql/my.cnf 
/usr/local/mysql/etc/my.cnf
~/.my.cnf

如果配置文件中有相同配置参数,则以最后一个配置文件中参数为准。
配置文件中有个参数datadir,该参数指定了数据库所在的路径,Linux系统下默认为usr/local/mysql/data

1.1 MySQL体系结构

mysql体系结构 .png

MySQL由以下几部分组成:

  • 连接池组件
  • 管理服务和工具服务
  • SQL接口组件
  • 查询分析器组件
  • 优化器组件
  • 缓冲(cache)组件
  • 插件式存储引擎
  • 物理文件

需要特别注意的是:存储引擎是基于表的,而不是数据库。

1.2 MySQL存储引擎

存储引擎是MySQL区别于其他数据库的一个最重要特性,存储引擎的好处是:每个存储引擎都有各自的特点,能够根据具体的应用建立不同存储引擎表,由于MySQL的开源特性,用户还可以根据MySQL预定义的存储引擎接口编写自己的存储引擎。

1.2.1 常见存储引擎

  • InnoDB存储引擎
        InnoDB存储引擎支持事务,其设计目标主要面向在线事务处理(OLTP)的应用,其特点是行锁设计、支持外键、并支持类似于Oracle的非锁定读(即默认读取操作不会产生锁),Mysql数据库从5.5.8版本开始将InnoDB设置为默认的存储引擎。InnoDB存储引擎将数据放在一个逻辑的表空间中,这个表空间像一个黑盒一样由InnoDB存储引擎自行管理(InnoDB存储引擎的表单独存放到一个独立的idb文件中)。
        InnoDB通过使用多版本并发控制(MVCC)来获得高并发,并且实现了SQL标准的4种隔离级别,默认为REPEATABLE级别。同时,使用next_key_locking策略来避免幻读。除此之外,InnoDB存储引擎还提供了插入缓存(insert buffer)、二次写(double write)、自适应哈希索引(adaptive hash index)、预读(read ahead)等高性能和高可用的功能。
        对于表中数据的存储,InnoDB存储引擎采用了聚集(clustered)的方式,因此每张表的存储都是按主键的顺序进行存放,如果在表中没有显式的指定主键,InnoDB存储引擎会为每一行生成一个6个字节的ROWID,并以此作为主键。
  • MyISAM引擎
        MyISAM存储引擎不支持事务、表锁设计、支持全文索引,主要面向一些OLAP数据库应用。同时MyISAM存储引擎的缓冲池值缓存索引文件,而不缓冲数据文件。
        MyISAM存储引擎表由MYD和MYI组成,MYD用来存放数据文件,MYI用来存放索引文件。
        在MySQL5.0之前的版本,MyISAM默认支持的表大小为4GB,如果需要支持大于4GB的MyISAM表时,则需要制定MAX_ROWS和AVG_ROW_LENGTH属性,而从MySQL5.0版本开始,MyISAM默认支持256TB的单表数据,这足够满足一般应用的需求。
        不难看出,MyISAM适合没有更新操作,只有查询(例如统计、报表)的业务场景,MyISAM现在用的已经很少了。

注意:对于MyISAM存储引擎表,MySQL数据库只缓存其索引文件,数据文件的缓存交由操作系统本身来完成,这与其他LRU算法缓存数据的大部分数据库不同。此外,在MySQL5.1.23版本之前,无论是在32位还是64位操作系统环境下,缓存索引的缓冲区最大只能设置为4GB,在之后的版本中,64位的操作系统可以支持大于4GB的索引缓冲区。

  • NDB存储引擎
        2003年,MySQL AB公司从Sony Ericsson公司收购了NDB集群引擎。
        NDB存储引擎是一个集群存储引擎,类似于Oracle的RAC集群,不过与Oracle RAC share everything架构不同的是,其结构是share nothing的集群架构,因此能提供更高的可用性。
        NDB的特点是数据全部放在内存中(MySQL5.1版本开始可以将非索引数据存放在磁盘上),因此主键查找(primary key lookups)的速度极快,并且通过添加NDB数据存储节点(Data Node)可以线性的提高数据库性能,是高可用、高性能的集群系统。
        值得注意的是,NDB存储引擎的连接操作(JOIN)是在MySQL数据库层完成的,而不是在存储引擎层完成的,这意味着负责的连接操作需要巨大的网络开销,因此查询速度很慢。
  • Memory存储引擎
        Memory存储引擎(之前称为HEAP存储引擎)将表中的数据存放到内存中,如果数据库重启或宕机,表中的数据都将消失。它非常适合存储临时数据,Memory存储引擎默认使用哈希索引,而不是我们熟悉的B+树索引。
        虽然Memory存储引擎速度非常快,但在使用上有一定的限制,比如它只支持表锁,并发性能较差,并且不支持TEXT和BLOB类型,更重要的是存储变长字段(varchar)时是按照定长字段(char)的方式进行的,因此会浪费内存。
  • Archive存储引擎
        Archive存储引擎只支持INSERT和SELECT操作,从MySQL 5.1开始支持索引。
        Archive存储引擎使用zlib算法将数据行(row)进行压缩后存储,压缩比一般可达1:10。
        Archive存储引擎非常适合存储归档数据,如日志信息等,Archive存储引擎使用行锁来实现高并发的插入操作,但是其本身不是事务安全的存储引擎,其设计目标是提供高速的插入和压缩功能。
  • Federated存储引擎
        Federated存储引擎表并不存放数据,它只是指向一台远程MySQL数据库服务器上的表,这非常类似于SQL Server的链接服务器和Oracle的透明网关,不同的是,当前的Fedrated存储引擎只支持MySQL数据库表,不支持异构数据库表。
  • Maria存储引擎
        Maria存储引擎是新开发的存储引擎,设计目标主要是用来取代原有的MyISAM存储引擎,从而成为MySQL的默认存储引擎(存储引擎的开发者是MySQL创始人之一的Michael Widenius,因此它可以看作是MyISAM的后续版本)
        Maria存储引擎的特点是:支持缓存数据和索引文件、应用了行锁设计、提供了MVCC功能、支持事务和非事务安全的选项、以及更好的BLOB字符类型的处理性能。
  • 其他存储引擎
    MySQL还有Merge、CSV、Sphinx、Infobright存储引擎,他们都有各自的特点和使用场景。

1.3各个存储引擎的比较

不同MySQL存储引擎相关特新比较.png

如何查看自己当前使用的MySQL数据库所支持的存储引擎?

  • 可以通过命令:SHOW ENGINES查看:
  • 也可以通过查找information_schema中的ENGINES表查看


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,012评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,628评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,653评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,485评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,574评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,590评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,596评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,340评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,794评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,102评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,276评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,940评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,583评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,201评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,441评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,173评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,136评论 2 352

推荐阅读更多精彩内容