Open Source WEB

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   データおよびインデックスを保存するファイル


戻る:テーブルがHEAPの場合はどうなるか

次へ:テーブルがMERGEの場合はどうなるか


フィードバック:

Name:
Comment:
Dionathan: (Sat Feb 18 17:25:48 2012 )
This is way better than a brick & maotrr establishment.

このサイトは、 IPA の「平成15年度オープンソフトウエア活用基盤整備事業」 の委託事業として開発されたKahuaで試験的に運用しております。

Copyright (c) 2004-2007 株式会社タイムインターメディア About Us