Chat (Lingr.com)
Informaiton
Daily
Column
- MySQL日本語の旅(5/1)
- アクセス向上秘伝(5/9)
- 一風変ったHaskellλ門(6/13)
- SICP Answer Book (5/31) 問題3.26追加
Zope Solution
Extra
アーカイブ
OSS案内所
Site Info
関連リンク
BDBテーブル
BDB型というのがある。BDBとは、Berkeley DB のことであり、 あの有名な Berkeley のDBということであろう。
さて、テーブルの型をBDBにするには、今までと同様に 型の指定は、
ENGINE=BDB
でできる。さっそく、HEAPのときと全く同じ手順で調べてみよう。
mysql> CREATE TABLE `漢字` ( `字` char(1), `画数` int )
-> ENGINE=BDB DEFAULT CHARACTER SET eucjpms;
Query OK, 0 rows affected, 1 warning (0.13 sec)
mysql> INSERT INTO `漢字` VALUES ('鰯',21),('鯰',19),('鰹',23);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM `漢字`;
+------+------+
| 字 | 画数 |
+------+------+
| 鰯 | 21 |
| 鯰 | 19 |
| 鰹 | 23 |
+------+------+
3 rows in set (0.00 sec)
mysql> SHOW CREATE TABLE `漢字`\G
*************************** 1. row ***************************
Table: 漢字
Create Table: CREATE TABLE `漢字` (
`字` char(1) default NULL,
`画数` int(11) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=eucjpms
1 row in set (0.00 sec)
mysql>
一発で動いてしまった。簡単ですね。
と思ったら、実は違っていた。 ENGINE=BDB と指定したにもかかわらず、SHOW CREATE TABLE で 表示されたDBエンジンの型は MyISAM であった。
BDBと指定しても、エラーも出ずに MyISAM になってしまう
謎である。というか、MySQLでは、こういう事がよくあるので、 思った通りのことが実現できているか再確認する癖をつけていなければならない。
原因は、マニュアルを見るとわかるかも知れない。
BDBを使うには、ソースからインストール
14.4. The BDB (BerkeleyDB) Storage Engine
英文マニュアルの説明はとても長いので、肝心なことだけをここに書いておく。 なお、このBDBに関しては、いまのところ英語以外はフランス語の マニュアルしか存在しないようである。
フランス語の方をちょっと見てみたら、エンジンが moteur になっていた。 要するに、モーターである。フランス語的に言うなら、BDBモーターである。
さて、何が書いてあるかと言うと、
BDBはソースで供給されているので、
shell> ./configure --with-berkeley-db [other-options]
とオプション指定することで使えるようになるということである。
ということで、ソースからコンパイルして、動かしてみよう。
以下に、configureについてだけ示す。--with-berkeley-db 以外の オプションに付いては、各自で適当なものを指定されたし。
shell$ ./configure --prefix=/usr/local/mysql --with-berkeley-db \ --with-extra-charsets=complex --with-client-ldflags=-all-static \ --with-readline --with-debug=full
BDBが使えるようになったか
今度は、BDBが使える筈である。もう一度、同じことを試してみよう。
mysql> CREATE TABLE `漢字` ( `字` char(1), `画数` int )
-> ENGINE=BDB DEFAULT CHARACTER SET eucjpms;
Query OK, 0 rows affected (2.57 sec)
mysql> INSERT INTO `漢字` VALUES ('鰯',21),('鯰',19),('鰹',23);
Query OK, 3 rows affected (1.27 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM `漢字`;
+------+------+
| 字 | 画数 |
+------+------+
| 鰯 | 21 |
| 鯰 | 19 |
| 鰹 | 23 |
+------+------+
3 rows in set (0.00 sec)
mysql> SHOW CREATE TABLE `漢字`\G
*************************** 1. row ***************************
Table: 漢字
Create Table: CREATE TABLE `漢字` (
`字` char(1) default NULL,
`画数` int(11) default NULL
) ENGINE=BerkeleyDB DEFAULT CHARSET=eucjpms
1 row in set (0.00 sec)
mysql>
SHOW CREATE TABLE で、ENGINE=BerkeleyDB になっている。 ENGINE=BDBと指定しただけなのだが、長いエンジン名になっている。 長い名前でもよいのだが、長いとミスタイプするであろうから、 BDBを使った方がよいであろう。 横着こそミスを減らす重要なテクニックである。
さて、BDBのデータベースは、どのようにファイルに格納されているであろうか。
shellで調べてみよう。
shell# ls /usr/local/mysql/var/日本 db.opt 漢字.db 漢字.frm shell#
フォーマットファイルと同じディレクトリにデータおよびインデックスの が .db のファイルとして出来るようである。
BDBの場合
テーブル名.frm テーブル定義が記述されているファイル
テーブル名.db データおよびインデックスを保存するファイル
フィードバック: