 |

|
徹底比較!! MySQLエンジン |
第3回:MemoryとArchive
著者:NTTデータ 藤塚 勤也 2006/8/29
|
|
|
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テーブルの特長を以下にあげます。
- HashとBtreeの2つのインデックスが使用可能
- 固定長レコードフォーマットである
- BLOBとTEXT型は使用できない
- 複数のクライアントからアクセスが可能
表1:Memoryの特長
なお、使用できるSQL文に制限はありません。SELECT文はもちろんのことINSERT文/UPDATE文/DELETE文による更新も可能です。ただし、前述したように更新結果データはメモリ上にのみ存在しているため、MySQLサーバの終了によってその内容は消滅します。
|
Memoryのテーブルファイル |
テーブルを作成する際、CREATE TABLE文のENGINE句に「MEMORY」を指定することにより、Memoryテーブルを作成することができます。Memoryテーブルを作成すると、そのデータベースのディレクトリ内に、どのようなカラム構成にてできているかなどのテーブル構造のデータが格納された「テーブル名.frm」のみが作成されます。このときディスク上にデータを格納するためのファイルは存在しません。
次に示すのは、「Memory_TEST」データベース内に「TEST00」という名前のMemoryテーブルを作成した時のファイル一覧です。「Memory_TEST」ディレクトリ内に「TEST00.frm」ファイルのみが存在していることがわかると思います。
[root@localhost var]# ls Memory_TEST/
TEST00.frm
|
Memoryテーブルの「TEST00」に10万件のレコードをロードした状態にて、「show table status」コマンドを実行した結果内容を次に示します。テーブル内には、10万件のレコード「Rows: 100000」があることがわかります。
show table statusコマンドの例
mysql> show table status \G;
************* 1. row **************
Name: TEST00
Engine: MEMORY
Version: 10
Row_format: Fixed
Rows: 100000
Avg_row_length: 148
Data_length: 15645688
Max_data_length: 15518836
Index_length: 843408
Data_free: 0
Auto_increment: NULL
Create_time: NULL
Update_time: NULL
Check_time: NULL
Collation: latin1_swedish_ci
Checksum: NULL
Create_options:
Comment:
|
|
Memoryテーブルの使いどころ |
更新したデータはディスク上に保存しませんので、やはり読み込み専用で使用するのが適切だと思われます。例えば、通常のオンライン処理の中では更新処理を行わないような、マスターデータを格納するためのテーブルとして使用するのに適しています。もちろん、そのマスターテーブルは、メモリ上に配置できる程度のサイズである必要があります。
しかし、通常のオンライン処理では更新されないマスターテーブルであっても、そのデータの実体はディスク上に存在する必要があります。ディスク上にデータを格納するために、テーブルの実体をMyISAMテーブルやInnoDBテーブルにて管理し、更新処理を行う場合はこの実体を格納しているテーブルに対して行います。そして、定期的にディスク上の実体テーブルからMemoryテーブルにデータを反映する仕掛けを用意するといった使い方が考えられます。
このような仕掛けを用意してMemoryテーブルを使用するからには、それに見合った処理性能を必要とする場合のみに有効でしょう。
|
1 2 3 次のページ
|

|
|

|
著者プロフィール
株式会社NTTデータ 藤塚 勤也
基盤システム事業本部 オープンソース開発センタ シニアスペシャリスト。
日本タンデムコンピューターズ(現日本HP)を経て、2003年よりNTTデータにてOSS分野に参画。日頃はオリジナルOSSの開発や、OSSを用いたシステム構築への技術支援に従事。「RDBMS解剖学」(翔泳社)を共著。
|
|
|
|