ARCHIVE
ストレージエンジンは、非常に小さなフットプリントに大量のインデックス化されていないデータを格納する、特別な目的のテーブルを作成します。
表 15.5 ARCHIVE ストレージエンジンの機能
機能 | Support |
---|---|
B ツリーインデックス | いいえ |
MVCC | いいえ |
T ツリーインデックス | いいえ |
インデックスキャッシュ | いいえ |
クエリーキャッシュのサポート | はい |
クラスタデータベースのサポート | いいえ |
クラスタ化されたインデックス | いいえ |
ストレージの制限 | なし |
データキャッシュ | いいえ |
データディクショナリ向け更新統計 | はい |
トランザクション | いいえ |
ハッシュインデックス | いいえ |
バックアップ/ポイントインタイムリカバリ (ストレージエンジン内ではなくサーバー内で実装されています。) | はい |
レプリケーションのサポート (ストレージエンジン内ではなくサーバー内で実装されています。) | はい |
ロック粒度 | テーブル |
全文検索インデックス | いいえ |
圧縮データ | はい |
地理空間インデックスのサポート | いいえ |
地理空間データ型のサポート | はい |
外部キーのサポート | いいえ |
暗号化データ (ストレージエンジン内ではなくサーバー内で (暗号化関数を使って) 実装されています。) | はい |
ARCHIVE
ストレージエンジンは MySQL バイナリ配布に含まれています。ソースから MySQL を構築する場合にこのストレージエンジンを有効にするには、CMake を -DWITH_ARCHIVE_STORAGE_ENGINE
オプションで呼び出します。
ARCHIVE
エンジンのソースを調べるには、MySQL ソース配布の storage/archive
ディレクトリを検索します。
ARCHIVE
ストレージエンジンが SHOW ENGINES
ステートメントで使用できるかどうかを確認できます。
ARCHIVE
テーブルを作成するときに、サーバーはデータベースディレクトリにテーブル形式ファイルを作成します。ファイルはテーブル名から始まり .frm
拡張子が付きます。ストレージエンジンはほかのファイルを作成します。そのすべてのファイル名はテーブル名で始まります。データファイルの拡張子は .ARZ
です。最適化操作中に .ARN
ファイルが現れる場合があります。
ARCHIVE
エンジンは INSERT
と SELECT
をサポートしていますが、DELETE
、REPLACE
、または UPDATE
をサポートしていません。ORDER BY
操作、BLOB
カラム、基本的に空間データ型を除くすべてのデータ型をサポートしています (セクション11.5.1「空間データ型」を参照してください)。ARCHIVE
エンジンは低レベルロックを使用します。
ARCHIVE
エンジンは AUTO_INCREMENT
カラム属性をサポートしています。AUTO_INCREMENT
カラムには、一意のインデックスまたは一意でないインデックスのどちらかを付けることができます。ほかのカラムにインデックスを作成しようとすると、エラーになります。ARCHIVE
エンジンは、それぞれ、新しいテーブルの最初のシーケンス値を指定したり、既存テーブルのシーケンス値をリセットしたりする CREATE TABLE
ステートメントの AUTO_INCREMENT
テーブルオプションもサポートしています。
ARCHIVE
は、現在の最大カラム値未満の値を AUTO_INCREMENT
カラムに挿入する機能をサポートしていません。そのようにしようとすると、ER_DUP_KEY
エラーになります。
ARCHIVE
エンジンは BLOB
カラムが要求されない場合はそれらを無視して、読み取り中にそれらを通り過ぎてスキャンします。
ストレージ: 行は挿入されるときに圧縮されます。ARCHIVE
エンジンは zlib
ロスレスデータ圧縮を使用します (http://www.zlib.net/を参照してください)。OPTIMIZE TABLE
を使用してテーブルを解析したり、より小さいフォーマットにテーブルを圧縮したりできます (OPTIMIZE TABLE
を利用する理由については、このセクションの後半を参照して下さい)。このエンジンは CHECK TABLE
もサポートしています。使用される挿入のタイプはいくつかあります。
INSERT
ステートメントは行を圧縮バッファーに単純に入れ、バッファーは必要に応じてフラッシュします。バッファーへの挿入はロックで保護されています。SELECT
は、入ってきた挿入がINSERT DELAYED
(必要に応じてフラッシュ) だけだった場合を除いて、強制的にフラッシュを発生させます。セクション13.2.5.2「INSERT DELAYED 構文」を参照してください。大量挿入は、ほかの挿入が同時に発生した場合を除いて (その場合は部分的に可視になります)、完了後にのみ可視になります。
SELECT
は、ロード中に通常の挿入が発生した場合を除いて、大量挿入をフラッシュすることはありません。
取り出し: 取り出しの際、要求によって行が圧縮解除され、行キャッシュはありません。SELECT
操作によって完全なテーブルスキャンが実行されます。SELECT
が発生すると、現在使用できる行数を検出し、その行数を読み取ります。SELECT
は一貫性読み取りとして実行されます。大量挿入または遅延挿入だけが使用された場合を除き、挿入時の多くの SELECT
ステートメントが圧縮品質を低下させることがあります。圧縮品質を高めるために、OPTIMIZE TABLE
または REPAIR TABLE
を使用できます。SHOW TABLE STATUS
によって報告される ARCHIVE
テーブルの行数は常に正確です。セクション13.7.2.4「OPTIMIZE TABLE 構文」、セクション13.7.2.5「REPAIR TABLE 構文」、およびセクション13.7.5.37「SHOW TABLE STATUS 構文」を参照してください。
追加のリソース
ARCHIVE
ストレージエンジンに特化したフォーラムは https://forums.mysql.com/list.php?112 で参照できます。