jumper

コラム

MySQLのストレージエンジンと特徴

2018年06月26日

MySQLはリレーショナルデータベースとして有名なもののひとつですが、データベースの基本的な機能としてデータを読み、書き込みます。このデータを扱う基本的な処理を担うのが「ストレートエンジン」といいます。

では具体的に「ストレートエンジン」の機能と、MySQLの代表的な二つのエンジン、InnoDBとMyISAMの特徴を見てみましょう。

MySQLのストレージエンジン

MySQLのストレージエンジン

データベースを使う場合、アプリケーション側と接続(コネクション)しながら運用するのが一般的です。アプリケーション側が受け取った情報をデータベースへ渡し、内容によってデータベースが情報を受け取り、処理し、その結果をアプリケーション側へ戻します。MySQLの構造は、データの受け渡しをコネクションプールが受け持ち、内容を解析し、最適化を図りながら、どのように処理するかの情報をストレートエンジンに渡します。ストレートエンジンはストレージから必要な情報を引き出したり、保存したりします。または引き出した情報を目的に合わせて変更する場合もあります。これがストレートエンジンの大きな役割となります。

ストレートエンジンがなければストレージにデータを保存することも引き出すこともできません。

InnoDBの特徴

現在のバージョンのMySQLではInnoDBが規定のストレートエンジンになっています。InnoDBの特徴はレコードにロックをかけられる点です。

ロック

ロックとは一時的にレコードの更新ができなくなる処理です。ロックの指示はストレートエンジンが行いますが、データを更新している間に、別な読み書きの指示が入ると、整合性がとれなくなります。実際にはその時「10」というデータがレコードにあったとしても、場合によっては更新前の「9」が表示されているかもしれません。このような事がないようにロックを行うのです。

トランザクション

InnoDBではトランザクションが可能です。トランザクションとは一連のSQLクエリーを実行した際、最後にコミットを行うまでは結果を保持しない機能をいいます。つまり一連の処理をひとつの単位としてあつかい、仮に一連の処理の中で一部でも正常に終了しなかった場合は、すべての処理が実行前に戻ります。すべての処理が正常に処理できた時点で、コミット(結果の保持)がなされます。

MyISAMの特徴

MyISAMの特徴

MyISAMではまずトランザクションが機能としてありません。そのため複雑な処理などは、データの不整合を起こす恐れがあります。また、ロックについはInnoDBがレコード単位で行われるのに対し、MyISAMではテーブル単位でロックされます。この点でもInnoDBより不便です。

しかし、MyISAMはInnoDBよりも大きな量のデータを一度に扱える利点がありますし、読み書きの速度はInnoDBより早いといわれています。

通常はInnoDBを使うケースが多いと思いますが、上記のような特殊な事情でMyISAMを選択することもあります。最終的にはサーバエンジニアの判断になりますが、一般的にはInnoDBがストレートエンジンとしては現状ではデフォルトとして利用されています。

実は初期のMySQLではMyISAMしかありませんでした。MySQLの機能が拡張され、充実されていく過程で他の有力RDBと同等の機能としてロックやトランザクションの機能も必要とされ、InnoDBが登場してきたという経緯があります。

まとめ

MySQLの歴史はインターネットの歴史をほぼ符合します。WEBとの相性の良さや、ライセンスの扱いやすから現在のように大きく発展してきました。ストレートエンジンについてもそのような発達の歴史から、二つのエンジンが共存しています。どちらを選択するかは、アプリケーションやDBの状況や、使用する方向性で変わりますので、どれを選ぶかはよく検討することが大切です。


ソフトエイジェンシー関連製品URL

https://www.softagency.co.jp/products/mysql

CONTACT

製品・サービスに関するご質問、お見積もり、お問い合わせなど、お気軽にご連絡ください。

 050-5505-5509

受付時間 9:30 - 12:00, 13:00 - 17:00
(土日祝および年末年始を除く)