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
カラム、そして空間データタイプ (項16.4.1. 「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
(必要に応じてフラッシュする) だけが挿入された場合を除いて、強制的にフラッシュを発生させます。詳しくは項12.2.4.2. 「INSERT DELAYED
構文」を参照してください。
大量挿入は、他の挿入が同時に行われなければ、完了後にだけ見えるようになります。SELECT
は、ロード中に通常挿入が行われない限り、大量挿入をフラッシュする事はありません。
取り出し:取り出しの際、要求によって行が解凍されます。行キャッシュはありません。SELECT
操作によって完全なテーブルスキャンを実行する事が出来ます。SELECT
操作は、現在いくつの行が有効かを見つけその行数を読み取ります。SELECT
操作は一貫した読み取りとして実行されます。大量挿入または遅延挿入が使用された場合以外は、挿入の最中の多くの
SELECT
ステートメントが圧縮の質を低下させる事があると覚えておいて下さい。圧縮の質を高めるには、
OPTIMIZE TABLE
か REPAIR
TABLE
を使う事が出来ます。SHOW TABLE
STATUS
によって報告される
ARCHIVE
テーブルの行数はいつも正確です。項12.5.2.5. 「OPTIMIZE TABLE
構文」、項12.5.2.6. 「REPAIR TABLE
構文」、項12.5.4.27. 「SHOW TABLE STATUS
構文」を参照して下さい。
追加情報
ARCHIVE
ストレージエンジンを専門に扱うフォーラムがあります。
http://forums.mysql.com/list.php?112.