圧縮テーブルエンジンでMariaDBストレージを爆速節約!InnoDB COMPRESSED vs Barracuda徹底比較


仕組み

COMPRESS 関数は、指定されたデータを圧縮アルゴリズムを使用して圧縮し、バイナリ形式の BLOB データとして返します。 圧縮アルゴリズムは、zlib または lz4 のいずれかを選択できます。

使用方法

COMPRESS 関数は次のように使用できます。

SELECT COMPRESS(data, algorithm);
  • algorithm: 使用する圧縮アルゴリズム (zlib または lz4)
  • data: 圧縮するデータ

次の例では、mytable テーブルの mycolumn 列のデータを zlib アルゴリズムを使用して圧縮し、結果を compressed_data 列に格納します。

UPDATE mytable
SET compressed_data = COMPRESS(mycolumn, 'zlib');

利点

  • ネットワーク経由でデータを転送する際の帯域幅を節約できます。
  • データベース内のストレージスペースを節約できます。
  • すべてのデータが圧縮に適しているわけではありません。
  • 圧縮されたデータは、圧縮されていないデータよりも書き込みに時間がかかる場合があります。
  • 圧縮されたデータは、圧縮されていないデータよりも読み取りに時間がかかる場合があります。
  • COMPRESS_LENGTH 関数は、圧縮されたデータの長さを取得するために使用できます。
  • UNCOMPRESS 関数は、圧縮されたデータを解凍するために使用できます。


UPDATE mytable
SET compressed_data = COMPRESS(mycolumn, 'zlib');

例 2: compressed_data 列の圧縮データを解凍し、mycolumn 列に格納する

UPDATE mytable
SET mycolumn = UNCOMPRESS(compressed_data);

例 3: mycolumn 列の圧縮されたデータの長さを取得する

SELECT COMPRESS_LENGTH(mycolumn) AS compressed_length
FROM mytable;

例 4: mytable テーブルから mycolumn 列のデータを抽出し、compressed_data 列に圧縮して保存する新しいテーブルを作成する

CREATE TABLE compressed_table (
  id INT PRIMARY KEY AUTO_INCREMENT,
  compressed_data BLOB
);

INSERT INTO compressed_table (compressed_data)
SELECT COMPRESS(mycolumn, 'zlib')
FROM mytable;
CREATE TABLE decompressed_table (
  id INT PRIMARY KEY AUTO_INCREMENT,
  mycolumn TEXT
);

INSERT INTO decompressed_table (mycolumn)
SELECT UNCOMPRESS(compressed_data)
FROM compressed_table;


圧縮テーブルエンジンを使用する

MariaDB には、データを圧縮して格納する専用のテーブルエンジンがいくつか用意されています。 代表的なものは次のとおりです。

  • ZFS: ファイルシステムレベルでデータを圧縮するテーブルエンジンです。 他の圧縮テーブルエンジンよりも柔軟性が高く、様々な種類のデータを圧縮できます。
  • Barracuda: 高度な圧縮アルゴリズムを使用してデータを圧縮するテーブルエンジンです。 InnoDB COMPRESSED よりも高い圧縮率を達成できますが、処理速度が遅くなります。
  • InnoDB COMPRESSED: InnoDB テーブルエンジンに圧縮機能を追加したものです。 圧縮率は低めですが、処理速度が速く、既存の InnoDB テーブルを簡単に圧縮できます。

長所

  • 圧縮と解凍の処理を自動的に行う
  • ストレージスペースを節約できる
  • 圧縮率が高い

短所

  • データの破損リスクがある
  • 処理速度が遅くなる場合がある
  • すべてのテーブルエンジンで利用できるわけではない

データを圧縮してから格納する

データを圧縮してから MariaDB に格納することもできます。 これは、次のような方法で行うことができます。

  • データを圧縮するサードパーティ製のツールを使用する
  • データを圧縮するスクリプトを作成し、そのスクリプトを使用してデータを MariaDB に格納する
  • mysqldump コマンドを使用してデータをダンプし、圧縮してから mysql コマンドを使用してインポートする

長所

  • 任意の圧縮アルゴリズムを使用できる
  • 柔軟性が高い

短所

  • データの破損リスクがある
  • 処理速度が遅くなる場合がある
  • 手間がかかる

結合圧縮を使用する

長所

  • 複数のファイルを効率的に圧縮できる

短所

  • すべての状況で適用できるわけではない
  • 複雑なクエリが必要になる

どの方法を選択するかは、要件によって異なります。

圧縮率とストレージスペースの節約を最優先 する場合は、圧縮テーブルエンジンを使用するのがよいでしょう。

柔軟性と処理速度を重視 する場合は、データを圧縮してから格納する方法または結合圧縮を使用する方がよいでしょう。

複雑なクエリを使用する 場合は、結合圧縮を使用するのがよいでしょう。

いずれの方法を選択する場合も、データのバックアップを定期的に取る ことを忘れないでください。 圧縮されたデータが破損すると、復元が困難になる場合があります。

  • ハードウェア: CPU と RAM の速度は、圧縮と解凍の処理速度に影響を与えます
  • 使用する圧縮アルゴリズム: 異なるアルゴリズムは、異なる圧縮率と処理速度を提供します
  • 圧縮するデータの種類: テキストデータは画像データよりも圧縮しやすい