MySQL存储引擎体系结构概述
MySQL可插拔存储引擎体系结构使数据库专业人员可以为特定的应用程序需求选择专用的存储引擎,同时完全不受管理任何特定应用程序编码要求的需要。MySQL服务器体系结构将应用程序程序员和DBA与存储级别上的所有低级实现细节隔离开来,从而提供了一致且简单的应用程序模型和API。因此,尽管跨不同的存储引擎具有不同的功能,但应用程序不受这些差异的影响。
可插拔存储引擎体系结构提供了在所有基础存储引擎中通用的一组标准管理和支持服务。存储引擎本身是数据库服务器的组件,它们实际上对在物理服务器级别维护的基础数据执行操作。
这种高效的模块化体系结构为那些希望专门针对特定应用程序需求(例如数据仓库,事务处理或高可用性情况)的用户提供了巨大的好处,同时享有利用独立于任何一个的一组接口和服务的优势存储引擎。
应用程序程序员和DBA通过存储引擎上方的连接器API和服务层与MySQL数据库交互。如果应用程序更改带来了要求基础存储引擎更改的要求,或者添加了一个或多个存储引擎来支持新需求,则无需进行重大编码或流程更改即可使工作正常进行。MySQL服务器体系结构通过提供适用于整个存储引擎的一致且易于使用的API,使应用程序免受存储引擎的潜在复杂性的影响。
可插拔存储引擎体系结构
MySQL Server使用可插拔的存储引擎体系结构,使存储引擎可以加载到正在运行的MySQL服务器或从正在运行的MySQL服务器上卸载。
插入存储引擎
在使用存储引擎之前,必须使用该INSTALL PLUGIN
语句将存储引擎插件共享库加载到MySQL中。例如,如果将EXAMPLE
引擎插件命名为example
并将共享库命名为ha_example.so
,则可以使用以下语句加载它:
INSTALL PLUGIN exampleSONAME 'ha_example.so';
要安装可插入存储引擎,插件文件必须位于MySQL插件目录中,并且发出该INSTALL PLUGIN
语句的用户必须INSERT
对该mysql.plugin
表具有特权。
共享库必须位于MySQL服务器插件目录中,该位置由plugin_dir
系统变量指定。
拔出存储引擎
要拔出存储引擎,请使用以下UNINSTALL PLUGIN
语句:
UNINSTALL PLUGIN example;
如果拔出现有表所需的存储引擎,则这些表将变得不可访问,但仍将存在于磁盘上(如果适用)。拔出存储引擎之前,请确保没有使用存储引擎的表。
通用数据库服务器层
MySQL可插拔存储引擎是MySQL数据库服务器中的组件,负责执行数据库的实际数据I / O操作,以及启用和实施针对特定应用程序需求的某些功能集。使用特定存储引擎的主要好处是,仅为您提供了特定应用程序所需的功能,因此数据库中的系统开销较小,最终结果是效率更高和数据库性能更高。这就是一直以来众所周知的MySQL具有如此高性能,在行业标准基准测试中与专有的单片数据库相匹配或胜过的原因之一。
从技术角度来看,存储引擎中有哪些独特的支持基础架构组件?一些主要功能差异包括:
- 并发性:某些应用程序比其他应用程序具有更精细的锁定要求(例如行级锁定)。选择正确的锁定策略可以减少开销,从而提高整体性能。该区域还包括对功能的支持,例如多版本并发控制或“快照”读取。
- 交易支持:并非每个应用程序都需要交易,但是对于那些交易,有非常明确的要求,例如ACID合规性等等。
- 引用完整性:要求服务器通过DDL定义的外键强制执行关系数据库引用完整性。
- 物理存储:涉及表和索引的整个页面大小以及用于将数据存储到物理磁盘的格式的所有内容。
- 索引支持:不同的应用场景往往会受益于不同的索引策略。每个存储引擎通常都有自己的索引方法,尽管有些(例如B树索引)对于几乎所有引擎都是通用的。
- 内存缓存:不同的应用程序对某些内存缓存策略的响应要比其他应用程序更好,因此,尽管某些内存缓存对于所有存储引擎都是通用的(例如用于用户连接的那些),但只有在使用特定的存储引擎时才对其他缓存进行唯一定义。
- 性能帮助:这包括多个I / O线程,用于并行操作,线程并发,数据库检查点,批量插入处理等。
- 杂项目标功能:这可能包括对地理空间操作的支持,对某些数据操作操作的安全限制以及其他类似功能。
每组可插拔存储引擎基础结构组件旨在为特定应用程序提供一组选择性的好处。相反,避免使用一组组件功能有助于减少不必要的开销。可以理解,理解特定应用程序的一组需求并选择合适的MySQL存储引擎可能会对整体系统效率和性能产生巨大影响。