这段时间在看《High Performance MySQL》,看到存储引擎这个地方感到很多细节比较陌生,所以总结小记一些
为了适应各种不同的运行环境,MYSQL提供了多种不同的存储引擎(Storage Engine ),在应用程序开发这个层面上,开发者可以根据不同的需求选择适合的Storage Engine 方案,更为灵活的是,你可以根据每张表将要存储数据的特点,选择不同的Storage Engine,也就是说,在一个MYSQL数据库中,可以混合使用多种不同的Storage Engine
首先小瞥一下MySQL的体系结构,在最高抽象层度下,可以用Garlan & Shaw的分层结构体系来表示(左)
其中应用层为所有RDBMS用户提供用户接口,逻辑层包括了所有核心功能的实现,物理层则负责将数据存储在硬件设备上。
图中右侧更为具体的描述了逻辑层的组成,查询处理子系统、事务管理子系统、恢复管理子系统和存储管理子系统共同组成了MySQL的逻辑层。相信Storage Engine的位置是在Storage Management处,既Storage Engine属于Storage Management子系统的一部分
为了让思路更清晰一些,下面给出一幅比较全面的体系结构图(或更确切的说是流程图,只是忽略了反馈)
上面三幅图来自于一篇非官方(不保证百分百的正确)的MySQL体系结构的报告,与《High Performance MySQL》一书中给出的MySQL大体结构(下图,基本对应于Logic Layer,从第一幅图右侧可以看出MySQL logic layer同样遵从分层体系结构)还是比较吻合的。
连接上图中第二层和第三层之间的接口是并不针对任何存储引擎的单一API,.大概由20个基本的类似“启动事务,返回结果集”等函数组成。存储引擎并不处理SQL,相互之间也不通信,它们的任务只是简单的响应高层传来的请求。
存储引擎各自的一些特点上面提到的四种存储引擎都有各自适用的环境,这取决于它们独有的一些特征。主要体现在性能、事务、并发控制、参照完整性、缓存、 故障恢复,备份及回存等几个方面
目前比较普及的存储引擎是MyISAM和InnoDB.而MyISAM又是绝大部分Web应用的首选。MyISAM与InnoDB的主要的不同点在于性能和事务控制上。
MyISAM是早期ISAM(Indexed Sequential Access Method,我现在用的MySQL5.0已经不支持ISAM了)的扩展实现,ISAM被设计为适合处理读频率远大于写频率这样一种情况,因此ISAM以及后来的MyISAM都没有考虑对事物的支持,排除了TPM,不需要事务记录,ISAM的查询效率相当可观,而且内存占用很少。MyISAM在继承了这类优点的同时,与时俱进的提供了大量实用的新特性和相关工具。例如考虑到并发控制,提供了表级锁,虽然MyISAM本身不支持容错,但可以通过myisamchk进行故障恢复。而且由于MyISAM是每张表使用各自独立的存储文件(MYD数据文件和MYI索引文件),使得备份及恢复十分方便(拷贝覆盖即可),而且还支持在线恢复。
所以如果你的应用是不需要事务,处理的只是基本的CRUD操作,那么MyISAM是不二选择
InnoDB被设计成适用于高并发读写的情况.使用MVCC(Multi-Version Concurrency Control)以及行级锁来提供遵从ACID的事务支持。InnoDB支持外键参照完整性,具备故障恢复能力。另外 InnoDB的性能其实还是不错的,特别是在处理大数据量的情况下,用官方的话说就是: InnoDB的CPU效率是其他基于磁盘的关系数据库存储引擎所不能比的。不过InnoDB的备份恢复要麻烦一点,除非你使用了4.1以后版本提供的Mulit-tablespace支持,因为InnoDB和MyISAM不同,他的数据文件并不是独立对应于每张表的。而是使用的共享表空间,简单的拷贝覆盖方法对他不适用,必须在停掉MYSQL后对进行数据恢复。使用Per-Table Tablespacesd,使其每张表对应一个独立的表空间文件,则情况要简单很多。
一般来说,如果需要事务支持,并且有较高的并发读写频率,InnoDB是不错的选择。要是并发读写频率不高的话,其实可以考虑BDB,但由于在MySQL5.1及其以后版本中,将不再提供BDB支持。这个选项也就没有了
至于Heap和BDB(Berkeley DB),相对来说,普及率不如前两种,但在有些情况下,还是挺适用的
Heap存储引擎就是将数据存储在内存中,由于没有磁盘I./O的等待,速度极快。但由于是内存存储引擎,所做的任何修改在服务器重启后都将消失。
Heap挺适合做测试的时候使用
BDB是MySQL第一款事务安全的存储引擎。在Berkeley DB database library的基础上建立,同样是事务安全的,但BDB的普及率显然不及InnoDB,因为大多数在MySQL中寻找支持事务的存储引擎的同时也在找支持MVCC或是行级锁定存储引擎,而BDB只支持Page-level Lock。
附上一张《High Performance MySQL》 中的各存储引擎的特性表
Attribute
MyISAM
Heap
BDB
InnoDB
Transactions
|
No
|
No
|
Yes
|
Yes
|
Lock granularity
|
Table
|
Table
|
Page (8 KB)
|
Row
|
Storage
|
Split files
|
In-memory
|
Single file per table
|
Tablespace(s)
|
Isolation levels
|
None
|
None
|
Read committed
|
All
|
Portable format
|
Yes
|
N/A
|
No
|
Yes
|
Referential integrity
|
No
|
No
|
No
|
Yes
|
Primary key with data
|
No
|
No
|
Yes
|
Yes
|
MySQL caches data records
|
No
|
Yes
|
Yes
|
Yes
|
Availability
|
All versions
|
All versions
|
MySQL-Max
|
All Versions
|
分享到:
相关推荐
- 提供多种存储引擎。 #### 二、MySQL的下载 - **官方渠道**:通过MySQL官方网站进行下载。 - 访问MySQL官网:https://www.mysql.com/ - 点击“DOWNLOADS”链接进入下载页面。 - 选择“MySQL Community (GPL) ...
MYSQL 语言参考 217 1.1 数据类型参考:怎么写字符串和数字 217 1.1.1 字符串 217 1.1.2 数字 219 1.1.3 十六进制值 219 1.1.4 NULL值 219 1.1.5 数据库、表、索引、列和别名的命名 220 1.1....
MYSQL 语言参考 217 1.1 数据类型参考:怎么写字符串和数字 217 1.1.1 字符串 217 1.1.2 数字 219 1.1.3 十六进制值 219 1.1.4 NULL值 219 1.1.5 数据库、表、索引、列和别名的命名 220 1.1....
【标题】"帝国cms个人博客(转载)"所涉及的知识点主要集中在网站开发领域,特别是使用帝国CMS系统来创建一个个人博客的过程。帝国CMS是一款基于PHP+MySQL开发的内容管理系统,它以其强大的功能、灵活的扩展性和易用...
在`jbpm.jpdl.mysql.sql`文件中,包含了创建jBPM所需的MySQL数据库表的SQL脚本。这通常包括流程实例表、任务实例表、变量实例表等。 5. **项目结构**: `src`目录通常包含流程定义文件(jPDL文件)、业务逻辑代码...
同时,各种库(如数据库操作库、模板引擎、认证和授权库)也是必不可少的,它们提供了常用功能的标准化实现。 4. **数据库**:MySQL、PostgreSQL、MongoDB等是常见的数据库选择。关系型数据库如MySQL适合结构化数据...
3. 数据库管理:PHP程序通常使用MySQL作为后端数据库,存储商品信息、用户数据、订单记录等。数据库设计需遵循关系型数据库原理,如表结构设计、索引优化和事务处理,以确保数据的一致性和高效检索。 4. 用户认证与...
织梦(DedeCMS)是这个系统的核心,它是一款广泛应用的内容管理系统,以其灵活的模板引擎和强大的管理功能著称。 在PHP类库中,可能包含了处理用户注册、登录、权限管理、内容发布、评论互动等功能的模块。这些模块...
5. **时间戳处理**:在采集过程中往往需要记录每篇文章或信息的发布时间,这部分配置则确保了时间戳被正确解析和存储。例如: - `isUnixTime='true' isDateTime='true'` 指定时间戳应转换为统一格式的时间数据。 6...
- **模板引擎**:介绍ThinkPHP5.0默认使用的模板引擎及自定义模板引擎的方法。 - **布局和继承**:解释如何使用布局文件统一页面样式,以及模板继承的概念。 - **变量传递**:演示如何将数据从控制器传递给视图层...
3. **数据库操作**:为了存储和检索用户提交的糗事,项目可能使用了MongoDB、MySQL等数据库,需要了解NoSQL或SQL的基本概念和操作。 4. **前端技术**:HTML、CSS和JavaScript(可能包括React、Vue或Angular等库/框架...