|
||||||||||||||
| 1 2 3 次のページ | ||||||||||||||
| はじめに | ||||||||||||||
|
今回は、「Memory」と「Archive」の2つのストレージエンジンを取り上げます。Memoryエンジンは比較的古いMySQLのバージョンから提供されており、以前はHeapと呼ばれていたストレージエンジンです。もう一方のArchiveエンジンは、MySQL 4.1から提供されている比較的新しいエンジンです。 それでは、それぞれの特長やテーブルファイルの構成について解説します。 |
||||||||||||||
| Memoryエンジンとは | ||||||||||||||
|
Memoryエンジンは、その名前の通りテーブルデータすべてをメモリ上にのみ格納します。これは、変更結果をディスク上に書き出さないことを意味します。変更データもメモリ上に存在しているため、アプリケーションからの問い合わせは、このメモリ上のデータに対して処理を行なって結果を返します。 ただし、MySQLサーバが終了するとテーブルデータが消滅してしまいますので、当然変更結果も消滅します。ここでいうMySQLサーバの終了とは、何らかの障害発生による異常終了はもちろんのこと、正しい手順による正常終了も含みます。 テーブルデータをすべてメモリ上にのみ保持することの最大のメリットは、処理性能の高さです(実際どの程度処理性能が高いのかは、別の回で示しますので、ここでは省略します)。そのかわりMemoryエンジンは、変更データをディスクに保存しないという、データベースとしては何か片手落ちのような印象を持つストレージエンジンです。 なお、MySQLサーバの起動時には、Memoryテーブルにはテーブルデータが存在していません。そこで、LOAD文もしくはINSERT-SELECT文をMySQLサーバの起動時に実行するようにし、初期データをMemoryテーブルへ読み込む仕掛けが必要です。 |
||||||||||||||
| Memoryテーブルの特長 | ||||||||||||||
|
Memoryテーブルの特長を以下にあげます。
表1:Memoryの特長
なお、使用できるSQL文に制限はありません。SELECT文はもちろんのことINSERT文/UPDATE文/DELETE文による更新も可能です。ただし、前述したように更新結果データはメモリ上にのみ存在しているため、MySQLサーバの終了によってその内容は消滅します。 |
||||||||||||||
| Memoryのテーブルファイル | ||||||||||||||
|
テーブルを作成する際、CREATE TABLE文のENGINE句に「MEMORY」を指定することにより、Memoryテーブルを作成することができます。Memoryテーブルを作成すると、そのデータベースのディレクトリ内に、どのようなカラム構成にてできているかなどのテーブル構造のデータが格納された「テーブル名.frm」のみが作成されます。このときディスク上にデータを格納するためのファイルは存在しません。 次に示すのは、「Memory_TEST」データベース内に「TEST00」という名前のMemoryテーブルを作成した時のファイル一覧です。「Memory_TEST」ディレクトリ内に「TEST00.frm」ファイルのみが存在していることがわかると思います。
Memoryテーブルの「TEST00」に10万件のレコードをロードした状態にて、「show table status」コマンドを実行した結果内容を次に示します。テーブル内には、10万件のレコード「Rows: 100000」があることがわかります。 show table statusコマンドの例
|
||||||||||||||
| Memoryテーブルの使いどころ | ||||||||||||||
|
更新したデータはディスク上に保存しませんので、やはり読み込み専用で使用するのが適切だと思われます。例えば、通常のオンライン処理の中では更新処理を行わないような、マスターデータを格納するためのテーブルとして使用するのに適しています。もちろん、そのマスターテーブルは、メモリ上に配置できる程度のサイズである必要があります。 しかし、通常のオンライン処理では更新されないマスターテーブルであっても、そのデータの実体はディスク上に存在する必要があります。ディスク上にデータを格納するために、テーブルの実体をMyISAMテーブルやInnoDBテーブルにて管理し、更新処理を行う場合はこの実体を格納しているテーブルに対して行います。そして、定期的にディスク上の実体テーブルからMemoryテーブルにデータを反映する仕掛けを用意するといった使い方が考えられます。 このような仕掛けを用意してMemoryテーブルを使用するからには、それに見合った処理性能を必要とする場合のみに有効でしょう。 |
||||||||||||||
|
1 2 3 次のページ |
||||||||||||||
|
|
||||||||||||||
|
|
||||||||||||||
|
||||||||||||||
|
|
||||||||||||||
|
||||||||||||||
|
|
||||||||||||||
|
||||||||||||||

