クラスタ化されたストレージを構築する場合、MyISAMエンジンがInnoDBよりも望ましいというのは本当ですか?もしそうなら?
-
22-07-2019 - |
質問
今日、Java開発者のインタビューでこれを聞いた。 InnoDBと比較したMyISAMの利点と、それがまだ広く使用されている理由を列挙する必要がありました。そして、彼らはこの質問のタイトルとして答えを私から聞くのを待っていました。
私自身の答えからわかるように、MyISAMには外部キーがなく、DBは簡単にクラスター化できます(たとえば、サーバーごとに1つのテーブル)。しかし、なぜ外部キーなしでInnoDBテーブルを単純に作成できないのでしょうか?この説明は私には奇妙に聞こえます。
解決
ここに特効薬の答えはありません。特定のアプリケーションにどちらを使用するかを決定する前に、それぞれの長所と短所を知る必要があります。
InnoDB:
- FKをサポート
- トランザクションをサポート
- 操作に大きなメモリバッファを使用します
- 行レベルのロックをサポート
- ただし、メンテナンスコストがはるかに高くなります。メモリ使用量の調整、テーブルファイルの構成などが本当に必要です。
MyISAM:
- には、InnoDBにはない次のような特別な列機能があります。
- 全文索引
- 空間列(これはInnoDBでは機能しないと確信しています)
- 主な読み取り/追加のユースケースに非常に高速(更新、削除のテーブルロック、ただし挿入のロックはありません)
- 通常は挿入も高速です
- メモリ(キーバッファ)にインデックスをキャッシュしますが、実際のデータページのバッファリングはOSに依存します
たとえば、eコマース、ユーザーデータベース、またはトランザクションを使用したいものにInnoDBを使用します。
データウェアハウス、ロギング、レポートなどには、おそらくMyISAMを使用します。
他のヒント
InnoDBに対するMyISAMのいくつかの利点をリストしなければなりませんでした
-
全文検索
-
...
-
いいえ、それだけです。
(OK、MyISAMがInnoDBより高速である一部のケースがありますが、ACID準拠の欠如に耐えるだけの価値はほとんどありません。今日、MyISAMで何かをする主な理由は残念ながらInnoDBではサポートされていない全文検索を取得します。)
これが当てはまらないかどうかはわかりません。MyISAMはInnoDBよりも読み取りが高速です。
また、MyISAMテーブルは別のファイルに保存されます(覚えている限り)、これらのファイルを別のMySQLデータベースに実際に転送でき、バックアップが簡単です。
デフォルトでは、InnoDBデータベースはファイルシステム上の1つの巨大なグロブに保存されます。
それがまだ広く使われている理由については、それがデフォルトのオプションだからだといつも思っていました。個人的には、InnoDBの利点であるMyISAMとMyISAMにも、私の経験からデータの整合性に問題があると信じています。
外部キーなしでInnoDBテーブルを作成できますが、それはその主な利点の1つである参照整合性を排除します。 ただし、MyISAMは参照整合性を目的として構築されていないため、キーは異なる方法で、おそらくより効率的に格納できます。
ロックとアクセスにもいくつかの違いがあります。 InnoDBは行レベルのロックをサポートしていますが、MyISAMはテーブルレベルのロックのみをサポートしています。実行しているクエリ(SELECTSとINSERTS / UPDATES)によっては、パフォーマンスに顕著な影響を与える可能性があります。