mysql tokudb myisam

编程入门 行业动态 更新时间:2024-10-11 13:19:04

<a href=https://www.elefans.com/category/jswz/34/1771279.html style=mysql tokudb myisam"/>

mysql tokudb myisam

MyISAM、Memory、TokuDB 等其余存储引擎

紧接上一小节,本小节重点介绍 MyISAM、Memory、TokuDB 的特性。

1. MyISAM

在 MySQL 5.5 之前的版本,MyISAM 是默认的存储引擎。MyISAM 提供了全文索引、压缩、空间函数(GIS)等特性,但 MyISAM 不支持事务和行级锁,而且 MyISAM 没有 crash-safe 的能力。MySQL 5.6之后,MyISAM已经越来越少被使用。

Tips: crash-safe 指数据库发生故障重启,之前提交的数据不会丢失。

1.1 MyISAM特性

加锁与并发

MyISAM 可以对整张表加锁,而不是针对行。读数时会对表加共享锁,写入时对表加排它锁。在表有读取查询的同时,也可以对表进行插入数据。

延迟更新索引键

创建 MyISAM 表时,可以指定 DELAY_KEY_WRITE 选项,在每次更新完成时,不会马上将更新的索引数据写入磁盘,而是先写到内存中的键缓冲区,当清理键缓冲区或关闭表的时候,才将对应的索引块写入磁盘。这种方式可以极大地提升写入性能。

压缩

可以使用 myisampack 工具对 MyISAM 表进行压缩。压缩表可以极大地减少磁盘空间使用,从而减少磁盘 IO,提升查询性能。压缩表时不能进行数据的修改。表中的记录是独立压缩的,读取单行时,不需要解压整个表。

一般来说,如果数据在插入之后,不再进行修改,这种表比较适合进行压缩,如日志记录表、流水记录表。

修复

针对 MyISAM 表,MySQL 可以手工或自动执行检查和修复操作。执行表的修复可能会导致丢失一些数据,而且整个过程非常缓慢。

可以通过check table xxx检查表的错误,如果有错误,则通过repair table xxx进行修复。在 MySQL 服务器关闭的情况下,也可以通过 myisamchk 命令行工具进行检查和修复操作。

mysql> create table t1(

-> c1 int not null,

-> c2 varchar(10) default null

-> ) engine = myisam;

Query OK, 0 rows affected (0.06 sec)

mysql> check table t1;

+-----------+-------+----------+----------+

| Table | Op | Msg_type | Msg_text |

+-----------+-------+----------+----------+

| tempdb.t1 | check | status | OK |

+-----------+-------+----------+----------+

1 row in set (0.00 sec)

mysql> repair table t1;

+-----------+--------+----------+----------+

| Table | Op | Msg_type | Msg_text |

+-----------+--------+----------+----------+

| tempdb.t1 | repair | status | OK |

+-----------+--------+----------+----------+

1 row in set (0.00 sec)

1.2 存储方式

MyISAM 在磁盘中存储成 3 个文件,文件名和表名相同

.frm-存储表定义 ;

.MYD-存储数据;

.MYI-存储索引。

下面为 MyISAM 表的创建语句,及相应的数据文件:

mysql> create table a (id int) ENGINE = MyISAM;

Query OK, 0 rows affected (0.01 sec)

[root@mysql-test-1 tempdb]# ls -lrt a.*

-rw-r----- 1 mysql mysql 8556 Apr 13 02:01 a.frm

-rw-r----- 1 mysql mysql 1024 Apr 13 02:01 a.MYI

-rw-r----- 1 mysql mysql 0 Apr 13 02:01 a.MYD

2. Memory

Memory 使用内存中的内容来创建表,每个 Memory 表只有一个 .frm 文件。如果需要快速访问数据,并且数据不会被修改,丢失也没有关系,使用 Memory 是非常适合的。而且 Memory 表支持 Hash 索引,查找操作非常快。

即便如此,Memory 表也无法取代基于磁盘的表

Memory 表是表级锁,并发写的性能较差;

不支持BLOB或TEXT类型的列,并且每行的长度是固定的,即使指定了varchar列,实际存储也会使用char列。

一般来说,Memory 表比较适合以下场景:

用于查找或映射表,如邮编、省市区等变化不频繁的表;

用于缓存周期性聚合数据的表;

用于统计操作的中间结果表。

3. TokuDB

除了 MySQL 自带的存储引擎之外,还有一些常见的第三方存储引擎,如列式存储引擎 Infobright、高写性能和高压缩的 TokuDB。TokuDB 是一个高效写入、高压缩率、高扩展性、支持事务处理的存储引擎,最新的版本可以在 Percona Server for MySQL 中使用。

下图是官方给出的 TokuDB 与 InnoDB 的对比:

官方给出的 TokuDB 与 InnoDB 的对比

一般来说,TokuDB比较适用以下场景:

访问频率不高的数据或历史数据归档;

数据表非常大并且时不时还需要进行DDL操作。

4. 小结

本节主要学习了 MyISAM、Memory、TokuDB 这三种存储引擎。本节课程的重点如下:

MyISAM 的特性主要包括:加锁与并发、延迟更新索引键、压缩和修复等;

Memory 查找数据的效率非常高,但是写的性能很差;

TokuDB 属于第三方存储引擎,拥有高写性能和高压缩的特性。

更多推荐

mysql tokudb myisam

本文发布于:2024-02-27 15:27:13,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1707119.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:mysql   tokudb   myisam

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!