るいすときのこの物語

オタクエンジニアの雑記

DBストレージエンジンまとめ


Archive

データのアーカイブに最適されている。 
テーブルデータを圧縮してディスク上でのデータ格納量を低減することを目的としたストレージエンジン。 
クラスタや、トランザクション、インデックスがサポートされていない、INSERT と SELECT をサポートされているが、DELETE、REPLACE、または UPDATE もサポートされていない。 
ただ、MyISAM の圧縮の方がデータ容量が小さかったりする...(https://thinkit.co.jp/cert/article/0608/1/3/3.htm)

Aria

MariaDBによって作成された MyISAM のより現代的な改善ですが、フットプリントが小さく、システム間で簡単にコピーすることができる。
GROUP BY と DISTINCT が速い、MyISAM よりもキャッシュ機構が有能だから。 
昔は Maria って名前だった。

BLACKHOLE

データを受け入れるが、それを全く保持せずに、常に空の結果を返す。 
INSERT、UPDATE、DELETE を行っても、データは全く変更されませんし、SELECT をしても、データは何も返ってきません。実際のデータファイルを見てみても、テーブル定義ファイルの.frm以外のファイルは作成されない。
/dev/null みたいな。 
BlackHole のテーブルに対して発行されたINSERT, UPDATE, DELETE は、binlogには残り、スレーブには適用される。 
これは、例えば、マスター上の任意のオーバーヘッドを招くことなく、スレーブ上の複雑なフィルタリングルールを実行したい場合、のようなreplication環境で役立つ。 
マスターには変更されず、スレーブだけに適用されるため応答がめっちゃ速いらしい。 ランキングの更新とかに使えそう。

FederatedX

リモートRDBMSを含むデータソースとのやり取りにlibmysqlを使用しています。 FederatedXはlibmysqlのみを使用しているため、現在、MySQL RDBMSとのみやり取りすることができます。 
シンボリックリンクみたいな感じ。参照される側でのトランザクションは機能するけど、参照する側でのトランザクションは AUTOCOMMITTED みたいな動きになる。LOCK TABLESは、参照する側でやっても意味はないけど、参照される側でやるとロックが取得できる。参照される側でLOCKして、参照する側でそのテーブルを操作してもできない。 
参照する側でテーブルを削除しても、参照される側では削除されない。 
ローカルのテーブルと結合できたりもする、容量が問題になってる場合とかで使えそう。

InnoDB

一般的なトランザクションストレージエンジンで、今じゃ MySQL のデフォルト。 
ロックの取得方式が行ロックなのが特徴で、トランザクション時に行ロックされても他のプロセスは読み込みすることができる。 
MyISAM と比較して複雑故に処理は遅いので、更新系(書き込み)がほぼないサービスには MyISAM という選択肢は大いにアリなのかな。

MEMORY

ディスク上にデータを書き込まれず(すべての行がクラッシュ時に失われます)、他のテーブルからのデータの読み取り専用キャッシュや、一時作業エリアとしての使用に最適。 

他のテーブルから呼ばれる読み込み専用のキャッシュとしてベストな選択肢。 
VARCHAR は載せられるけど、BLOB、TEXT は載せられない。 
最大 64 インデックス、 1 インデックスごとに 16カラム、そして最大キーサイズが 3072 bytes

Mroonga

Mroonga は全文検索エンジンである Groonga をベースとしたストレージエンジン。 
MySQL 5.7 から Ngram が載ったため、今はあまり使わないのかな。

MyISAM

MySQL最古のストレージエンジン。 
トランザクションがなく、テーブルロックなのが特徴。あと全文検索ができる。 
障害に弱いと記事ではたくさん書かれているが理由が分からない、InnoDB なら再起動するだけでいいけど、MyISAM の場合はバイナリログから復旧するしかないみたいなそんな話なんだろうか...。 
今では、レガシー目的以外に使用する理由はほとんどありません。

Spider

パーティショニングを使用し、複数のサーバーにわたるデータシャーディングを提供するエンジン。 
Federate と似た機能があり、これに加えてシャーディングにも対応している。 
シャード毎にDBサーバーを指定することでパーティションごとに向き先を変えることができる。 
トランザクションもサポートしている、Federate の上位互換で、大規模向けっぽい。 
採用事例もあったりする -> https://twitter.com/mariadbfdn/status/930626209666555914 
PUBG を作ってる会社↑

TokuDB

メモリに収まらないワークロード向けに最適化されたトランザクション対応ストレージエンジンであり、高い圧縮率を誇る。

XtraDB

InnoDB からフォークされたパフォーマンス強化版みたいなエンジン。 
MariaDB 10.1 まではデフォルトだったけど、今では推奨すらしてないっぽい 
-> You hit a bug in XtraDB & You got a table space crash in XtraDB and recovery doesn't work. In some cases InnoDB may do a better job to recover data.
https://mariadb.com/kb/en/library/using-innodb-instead-of-xtradb/)