• MySQL Archive存储引擎


    介绍

     从archive单词的解释我们大概可以明白这个存储引擎的用途,这个存储引擎基本上用于数据归档;它的压缩比非常的高,存储空间大概是innodb的10-15分之一所以它用来存储历史数据非常的适合,由于它不支持索引同时也不能缓存索引和数据,所以它不适合作为并发访问表的存储引擎。Archivec存储引擎使用行锁来实现高并发插入操作,但是它不支持事务,其设计目标只是提供高速的插入和压缩功能。

    特点

    每个archive表在磁盘上存在两个文件

    .frm(存储表定义)

    .arz(存储数据)

    1.archive存储引擎支持insert、replace和select操作,但是不支持update和delete。

    2.archive存储引擎支持blob、text等大字段类型。支持auto_increment自增列同时自增列可以不是唯一索引。

    3.archive支持auto_increment列,但是不支持往auto_increment列插入一个小于当前最大的值的值。

    4.archive不支持索引所以无法在archive表上创建主键、唯一索引、和一般的索引。

    存储

    往archive表插入的数据会经过压缩,archive使用zlib进行数据压缩,archive支持optimize table、 check table操作。

    一个insert语句仅仅往压缩缓存中插入数据,插入的数据在压缩缓存中被锁定,当select操作时会触发压缩缓存中的数据进行刷新。insert delay除外。

    对于一个bulk insert操作只有当它完全执行完才能看到记录,除非在同一时刻还有其它的inserts操作,在这种情况下可以看到部分记录,select从不刷新bulk insert除非在它加载时存在一般的Insert操作。

    检索

    对于检索请求返回的行不会压缩,且不会进行数据缓存;一个select查询会执行完整的表扫描;当一个select查询发生时它查找当前表所有有效的行,select执行一致性读操作,注意,过多的select查询语句会导致压缩插入性能变的恶化,除非使用bulk insert或delay insert,可以使用OPTIMIZE TABLE 或REPAIR TABLE来获取更好的压缩,可以使用SHOW TABLES STATUS查看ARCHIVE表的记录行。

     

    分区

    Archive存储引擎支持分区

    create table tb_archive(id int not null ,
    name varchar(30),
    address varchar(300),
    mark text)engine=archive;
    ALTER TABLE tb_archive 
    PARTITION BY RANGE(id) PARTITIONS 3( PARTITION part0 VALUES LESS THAN (5),  PARTITION part1 VALUES LESS THAN (10),  PARTITION part2 VALUES LESS THAN (MAXVALUE)) ;
    
    ALTER TABLE tb_archive 
    PARTITION BY LIST COLUMNS (name) (
        PARTITION a VALUES IN ('A','B'),
        PARTITION b VALUES IN ('C'),
        PARTITION c VALUES IN ('D')
    );
    
    ALTER TABLE tb_archive 
    PARTITION BY KEY(address)
    PARTITIONS 3;

    参考来自:http://dev.mysql.com/doc/refman/5.6/en/archive-storage-engine.html

    总结

    由于高压缩和快速插入的特点Archive非常适合作为日志表的存储引擎,但是前提是不经常对该表进行查询操作。

    备注:

        作者:pursuer.chen

        博客:http://www.cnblogs.com/chenmh

    本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接。

    《欢迎交流讨论》

  • 相关阅读:
    程序员必看书籍(转载)
    JBPM的ORACLE脚本
    XFire构建web service客户端的五种方式
    为什么中国出不了facebook和Twitter?
    用dwr封装表单项提交表单
    Java 程序员容易犯的10个SQL错误
    SQL语句优化方法30例
    sqlserver sql语句查看分区记录数、查看记录所在分区
    SQL Case when 的使用方法
    sqlserver sql语句附加 分离数据库
  • 原文地址:https://www.cnblogs.com/chenmh/p/5821844.html
Copyright © 2020-2023  润新知