介紹
從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 本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須註明文章來源,且在文章開頭明顯處給明連結。 《歡迎交流討論》 |