mysql 体系结构和存储引擎介绍

目录
  • 1 前言
  • 2 mysql 配置文件加载顺序
  • 3 mysql 引擎介绍
    • 3.1 InnoDB 引擎
    • 3.2 MyISAM 引擎
    • 3.3 NDB 引擎
    • 3.4 Archive 引擎
    • 3.5 Federated 引擎
    • 3.6 Maria 引擎
    • 3.7 其它引擎
  • 4 总结

1 前言

mysql 是一个单进程多线程架构的可移植的数据库,mysql 数据库实例在系统上的表现就是一个进程,可以在所有的平台上运行。

mysql 的整体架构图如下图所示: 

2 mysql 配置文件加载顺序

mysql 启动会读取配置文件,根据配置文件的参数启动数据库实例,数据库的配置文件为my.cnf,按照/etc/my.cnf -> /etc/mysql/my.cnf -> /usr/local/mysql/etc/my.cnf -> ~/my.cnf配置文件进行顺序加载,如果有相同的配置,则以最后一个加载的为准,这个和 springboot 的配置文件加载启动顺序是类似的。

3 mysql 引擎介绍

存储引擎是基于表的,而不是数据库。关于数据库引擎的语句为:

# 修改数据库引擎的语句
alter table table_name engine=MyISAM;
# 查询数据库可以支持的数据库引擎
show engines

查看数据库支持的引擎结果如下图所示: 

mysql 存储引擎有 InnoDB,MyISAM,NDB 引擎,Memory 引擎, Archive 引擎,Federated 引擎,Maria 引擎。

3.1 InnoDB 引擎

InnoDB 存储引擎支持事务,其涉及目标主要是面向在线事务处理(OTLP),其特点是支持行锁和外键,并支持非锁定读(即读取数据默认不会加锁),从 mysql 5.5.8 版本开始,InnoDB 存储引擎就是mysql 的默认存储引擎。

InnoDB 存储引擎将数据存放在一个逻辑表空间中。InnoDB 通过使用多版本并发控制(MVCC)来获得高并发性的性能,并实现了SQL标准的4中隔离级别,默认使用 repeatable 级别。同时 innodb 引擎使用 next-locking 的测了来避免幻读现象的产生。除此之外,Innodb 引擎还提供了插入缓存,二次写,自适应哈希索引,预读等高性能和高可用的功能。

Innodb 存储引擎采用了聚集的方式,因此每张表都是按照主键的顺序进行存放的。如果没有显示的指定表的主键,那么存储引擎会为每行生成一个6字节的 rowid ,并以此作为主键使用。

3.2 MyISAM 引擎

MyISAM 存储引擎不支持事务、支持表锁不支持行锁,支持全文索引,主要面向一些 OLAP 数据库应用。数据库系统和文件系统很大的一个不同点在于对事务的支持,然而MyISAM存储引擎不支持事务,InnoDB 引擎支持,其引擎的缓冲池之缓存索引文件,而不缓存数据文件,这个和大多数的数据库不同。

MyISAM 存储引擎表是由 MYD 和 MYI 组成的一个系统,前者用于存放数据文件,后者是存放索引文件。

3.3 NDB 引擎

NDB 引擎是一个集群存储引擎,其结构是 share nothing 的集群架构,因此能够提供高可用性。NDB 的特点是数据全部存放在内存中,因此根据主键查询的效率速度极快,并且通过添加存储节点来提高数据库的性能。该存储引擎的连接操作是在数据库底层完成的,而不是在存储引擎层完成的,如果是复杂的数据库连接需要巨大的网络开销,查询速度比较慢。

3.4 Archive 引擎

Archive 引擎只支持 insert 和 select 操作,从 mysql5.1 之后开始支持索引,可以使用 zlib 算法进行数据行的压缩,压缩比可以达到 1:10,改引擎特别适合做数据的归档操作,比如说日志信息。该引擎使用行锁来实现高并发的插入操作,但是其本身不是事务安全的,其设计目的主要是提供高速插入和压缩功能。

3.5 Federated 引擎

Federated 存储引擎并不存放数据,它只是指向远程 mysql 数据库服务器上的表,改引擎只支持mysql 数据库表,不支持异构数据表。

3.6 Maria 引擎

Maria 引擎是新开发的数据库引擎,其设计目的是用来取代 MyISAM 引擎,从而成为 MySQL 的默认存储引擎。该引擎的特点是:支持缓存数据和索引文件,应用了行锁设计,提供了 MVCC 功能,支持事务和非事务安全的选项,以及更好的 BLOB 字符类型的处理性能。

3.7 其它引擎

除了以上提到的数据库引擎外,还有CSVMerge等数据库引擎, 感兴趣的可以继续关注学习。

4 总结

