[前][次][番号順一覧][スレッド一覧]

mysql:11568

From: zen kishimoto <zen kishimoto <zen@xxxxxxxxxx>>
Date: Tue, 14 Jun 2005 11:37:15 -0700
Subject: [mysql 11568] MySQL 5.0版の新しいストレッジエンジン


http://databasejournal.com/features/mysql/print.php/3511506

2005年6月14日

MySQL 5.0版の新しいストレッジエンジン

MySQL 5.0は新しいストレッジエンジンを提供します。これらは
は以前はテーブルタイプと呼ばれていたものです。デフォルトの
MyISAMストレッジエンジンとInnoDB, BDB, HEAP とMERGE の他
4つの新しいタイプはCSV, ARCHIVE, FEDERATED とEXAMPLE
です。また HEAPストレッジエンジンの名前は変わりました。
今後はMEMORYストレッジエンジンと呼ばれます。新しいタイプ
はデフォルトでは使用できません。SHOW ENGINESステートメント
でチェックできます。現在のデフォルトは

mysql> SHOW ENGINES;

+------------+---------+------------------------------------------------------------+

| Engine | Support | Comment |

+------------+---------+------------------------------------------------------------+

| MyISAM | DEFAULT | 高性能のMySQL 3.23以降のデフォルト・エンジン   
   |

| HEAP | YES | MEMORY のまたの名前 |

| MEMORY | YES | Hashベースで、メモリー内に格納、テンポラリ・テーブルに
適す。|

| MERGE | YES | 同一のMyISAMテーブルのコレクション  |

| MRG_MYISAM | YES | MERGE のまたの名前 |

| ISAM | NO | もう使われないストレッジ・エンジン、MyISAM を使用のこと。 |

| MRG_ISAM | NO | もう使われないストレッジ・エンジン、MERGEを使用のこと。 |

| InnoDB | YES | トランザクション、行レベルのロッキングとフォーリンキー
のサポート |

| INNOBASE | YES | INNODB のまたの名前 |

| BDB | YES | トランザクションとページレベルのロッキングをサポート |

| BERKELEYDB | YES | BDB のまたの名前 |

| NDBCLUSTER | NO | クラスタ、耐障害性のメモリー・ベースのテーブル |

| NDB | NO | NDBCLUSTER のまたの名前       |

| EXAMPLE | NO | ストレッジエンジンの例              |

| ARCHIVE | NO | アーカイブ・ストレッジエンジン |

| CSV | NO | CSV ストレッジエンジン |

+------------+---------+------------------------------------------------------------+


現在存在しないストレッジエンジンへのサポートを追加するには、あるオプションで
MySQLをビルドしなければなりません。どこかの時点でデフォルトで
そう言ったストレッジエンジンが含まれるようになるかも知れません。
それまでは、他に方法はありません。

MEMORY ストレッジエンジンでの変更

最初に以下のように.frm 定義ファイルを生成します。

mysql> CREATE TABLE csv_names(firstname CHAR(30), surname CHAR(40), age
INT) ENGINE = CSV;

空のデータファイルも生成されます。CSVファイルはテキストファイルなので
現存のCSV ファイルを同じ場所にコピーできます。MySQLのクライアント
から以下のように見えます。

mysql> SELECT * FROM csv_names;

+-----------+------------+-----+

| firstname | surname | age |

+-----------+------------+-----+

| Jacob | Mbezela | 42 |

| Schabir | Field | 29 |

+-----------+------------+-----+


インデクスなしではSELECTはあまり効率良くありませんが
完全なテーブルのスキャンを行います。反対にMySQL
のクライアントからのレコードをINSERTできます。

mysql> INSERT INTO csv_names VALUES('Quinton','Baxter','75');

CSVファイルの変更を見てみましょう。

"Jacob","Mbezela","42"

"Schabir","Field","29"

"Quinton","Baxter","75"


アーカイブストレッジエンジン

MySQL 4.1.3より追加され、アーカイブストレッジエンジンはその名前
のとおり、大量のスペースをとらずに大量のデータを格納します。
インデクスを使用するのは意味がありません。クラッシュ時にテーブル
がコラプトすると修理できる方法がありません。このストレッジエンジン
をオンにするためには、 -with-archive-storage-engine コンフィギュア
オプションを使ってMySQLをビルドしてください。

mysql> CREATE TABLE archive_names(firstname CHAR(30), surname CHAR(40),
age INT) ENGINE = ARCHIVE;

これは何時も.frm 定義ファイルと.ARZ と.ARM データ
とメタデータのファイルを作成します。

アーカイブですから、レコードをDELETE, UPDATEや REPLACEできません。
できることはINSERTと SELECTです。インデクスがないので、SELECT
はテーブルの完全スキャンを行わなければなりません。
挿入の際レコードは圧縮されますが、OPTIMIZE TABLEはデータベース
全体を圧縮できます。その際一時的に.ARN ファイルが生成されます。

mysql> INSERT INTO archive_name VALUES('Quinton','Baxter','75');

mysql> SELECT * FROM archive_names;

+-----------+------------+-----+

| firstname | surname | age |

+-----------+------------+-----+

| Quinton | Baxter | 75 |

+-----------+------------+-----+


結論

新しいストレッジエンジンは、大抵の人々には際ビルドが必要なので
扱いにくいですが、特別な要求がある人々には有益です。時間を
掛けて開発したのですから、そのうちに採用されます。どうしても使い
たいけれど、再ビルドをするのが嫌であれば、あまりもう長く
待たないでも良いかも知れません。今使えていても、正式な
ドキュメントを良くみてください。変更があるかもしれないからです。

-- 
Zen Kishimoto                      www.ipdevices.com
IP Devices, Inc.                   zen@xxxxxxxxxx
2175 De La Cruz Blvd., Suite 10    (408) 567-9391
Santa Clara, CA 95050              (801) 720-8847 (FAX)



[前][次][番号順一覧][スレッド一覧]