ARCHIVE ストレージエンジンは、小さい容量の中に大量のデータをインデックスなしで記憶しておく為に使われます。
ARCHIVE ストレージエンジンはMySQLの2極分布に含まれています。ソースからMySQLを構築し このストレージエンジンの機能を有効にするには、--with-archive-storage-engine オプションの configure コマンドを呼び出します。
ARCHIVE エンジンのソースを調べるには、MySQL ソースディストリビューションの storage/archive ディレクトリを検索します。
このステートメントを使って ARCHIVE ストレージエンジンが有効かどうかを調べる事が出来ます。
mysql> SHOW VARIABLES LIKE 'have_archive';
ARCHIVE テーブルを作成すると、サーバーはデータベースのディレクトリ上にテーブル形式のファイルを作成します。ファイルはテーブル名から始まり .frm 拡張子が付きます。ストレージエンジンはその他のファイルを作成し、それら全てはテーブル名で始まる名前を持ちます。データとメタデータファイルはそれぞれ .ARZ と .ARM という拡張子を持ちます。最適化作業の最中に .ARN ファイルが現れる事があります。
ARCHIVE エンジンは INSERT と SELECT をサポートしますが、DELETE と REPLACE そして UPDATE はサポートしません。また、基本的に ORDER BY オペレーション、 BLOB カラム、そして空間データタイプ (MySQL Spatial Data Typesを参照) 以外の全てをサポートします。ARCHIVE エンジンは低レベルロッキングを使用します。
MySQL 5.1.6にもあるように ARCHIVE ンジンは AUTO_INCREMENT カラム属性をサポートします。AUTO_INCREMENT カラムは固有、または固有で無いインデックスの両方を持つ事が出来ます。それ以外のコラムにインデックスを作成しようとしてもエラーが発生します。ARCHIVE エンジンは、 CREATE TABLE や ALTER TABLE ステートメントの中の AUTO_INCREMENT テーブルオプションを新しいテーブルの初期シーケンス値を指示する為や、既に存在するテーブルのシーケンス値を再設定する時に、それぞれをサポートします。
MySQL 5.1.6にあるように、ARCHIVE エンジンは、BLOB カラムが要求されていない時や読み取り中にスキャンがパスした時はそれらを無視します。以前は次の二つのステートメントは同等のコストでしたが、5.1.6では2つ目が1つ目よりも大変効率的になりました。
SELECT a, b, blob_col FROM archive_table; SELECT a, b FROM archive_table;
保存: 挿入されると行は圧縮されます。ARCHIVE エンジンは zlib ロスレスデータ圧縮を使用しています (http://www.zlib.net/を参照)。OPTIMIZE TABLE テーブルを分析し、それをもっと小さいフォーマットにまとめる為に (OPTIMIZE TABLE を利用する理由に関しては、このセクションの後半を参照して下さい。) このエンジンは CHECK TABLEもサポートしています。次のような何種類かの挿入方法が使用されています。
INSERT ステートメントが行を圧縮バッファに押し入れ、そのバッファは必要に応じてフラッシュします。バッファへの挿入はロックによって保護されます。SELECT は、INSERT DELAYED (必要に応じてフラッシュする) だけが挿入された場合を除いて、強制的にフラッシュを発生させます。詳細は INSERT DELAYED Syntaxをご覧ください。
大量挿入は、他の挿入が同時に行われなければ、完了後にだけ見えるようになります。SELECT は、ロード中に通常挿入が行われない限り、大量挿入をフラッシュする事はありません。
取り出し:取り出しの際、要求によって行が解凍されます。行キャッシュはありません。SELECT 操作によって完全なテーブルスキャンを実行する事が出来ます。SELECT 操作は、現在いくつの行が有効かを見つけその行数を読み取ります。SELECT 操作は一貫した読み取りとして実行されます。大量挿入または遅延挿入が使用された場合以外は、挿入の最中の多くの SELECT ステートメントが圧縮の質を低下させる事があると覚えておいて下さい。圧縮の質を高めるには、 OPTIMIZE TABLE か REPAIR TABLEを使う事が出来ます。SHOW TABLE STATUS によって報告される ARCHIVE テーブルの行数はいつも正確です。OPTIMIZE TABLE Syntax、REPAIR TABLE Syntax、SHOW TABLE STATUS Syntaxを参照して下さい。
追加情報
ARCHIVE ストレージエンジンを専門に扱うフォーラムがあります。 http://forums.mysql.com/list.php?112.