到此这篇关于mysql 体系结构和存储引擎介绍的文章就介绍到这了,更多相关mysql 存储引擎内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 关于MySQL Memory存储引擎的相关知识

    关于Memory存储引擎的知识点 Memory存储引擎在日常的工作中使用的是比较少的,但是在MySQL的某些语法中,会用到memory引擎的内存表,它有以下几个特点: 1.内存表的建表语法是create table - engine=memory. 2.这种表的数据都保存在内存里,系统重启的时候会被清空,但是表结构还在. 2.Memory存储引擎的数据和索引是分开的.memory存储引擎的表也可以有主键,主键id上存储的是每个数据的位置,主键id是哈希索引,索引上的key也不是连续的. 这种数据

  • Mysql中存储引擎的区别及比较

    MyISAM存储引擎 MyISAM基于ISAM存储引擎,并对其进行扩展.它是在Web.数据仓储和其他应用环境下最常使用的存储引擎之一.MyISAM拥有较高的插入.查询速度,但不支持事务. MyISAM主要特性有: 1.大文件(达到63位文件长度)在支持大文件的文件系统和操作系统上被支持. 2.当把删除和更新及插入操作混合使用的时候,动态尺寸的行产生更少碎片.这要通过合并相邻被删除的块,以及若下一个块被删除,就扩展到下一块自动完成. 3.每个MyISAM表最大索引数是64,这可以通过重新编译来改变

  • MySQL的存储引擎InnoDB和MyISAM

    目录 1.MyISAM底层存储 1.1MyISAM底层存储(非聚集索引方式) 1.2InnoDB底层存储(聚集索引方式) 2.InnoDB与MyISAM简介 3.MyISAM与InnoDB的比较 4.什么时候用MyISAM数据存储引擎?什么时候用InnoDB数据存储引擎? 1.MyISAM底层存储 (非聚集索引方式)与InnoDB底层存储(聚集索引方式) 1.1MyISAM底层存储(非聚集索引方式) Myisam 创建表后生成的文件有三个: frm:创建表的语句 MYD:表里面的数据文件(myi

  • MySQL系列之七 MySQL存储引擎

    一.MyISAM存储引擎 缺点: 不支持事务 最小粒度锁:表级 读写相互阻塞,写入不能读,读时不能写 不支持MVCC(支持多版本并发控制机制) 不支持聚簇索引 不支持数据缓存 不支持外键 崩溃恢复性较差 优点: 最大支持256TB存储空间 读取数据较快,占用资源较少 MyISAM引擎存储文件: tbl_name.frm: 表格式定义 tbl_name.MYD: 数据文件 tbl_name.MYI: 索引文件 适用场景:MySQL5.5.5前默认的数据库引擎,在只读(或者写较少).表较小(可以接受

  • 基于mysql体系结构的深入解析

    由:连接池组件.管理服务和工具组件.sql接口组件.查询分析器组件.优化器组件.        缓冲组件.插件式存储引擎.物理文件组成. mysql是独有的插件式体系结构,各个存储引擎有自己的特点. mysql各个存储引擎概述:innodb存储引擎:[/color][/b] 面向oltp(online transaction processing).行锁.支持外键.非锁定读.默认采用repeaable级别(可重复读)通过next-keylocking策略避免幻读.插入缓冲.二次写.自适应哈希索引

  • 详解mysql中的存储引擎

    mysql存储引擎概述 什么是存储引擎? MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力.通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能. 例如,如果你在研究大量的临时数据,你也许需要使用内存存储引擎.内存存储引擎能够在内存中存储所有的表格数据.又或者,你也许需要一个支持事务处理的数据库(以确保事务处理不成功时数据的回退能力). 这些不同的技术以及配套的相关

  • 详解MySql中InnoDB存储引擎中的各种锁

    目录 什么是锁 InnoDB存储引擎中的锁 锁的算法 行锁的3种算法 幻像问题 锁的问题 脏读 不可重复读 丢失更新 死锁 什么是锁 现实生活中的锁是为了保护你的私有物品,在数据库中锁是为了解决资源争抢的问题,锁是数据库系统区别于文件系统的一个关键特性.锁机制用于管理对共享资源的并发访. 数据库系统使用锁是为了支持对共享资源进行并发访问,提供数据的完整性和一致性 InnoDB存储引擎区别于MyISAM的两个重要特征就是:InnoDB存储引擎支持事务和行级别的锁,MyISAM只支持表级别的锁 In

  • 详解MySQL InnoDB存储引擎的内存管理

    存储引擎之内存管理 在InnoDB存储引擎中,数据库中的缓冲池是通过LRU(Latest Recent Used,最近最少使用)算法来进行管理的,即最频繁使用的页在LRU列表的最前段,而最少使用的页在LRU列表的尾端,当缓冲池不能存放新读取到的页时,首先释放LRU列表尾端的页. 上面的图中,我使用8个数据页来表示队列,具体作用,先卖个关子.在InnoDB存储引擎中,缓冲池中页的默认大小是16KB,LRU列表中有一个midpoint的位置,新读取到的数据页并不是直接放入到LRU列表的首部,而是放入

  • 基于MySQL体系结构的分析

    了解MySql必须牢牢记住其体系结构图,Mysql是由SQL接口,解析器,优化器,缓存,存储引擎组成的 1 Connectors指的是不同语言中与SQL的交互 2 Management Serveices & Utilities: 系统管理和控制工具 3 Connection Pool: 连接池. 管理缓冲用户连接,线程处理等需要缓存的需求 4 SQL Interface: SQL接口. 接受用户的SQL命令,并且返回用户需要查询的结果.比如select from就是调用SQL Interfac

  • MySQL之MyISAM存储引擎的非聚簇索引详解

    在InnoDB中索引即数据,也就是聚簇索引的那颗B+树的叶子节点中已经包含了所有完整的用户记录.MyISAM的索引方案虽然也是使用树形结构,但是却将索引和数据分开存储,这种索引也叫非聚簇索引. create table index_demo( c1 int, c2 int, c3 char(1), primary key(c1) ) ROW_FORMAT=COMPACT; 将表中的记录按照记录的插入顺序单独存储在一个文件中,这个文件并不划分为若干个数据页,有多少记录就往这个文件中塞多少个记录,这

随机推荐