1,文件系统存储特点
会缓存所有的写并且利用zlib对插入的行进行压缩,所以Archive搜索引擎比MyISAM存储引擎的表,更加节约磁盘I/O,对于同样数量级的数据,Archive存储引擎比MyISAM、InnoDB更加节约存储空间,一个几T的数据表数据存储到Archive存储引擎表中,可能只需要几百兆的存储空间就可以了;
Archive存储引擎数据文件都是ARZ为后缀文件,另外的和其他存储引擎一样,Archive存储引擎也存在一个以frm为后缀的文件,用于存储这种表的结构信息,这就是Archive存储引擎在文件系统中存储的一些特点。
2,Archive存储引擎特点
只支持insert和select操作【Archive存储引擎支持行级锁和专用的缓冲区,可以实现并发的插入,这种存储引擎在某些方面的模仿了事务存储引擎的一些特点,但是Archive本身并不是一种是事务的存储引擎】
只允许在自增的ID上加索引
3,Linux命令操作演示
创建myarchive表
有两点需要注意:
mysql> 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.00 sec
# 1、建立的ID列是具有自增属性,在Mysql中自增的类都是要求在索引中的,建表的同时指定索引
# 2、利用engine指定存储类型
到文件系统中来看一下这个表的是如何存储的:
[root@localhost test]# ls -lh myarchive.*
-rw-rw----. 1 mysql mysql 8.5K 2月 20 10:49 myarchive.ARZ
-rw-rw----. 1 mysql mysql 8.5K 2月 20 10:49 myarchive.frm
[root@localhost test]#
# arz 存储数据
# frm 存储表结构
插入数据
mysql> insert into myarchive (c1,c2) values ('aa','bb'),('cc','dd');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from myarchive;
+----+------+------+
| id | c1 | c2 |
+----+------+------+
| 1 | aa | bb |
| 2 | cc | dd |
+----+------+------+
2 rows in set (0.00 sec)
数据删除操作
mysql> delete from myarchive where id = 1;
ERROR 1031 (HY000): Table storage engine for 'myarchive' doesn't have this option
# 表示不支持删除
数据更新操作
mysql> update myarchive set c1='aaaa' where id =1;
ERROR 1031 (HY000): Table storage engine for 'myarchive' doesn't have this option
# 表示不支持更新
在非自增字段建立索引
mysql> create index idx_c1 on myarchive(c1);
ERROR 1069 (42000): Too many keys specified; max 1 keys allowed
# 只支持在自增ID建立索引
4,使用场景
是无法在OLTP类的应用中所使用的,因为它不支持对数据的修改,而OLTP中一定会对数据进行修改,对于一些数据仓库的应用,或者一些特殊的表,如:记录日志类的表或者数据采集的表,由于会要存储大量的数据,就比较适合Archive存储引擎,存储空间占用最小。
注意:即使是在日志采集和数据的应用中,Archive存储引擎也是无法进行数据的删除和更新的。