MySQL内建的其他存储引擎

jopen 10年前

Archive 引擎:

    Archive存储引擎只支持INSERT和SELECT操作,在MySQL5.1之前也不支持索引。Archive引擎会缓存所有的写并利用zlib对插入的行进行压缩,所以比MyISAM表的磁盘I/O更少。但是每次SELECT查询都需要执行全表扫描。所以Archive表适合日志和数据采集类应用,这类应用做数据分析时往往需要全表扫描。或者在一些需要更快速的INSERT操作的场合下也可以使用。

    Archive引擎支持行级锁和专用的缓冲区,所以可以实现高并发的插入。在一个查询开始知道返回表中存在的所有行数之前,Archive 引擎会阻止其他的SELECT执行,以实现一致性读。另外,也实现了批量插入在完成之前对读操作是不可见的。这种机制模仿了事务和MVCC的一些特性。但 Archive引擎不是一个事务型的引擎,而是一个针对高速插入和压缩做了优化的简单引擎。


Blcakhole 引擎:

    Bleckhole引擎没有实现任何的存储机制,他会丢弃所有插入的数据,不作任何保存。但是服务器会记录Blackhole表的日志,所以可以用户复制数据到备库,或者只是简单地记录到日志。这种特殊的存储引擎可以在一些特殊的复制架构和日志审核时发挥作用。但这种应用方式我们碰到过很多问题,因此不推荐。


CSV 引擎:

    CSV引擎可以将普通的CSV文件(逗号分隔值得文件)作为MySQL的表来处理,但这种表不支持索引。CSV引擎可以再数据库运行时拷入或者拷出文件。可以将Excel等电子表格软件中的数据存储为CSV文件,然后复制到MySQL数据目录下,就嫩在MySQL中打开使用。同样,如果将数据写入到一个CSV引擎表,其他的外部程序也能立刻从表的数据文件中读取CSV格式的数据。因此CSV引擎可以作为一种数据交换的机制,非常有用。


Federated 引擎:

    Federated引擎是访问其他MySQL服务器的一种代理,他会创建一个到远程MySQL服务器的客户端连接,并将查询传输到远程服务器执行,然后提取或者发送需要的数据。最初设计该存储引擎是为了和企业级数据库如:Microsoft SQL Server 和 Oracle 的类似特性竞争的,可以说更多的是一种市场行为。尽管该引擎看起来提供了一种很好的跨域服务器的灵活性,但也经常带来问题,因此默认是禁用的。 MariaDB使用了他的一个后续改进版本,叫做FederatedX。


Memory 引擎:

    入股需要快速地访问数据,并且这些数据不会被修改,重启以后丢失也没有关系,那么使用Memory表(以前也叫做HEAP表)是非常有用的。Memory表至少比MyISAM表要快一个数量级,因为所有的数据都保存在内存中,不需要进行磁盘I/O。Memory表结构在重启以后还会保留,但数据会丢失。

    Memroy表在很多场景可以发挥好的作用:

        1、用于查找(lookup)或者映射(mapping)表,例如将邮编和州名映射的表。

        2、用于缓存周期性聚合数据(periodically aggregated data)的结果。

        3、用于保存数据分析中产生的中间数据。

    Memroy表支持Hash引擎,因此查找操作非常快。虽然Memory表的速度非常快,但还是无法取代传统的基于此盘的表。Memroy表是表级锁,因此并发写入的性能较低。它不支持BLOB或TEXT类型的列,并且每行的长度是固定的,所以即使制定了VARCHAR列,实际存储是也会转成CHAR,这可能导致部分内存的浪费(其中一些限制在Percona版本已经解决)。

    

Merge 引擎:

    Merge引擎是MyISAM引擎的一个变种。Merge表是由多个MyISAM表合并而来的虚拟表。如果将MySQL用于日志或者数据仓库类的应用,该引擎可以发挥作用。但是引入分区功能后,该引擎已经被放弃。


NDB 引擎:

    2003年,当时的MySQL AB公司从索尼爱立信公司收购了NDB数据库,然后开发了NDB集群存储引擎,作为SQL和NDB原生协议之间的接口。MySQL服务器、NDB集群存储引擎,以分布式的、share-nothing的、容灾的、高可用的NDB数据库的组合,被称为MySQL集群(MySQL Cluster)。