文件系统存储特点:
- 以zlib对表数据进行压缩,磁盘I/O更少
- 数据存储在ARZ为后缀的文件中
Archiv存储引擎的特点
- 只支持insert和select操作(支持行级所和缓冲区,可以实现高并发的插入)
- 只允许在自增ID列上加索引
Archive表比MyISAM表要小大约75%,比支持事务处理的InnoDB表小大约83%。当数据量非常大的时候Archive的插入性能表现会较MyISAM为佳。
Archive表的性能是否可能超过MyISAM?答案是肯定的。根据MySQL工程师的资料,当表内的数据达到1.5GB这个量级,CPU又比较快的时候,Archive表的执行性能就会超越MyISAM表。因为这个时候,CPU会取代I/O子系统成为性能瓶颈。别忘了Archive表比其他任何类型的表执行的物理I/O操作都要少。
较小的空间占用也能在你移植MySQL数据的时候发挥作用。当你需要把数据从一台MySQL服务器转移到另一台的时候,Archive表可以方便地移植到新的MySQL环境,你只需将保存Archive表的底层文件复制过去就可以了。
实例:
建立一张表
MySQL [test]> create table myarchive( id int auto_increment not null , c1 varchar(10),c2 char(10),key(id)) engine = archive;
Query OK, 0 rows affected (0.06 sec)
查看文件系统
[root@wangerxiao test]# ls -lh myarchi*
-rw-r----- 1 mysql mysql 8.5K Mar 17 14:47 myarchive.ARZ
-rw-r----- 1 mysql mysql 8.5K Mar 17 14:47 myarchive.frm
ARZ文件存储表内容,frm文件存储表结构(MySQL服务器层)。
我们往数据表里插入一些数据
MySQL [test]> insert into myarchive (c1,c2) values ('aa','bb'),('cc','dd');
Query OK, 2 rows affected (0.02 sec)
Records: 2 Duplicates: 0 Warnings: 0
MySQL [test]> select * from myarchive;
+----+------+------+
| id | c1 | c2 |
+----+------+------+
| 1 | aa | bb |
| 2 | cc | dd |
+----+------+------+
2 rows in set (0.01 sec)
我们看到可以进行查询操作,现在看是否可以进行删除操作。
MySQL [test]> delete from myarchive where id = 1;
ERROR 1031 (HY000): Table storage engine for 'myarchive' doesn't have this option
更新操作
MySQL [test]> update myarchive set c1='aaaa' where id =1;
ERROR 1031 (HY000): Table storage engine for 'myarchive' doesn't have this option
我们接着查看是否可以在非自增键上创建索引
MySQL [test]> create index idx_c1 on myarchive(c1);
ERROR 1069 (42000): Too many keys specified; max 1 keys allowed
使用场景
日志和数据采集类应用(不支持OLTP)