现在我们来看看另外一种存储引擎,Archive存储引擎,Archive会缓存所有的写,并且利用对插入的行进行压缩,
所以Archive存储引擎比MYISAM的表更加节约磁盘的IO,对于同样数量级的数据,Archive比MYISAM,Innodb更加节省
磁盘空间,如果把数据存储到Archive存储引擎中呢,可能只需要几百兆的存储空间,就可以了,Archive存储的表呢,
文件是以ARZ为后缀的文件,另外和其他存储引擎一样,Archive存储引擎呢,也存在一个以frm为后缀的文件,用于
存储这种表的结构信息,这就是Archive在文件系统中,存储的一些特点,那我们接下来看看存储引擎在功能上有哪些特点
首先和MYISAM,Innodb最大的不同在于,Archive支持insert和select操作,Archive存储引擎支持行级锁,
和缓冲区,所以可以实现高并发的插入,这种存储引擎在某些方面,模仿了事务引擎的一些特点,但是Archive本身
并不是一个事务的存储引擎,这个存储引擎的第二个特点呢,只支持在自增ID列上建立的索引,而无法在其他列上
建立的索引,下面我们你还是回到我们的演示系统中,来看一下Archive存储引擎的具体表现,我们切换到我们的演示
系统中
同样我们还是要建立一个Archive表,表名就以myarchive命名吧,首先我们要加入一列id列,这个id列是具有自增属性的,
我们前面说到了,它是可以在自增列上来建立索引的,所以我们要来验证这一点,另外还有一个c1列,它是varchar的这个列,
还有一个c2列,这个列是char的列,同时我要指定他的索引,是id,并且我们使用的是Archive存储引擎,这个时候我们就完成了
表的建立工作
create table myarchive(id int auto_increment not null,c1 varchar(10),c2 char(10),key(id))
engine=archive;
这里我们有两点需要注意,其实刚才已经说过了,第一种就是我们建立的id列,这一列是有自增属性的,而在
MYSQL的create语句中呢,自增的列都是需要写在索引中的,所以我们在建表的同时呢,指定了我们的索引,
另外呢存储引擎呢,是Archive存储引擎,我们已经指定了存储引擎的类型,建立好这个表之后呢,我们可以先看
一下这个表是如何存储的,我们可以看到,以myarchive为开头的文件有哪些呢
ls -lh myarchive.*
一共只有两个,这跟我们刚才的想法是一样的,首先一个是以ARZ为结尾的文件呢,这个用来存储数据的一个文件,
除了ARZ文件呢,另一个文件就是frm文件,这个文件之前已经说了很多次了,就是MYSQL服务器层用于存储表结构的
文件,下面我们再来看一下,Archive存储引擎功能上的一些特点,首先我们向这个表中插入一些数据,然后可以看
是否对这些数据进行一些更新操作,删除操作,首先我们随便来插入一些数据吧,那就是c1,c2两列,这个数据随便写
就好了,我们已经给这个表插入了两列数据
insert into myarchive(c1,c2) values('aa','bb'),('cc','dd');
我们对这个数据进行删除操作,看看是否可以达到我们的目的,大家可以看到,我们在删除这个表中的
一列数据时呢,他返回了一个1031的错误,说明这个表是不支持这种操作的
同样更新操作我们也要试一下,同样也会返回相同的错误
update myarchive set c1='aaaa' where id = 1;
这就验证了我们之前所说的,只支持insert和select操作,而对于更新和删除操作呢,它是不支持的,
那我们接下来看看他的另外一个特点就是,同样也返回1069的错误
create index idx_c1 on myarchive(c1);
这里对Archive引擎的功能的分析和演示呢,我们可以看一下适用的一些场景,我们可以知道,Achive存储引擎呢,
是无法在OLTP应用中使用的,他不支持对数据的修改,而我们OLTP中,一定会对数据进行修改的,但是对于数据仓库的
应用呢,或者一些特殊的表还是有用的,记录日志的表,或者日志采集类的表,由于这种表要存储大量的数据,所以就比较
适用于Archive存储引擎,Archive存储引擎在所有引擎中是占用最少的,但是还是要注意,即使是在日志采集和数据应用
中呢,Archive引擎也是无法对数据进行删除和更新的,所以在记录日志,我们同样要对数据进行修改的话,可能也无法使用
Archive存储引擎