天天看点

MySQL存储引擎与适用场景详解(中)5 BLACKHOLE - 黑洞引擎ARCHIVE

5 BLACKHOLE - 黑洞引擎

支持事务,而且支持mvcc的行级锁,写入这种引擎表中的任何数据都会消失,主要用于做日志记录或同步归档的中继存储,该存储引擎除非有特别目的,否则不适合使用。

适用场景1

使用BLACKHOLE存储引擎的表不存储任何数据,但如果mysql启用了二进制日志,SQL语句被写入日志(并被复制到从服务器)。这样使用BLACKHOLE存储引擎的mysqld可以作为主从复制中的中继重复器或在其上面添加过滤器机制。例如,假设你的应用需要从服务器侧的过滤规则,但传输所有二进制日志数据到从服务器会导致较大的网络流量。在这种情况下,在主服务器主机上建立一个伪从服务器进程。

MySQL存储引擎与适用场景详解(中)5 BLACKHOLE - 黑洞引擎ARCHIVE

场景2:

如果配置一主多从的话,多个从服务器会在主服务器上分别开启自己相对应的线程,执行binlogdump命令而且多个此类进程并不是共享的。为了避免因多个从服务器同时请求同样的事件而导致主机资源耗尽,可以单独建立一个伪的从服务器或者叫分发服务器。

MySQL存储引擎与适用场景详解(中)5 BLACKHOLE - 黑洞引擎ARCHIVE

ARCHIVE

区别于InnoDB和MyISAM,ARCHIVE提供压缩功能,拥有高效地插入。

但不支持索引,所以查询性能较差。

支持insert、replace和select操作,不支持update和delete。

适用场景

数据归档

压缩比非常高,存储空间大概是innodb的10-15分之一,所以存储历史数据非常适合,由于不支持索引也不能缓存索引和数据,不适合作为并发访问表。

日志表

因为高压缩和快速插入的特点。

但前提是不经常对该表进行查询。

PERFORMANCE_SCHEMA:

该引擎主要用于收集数据库服务器性能参数。这种引擎提供以下功能:提供进程等待的详细信息,包括锁、互斥变量、文件信息;保存历史的事件汇总信息,为提供MySQL服务器性能做出详细的判断;对于新增和删除监控事件点都非常容易,并可以随意改变mysql服务器的监控周期,例如(CYCLE、MICROSECOND)。 MySQL用户是不能创建存储引擎为PERFORMANCE_SCHEMA的表。

场景: DBA能够较明细得了解性能降低可能是由于哪些瓶颈。

Merge

Merge允许将一组使用MyISAM存储引擎的并且表结构相同(即每张表的字段顺序、字段名称、字段类型、索引定义的顺序及其定义的方式必须相同)的数据表合并为一个表,方便了数据的查询。

场景:MySQL中没有物化视图,视图的效率极低,故数据仓库中数据量较大的每天、每周或者每个月都创建一个单一的表的历史数据的集合可以通过Merge存储引擎合并为一张表。

Federated

该存储引擎可以 将不同的MySQL服务器联合起来,逻辑上组成一个完整的数据库。非常适合数据库分布式应用。

可以使你在本地数据库中访问远程数据库中的数据,针对federated存储引擎表的查询会被发送到远程数据库的表上执行,本地不存储任何数据。

场景: dblink。

MySQL存储引擎与适用场景详解(中)5 BLACKHOLE - 黑洞引擎ARCHIVE

缺点

  1. 对本地虚拟表的结构修改,并不会修改远程表的结构
  2. truncate 命令,会清除远程表数据
  3. drop命令只会删除虚拟表,并不会删除远程表
  4. 不支持 alter table 命令
  5. select count(*), select * from limit M, N 等语句执行效率非常低,数据量较大时存在严重问题,但若按主键或索引列查询,则很快,如以下查询就非常慢(假设 id 为主索引)
select id from db.tablea where id >100 limit 10 ;
      

而以下查询就很快:

select id from db.tablea where id >100 and id<150      

如果虚拟虚拟表中字段未建立索引,而实体表中为此字段建立了索引,此种情况下,性能也相当差。但是当给虚拟表建立索引后,性能恢复正常。

类似 where name like "str%" limit 1 的查询,即使在 name 列上创建索引,也会导致查询过慢,是因为federated会将所有满足条件的记录读取到本地,再进行 limit 处理。