首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL Archive 存儲引擎:高壓縮日志歸檔專用引擎深度解析

     編輯:MySQL 綜合教學

Archive 引擎:極致壓縮、高速寫入、不可更新的歸檔利器

Archive 引擎專為數據歸檔、日志存儲設計,壓縮比達 InnoDB 的 1/10~1/15,犧牲索引與更新能力,換取極致存儲效率。

核心特性速覽

特性支持說明
INSERT / REPLACE / SELECT✅核心操作
UPDATE / DELETE❌不支持,數據不可變
索引(主鍵/唯一/普通)❌全表掃描查詢
事務❌無 ACID 保證
壓縮算法zlib行級壓縮,插入時壓縮
鎖機制行鎖高並發插入無阻塞
AUTO_INCREMENT✅可非唯一,不允許插入小於當前最大值
BLOB/TEXT✅支持大字段
分區表✅RANGE/LIST/KEY/HASH 全支持

文件結構

  • .frm:表定義
  • .ARZ:壓縮數據文件(zlib 流式壓縮)

寫入與讀取機制

  • 插入:數據先進壓縮緩存,SELECT 或 FLUSH TABLE 觸發刷盤
  • 批量插入:完成前不可見,除非並行有普通 INSERT
  • 查詢:全表掃描,返回行不壓縮、不緩存,頻繁 SELECT 拖慢插入性能
  • 優化:OPTIMIZE TABLE / REPAIR TABLE 重建壓縮,SHOW TABLE STATUS 查行數

分區表示例


CREATE TABLE tb_archive (
  id INT NOT NULL,
  name VARCHAR(30),
  address VARCHAR(300),
  mark TEXT
) ENGINE=ARCHIVE;

-- RANGE 分區
ALTER TABLE tb_archive PARTITION BY RANGE(id) (
  PARTITION p0 VALUES LESS THAN (5),
  PARTITION p1 VALUES LESS THAN (10),
  PARTITION p2 VALUES LESS THAN (MAXVALUE)
);

-- LIST 分區
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')
);

-- KEY 分區
ALTER TABLE tb_archive PARTITION BY KEY(address) PARTITIONS 3;

適用與禁用場景

✅ 適用❌ 禁用
應用訪問日志、審計日志、錯誤日志需要 UPDATE/DELETE 的業務表
監控指標歷史數據、埋點數據需索引加速查詢的表
合規歸檔數據(寫一次、查極少)高併發讀取場景
大幅度壓縮歷史分區表事務一致性要求場景

生產建議

  1. 僅作為寫入極其頻繁、查詢極少的日志表引擎
  2. 配合分區表按時間滾動歸檔,定期 DROP PARTITION 清理過期數據
  3. 查詢需求增長時,遷移至 InnoDB + 壓縮頁(ROW_FORMAT=COMPRESSED)或 ClickHouse/Elasticsearch
  4. 備份策略:mysqldump --single-transaction 或直接複製 .ARZ/.frm 文件(需同版本 MySQL 恢復)

Archive 是「寫時只讀」場景的極致優化選擇,用對場景省 90% 存儲成本。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved