我是靠谱客的博主 无限信封,最近开发中收集的这篇文章主要介绍MySQL笔记(1)---MySQL体系结构和存储引擎,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.前言

  本系列记录MYSQL数据库的一些结构和实现特点,方便查询。

2.基本概念

  数据库:物理操作系统文件或者其他形式文件类型的集合。MySQL中数据库文件可以是frm、MYD、MYI、ibd结尾的文件。使用NDB引擎时,可以是内存中的文件。

  实例:MySQL数据库由后台线程以及一个共享内存区组成。共享内存可以被运行的后台线程所共享。MySQL数据库实例在系统上的表现就是一个进程。

2.2 MySQL体系结构

  这是MySQL的一个体系结构。可以看出大致分成了四层:

    第一层:处理客户端连接的连接池

    第二层:处理客户端请求的组件,包括:SQL接口,查询分析器,优化组件和缓冲组件。  管理组件和工具组件也在这一层。

    第三层:插件式的存储引擎(注意:存储引擎是基于表的,不是数据库)

    第四层:物理文件系统

3.存储引擎

  插件式的存储引擎好处是可以根据实际需要替换相应的引擎。

3.1 InnoDB存储引擎

  支持事务,行锁设计,支持外键,非锁定读,即默认读取操作不会产生锁。

  数据放在一个逻辑的表空间中,由InnoDB进行管理。MySQL4.1开始,每个表可以单独存放到一个独立的ibd文件中。

  通过多版本并发控制(MVCC)来获得高并发性,并实现了SQL的四种隔离级别,默认REPEATABLE级别。使用next-key locking策略避免幻读。

  提供插入缓冲、二次写、自适应哈希索引、预读等高性能和高可用功能。

  表中的数据存储采取聚集(clustered)的方式,因此每张表的存储都是按主键的顺序进行存放的。如果没有显示的主键,会生成一个6字节的ROWID

3.2 MyISAM存储引擎

  不支持事务,表锁设计,但是支持全文索引,主要面向一些OLAP数据库应用。

  只缓冲索引文件,不缓冲数据文件。

  表由MYD和MYI组成,MYD存放数据文件,MYI存放索引文件,5.0版本之前默认支持表大小是4GB,如果需要支持大于4GB的表,需要定制MAX_ROWS和AVG_ROW_LENGTH属性。5.0版本开始支持256TB单表数据。

3.3 NDB存储引擎

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

  注意:连接操作JOIN是在数据库层完成的,而不是存储引擎。这意味着复杂的连接操作需要巨大的网络开销,查询速度慢。

3.4 memory存储引擎

  表数据存在内存中,数据会丢失,适用于存储临时数据的临时表。

  memory存储引擎默认使用哈希索引,而不是B+树索引。

  并发性能差,不支持TEXT和BLOB列类型,存储varchar是按char的方式进行,会浪费内存。

  MySQL使用Memory存储引擎作为临时表来存放查询的中间结果集,如果大于存储引擎的容量设置,又或者中间结果含有TEXT或BLOB列类型字段,会将其转换到MyISAM存储引擎存放到磁盘中。MyISAM数据库不缓存数据文件,因此这时产生的临时表的性能对查询会有损失。

3.5 Archive存储引擎

  这个引擎只支持INSERT和SELECT操作,从5.1版本开始支持索引。使用zlib算法将数据行压缩后存储,比例可以达到1:10。适用于存储归档数据,如日志信息。

  使用行锁来实现高并发的插入操作,非事务安全,设计目标就是提供高速的插入和压缩功能。

3.6 Federated存储引擎

  这个引擎并不存放数据,只是指向一台远程MySQL数据库服务器上的表。类似于SQL Server的链接服务器和Oracle的透明网关,不同在于,目前其只支持MySQL数据库表,不支持异构数据库表。

3.7 Maria存储引擎

  这个是新开发的引擎,目标是用于取代原有的MyISAM存储引擎,成为MySQL的默认存储引擎。

  特点:支持缓存数据和索引文件,应用行锁设计,提供MVCC功能,支持事务和非事务选项,更好的BLOB字符类型的处理性能。

3.8 小结

  MySQL支持全文索引,MyISAM、InnoDB(1.2版本),Sphinx。

  支持事务,InnoDB。ETL操作,MyISAM会有优势,OLTP(在线事务处理)环境,InnoDB更好。

  SHOW ENGINES可以查看mysql支持的存储引擎。

  下表是mysql5.6的主要存储引擎的对比:https://dev.mysql.com/doc/refman/5.6/en/storage-engines.html

FeatureMyISAMMemoryInnoDBArchiveNDB
B-tree indexesYesYesYesNoNo
Backup/point-in-time recovery (note 1)YesYesYesYesYes
Cluster database supportNoNoNoNoYes
Clustered indexesNoNoYesNoNo
Compressed dataYes (note 2)NoYesYesNo
Data cachesNoN/AYesNoYes
Encrypted data(note 3)YesYesYesYesYes
Foreign key supportNoNoYesNoYes (note 4)
Full-text search indexesYesNoYes (note 5)NoNo
Geospatial data type supportYesNoYesYesYes
Geospatial indexing supportYesNoYes (note 6)NoNo
Hash indexesNoYesNo (note 7)NoYes
Index cachesYesN/AYesNoYes
Locking granularityTableTableRowRowRow
MVCCNoNoYesNoNo
Replication support (note 1)YesLimited (note 8)YesYesYes
Storage limits256TBRAM64TBNone384EB
T-tree indexesNoNoNoNoYes
TransactionsNoNoYesNoYes
Update statistics for data dictionaryYesYesYesYesYes

转载于:https://www.cnblogs.com/lighten/p/9257758.html

最后

以上就是无限信封为你收集整理的MySQL笔记(1)---MySQL体系结构和存储引擎的全部内容,希望文章能够帮你解决MySQL笔记(1)---MySQL体系结构和存储引擎所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部