15.5 ARCHIVE 存储引擎

ARCHIVE存储引擎生成专用 table,这些 table 以很小的空间存储大量未索引的数据。

table15.5 ARCHIVE 存储引擎功能

FeatureSupport
B-tree indexesNo
备份/时间点恢复 (在服务器中而不是在存储引擎中实现.)Yes
集群数据库支持No
Clustered indexesNo
Compressed dataYes
Data cachesNo
Encrypted data是(通过加密功能在服务器中实现.)
外键支持No
全文搜索索引No
地理空间数据类型支持Yes
地理空间索引支持No
Hash indexesNo
Index cachesNo
Locking granularityRow
MVCCNo
复制支持 (在服务器中而不是在存储引擎中实现.)Yes
Storage limitsNone
T-tree indexesNo
TransactionsNo
更新数据字典的统计信息Yes

ARCHIVE存储引擎包含在 MySQL 二进制发行版中。如果要从源代码构建 MySQL,则要启用此存储引擎,请使用-DWITH_ARCHIVE_STORAGE_ENGINE选项调用 CMake

要检查ARCHIVE引擎的源,请查看 MySQL 源分发的storage/archive目录。

您可以使用SHOW ENGINES语句检查ARCHIVE存储引擎是否可用。

创建ARCHIVEtable 时,服务器将在数据库目录中创建 table 格式文件。该文件以 table 名开头,extensions 为.frm。存储引擎创建其他文件,所有文件的名称均以 table 名开头。数据文件的 extensions 为.ARZ.ARN文件可能在优化操作期间出现。

ARCHIVE引擎支持INSERTREPLACESELECT,但不支持DELETEUPDATE。它确实支持ORDER BY操作,BLOB列以及基本上所有的数据类型,包括空间数据类型(请参见第 11.4.1 节“空间数据类型”)。不支持地理空间参考系统。 ARCHIVE引擎使用行级锁定。

ARCHIVE引擎支持AUTO_INCREMENT列属性。 AUTO_INCREMENT列可以具有唯一索引或非唯一索引。尝试在其他任何列上创建索引都会导致错误。 ARCHIVE引擎还支持CREATE TABLE语句中的AUTO_INCREMENT table 选项,以分别为新 table 指定初始序列值或为现有 table 重置序列值。

ARCHIVE不支持将小于当前最大列值的值插入AUTO_INCREMENT列。尝试这样做会导致ER_DUP_KEY错误。

如果不要求BLOB列,则ARCHIVE引擎将忽略它们,并在读取时扫描经过它们。

存储: 行在插入时被压缩。 ARCHIVE引擎使用zlib无损数据压缩(请参见http://www.zlib.net/)。您可以使用OPTIMIZE TABLE分析 table 并将其打包为较小的格式(由于使用OPTIMIZE TABLE的原因,请参阅本节后面的内容)。该引擎还支持CHECK TABLE。有几种插入类型:

  • INSERT语句只是将行推入压缩缓冲区,然后根据需要刷新该缓冲区。插入缓冲区受锁保护。 SELECT会强制进行刷新。

  • 批量插入仅在完成后才可见,除非同时发生其他插入,在这种情况下可以部分看到。 SELECT永远不会引起批量插入的刷新,除非在加载时发生普通插入。

检索 :检索时,按需解压缩行;没有行缓存。 SELECT操作执行完整的 table 扫描:发生SELECT时,它将找出当前可用的行数并读取该行数。 SELECT作为一致读取执行。请注意,除非仅使用批量插入或延迟插入,否则在插入过程中使用大量SELECT语句可能会使压缩性能恶化。为了获得更好的压缩效果,可以使用OPTIMIZE TABLEREPAIR TABLE显示 table 格状态报告的ARCHIVEtable 中的行数始终准确。参见第 13.7.2.4 节“ OPTIMIZE TABLE 语句”第 13.7.2.5 节“ REPAIR TABLE 语句”第 13.7.5.36 节“ SHOW TABLE STATUS 语句”

Additional Resources