テーブルタイプがいくつかあるらしい

開発機へのMariaDBの環境構築が少しずつ進んできました。
前回は、ユーザー作成、エンコーディング、コマンドでDDLCSVデータを読み込ませる方法の調査などを行いました。

さて、今回はいよいよテーブルを作ってみたいと思います!

と意気込んでみたものの、これがなかなかどうして、そう簡単には行かない。

テーブルタイプというのがいくつかあって、テーブルタイプによってSQLのエンジンが異なり、データベースが管理するファイルの構成とかも変わってくるようです。従って、自分の構築したいデータベースのそれぞれのテーブルの特性に応じたテーブルタイプを選定しなければならないということになりますね。


この辺を参考にして少し勉強してみました。

■参考URL

MySQL公式】ストレージエンジンとテーブルタイプ
http://dev.mysql.com/doc/refman/5.1/ja/storage-engines.html

【ThinkIT】MyISAMInnoDB
http://thinkit.co.jp/free/article/0608/1/2/

【Open database life】MyISAMInnoDBのどちらを使うべきか
http://opendatabaselife.blogspot.jp/2009/10/myisaminnodb.html


要するに、私が今まで扱ってきたRDBMSに近いのがInnoDBというテーブルタイプみたいです。こいつは、行ロックやトランザクションをサポートしています。しかし、すべてのテーブルを、何も考えずにInnoDBにしてしまうのは良くないのでしょう。せっかくいくつかのテーブルタイプが用意されているのですから、うまく使い分けたいですよね。


以下、私なりの解釈によるまとめ


InnoDB(デフォルト)
トランザクションセーフなストレージエンジン。
クラッシュセーフ。
行ロック可。
更新が頻繁に起きる系のテーブルはInnoDBが良い。


MyISAM
MySQL 5.5より前のバージョンでのデフォルトのストレージエンジン。
更新系はテーブルロック。
OSレベルでのテーブルの運用が非常に楽。(ファイルをコピーしたりでどうにかできるみたい)
ただし、更新中にPCがダウンすると、DBのファイルが壊れてしまうことがある。
(もちろん、復旧方法はある)
全文検索が可能。(!)


Aria
MariaDBで開発中の新しいストレージエンジン。(MySQLにはない)
MyISAMをベースにして、全く新しいストレージエンジンとして作成されている。
クラッシュセーフ、トランザクションサポート(予定)。
将来的にMariaDBのデフォルトストレージエンジンになるらしい。
http://news.goo.ne.jp/article/enterprisezine/business/enterprisezine_4220.html


・Memory
昔はHEAPと呼ばれていたらしい。今はMemoryと呼ばれる。
その名の通り、メモリ上にレコードの情報を格納する。
当然、サーバーが落ちると、レコードはすべてなくなる。
ストアドプロシージャとかで高速な演算をするのに使えそう。



とまあ、こんな感じでした。

まあ、Memoryは、かなり特殊にして分かりやすく、使い所は限られるでしょう。

バッチ処理なんかで1プロセスがいっぺんにデータをロードし、その他のプロセスは一切更新しないようなテーブルには、MyISAMが使えそうです。後は、全文検索が必要ならば、MyISAMを使うしかないですね。その場合は、更新系処理、運用方法に注意しなければならないです。

他は、通常のテーブルは、だいたいInnoDBで良さそうです。ただし、InnoDBを使う場合、DB設定でファイルの最大サイズを指定しておかないと、1ファイルがどんどん大きくなっていっちゃうよ!という話を各所で聞きます。チューニング大事。

Ariaストレージエンジンに期待!



Ariaストレージエンジンを今(2013年現在)使うのはまだ時期尚早なのでしょうか。
少なくとも、MariaDB 5.5の時点では、まだデフォルトはInnoDBです。
この辺詳しい人いたら教えて欲しいです。