2012年7月7日土曜日

カラム指向DB比較 - MonetDB インストールの巻。

久しぶりに記事を書くけど解析の話ではない。解析用DWH構築の選択肢としてのカラム指向DBについてしばらく試行錯誤してみたい。かねがね解析用のDBとしてカラム指向を試してみたかったので頑張ってみる。

CloudCore のサーバ(Ubuntu12.04)を借りたのでそこでカラム指向DBの比較をしてみたいと思う。対象DBは下記を予定。
  1. MonetDB
  2. InfiniDB
  3. InfoBright
  4. GreenPlum
※予定は未定

今回は MonetDB の環境構築まで。

MonetDB は

1. apt によるバイナリインストール

apt 用のリストを追加
$ sudo vi /etc/apt/sources.list.d/monetdb.list
deb http://dev.monetdb.org/downloads/deb/ precise monetdb
deb-src http://dev.monetdb.org/downloads/deb/ precise monetdb

MonetDB 用の PublicKey を apt に追加
$ wget --output-document=- http://dev.monetdb.org/downloads/MonetDB-GPG-KEY | sudo apt-key add -

リストを更新してパッケージのインストール
$ sudo aptitude update
$ sudo apt-get install monetdb5-sql monetdb-client
※XQuery を使用する場合は monetdb-xquery libmonetdb4-xquery を追加

上記インストールの際に monetdb グループ(と monetdb ユーザ)が追加されているので MonetDB の起動ユーザを monetdb グループへ追加。
※公式サイトに書いてあったが、実際試したところグループ権限が無くても起動できるっぽい
$ sudo usermod -a -G monetdb USER

参考: http://dev.monetdb.org/downloads/deb/


2. おためし

monetdbd コマンドにより dbfarm(通常のDBインスタンスに相当?) を作成し、その情報の取得・更新が可能。
# hoge_dbfarm の作成
$ monetdbd create ~/hoge_dbfarm

# hoge_dbfarm の情報一覧
$ monetdbd get all ~/hoge_dbfarm
property         value
hostname         shimajiro
dbfarm           /home/you1025/hoge_dbfarm/
status           monetdbd[1390] 1.6 (Apr2012-SP2) is serving this dbfarm
mserver          /usr/bin/mserver5
logfile          /home/you1025/hoge_dbfarm//merovingian.log
pidfile          /home/you1025/hoge_dbfarm//merovingian.pid
sockdir          /tmp
port             50000
exittimeout      60
forward          proxy
discovery        yes
discoveryttl     600
control          no
passphrase
mapisock         /tmp/.s.monetdb.50000
controlsock      /tmp/.s.merovingian.50000

# port 番号の取得
$ monetdbd get port ~/hoge_dbfarm
property         value
port             50000

# port 番号の変更
$ monetdbd set port=54321 ~/hoge_dbfarm
$ monetdbd get port hoge_dbfarm
property         value
port             54321

# 元に戻す
$ monetdbd set port=50000 ~/hoge_dbfarm

#dbfarm の起動
$ monetdbd start ~/hoge_dbfarm

データベースの作成と起動
# firstdb データベースの作成
$ monetdb create firstdb
created database in maintenance mode: firstdb

# hoge_dbfarm のデータベース状態一覧
$ $ monetdb status
     name        state     uptime       health
firstdb         locked

# monetdb start によりメンテナンスモード(管理者のみがアクセス可?)へ移行
$ monetdb start firstdb
starting database 'firstdb'... done

$ monetdb status
     name        state     uptime       health
firstdb         locked           34s  100%,  0s

# リリース!!
$ monetdb release firstdb
taken database out of maintenance mode: firstdb

$ monetdb status
     name        state     uptime       health
firstdb         running        3m 7s  100%,  0s

接続してクエリを投げてみる
$ mclient -d firstdb
user(you1025):monetdb  # 初期ユーザID
password:              # 初期ユーザパスワード: monetdb
Welcome to mclient, the MonetDB/SQL interactive terminal (Apr2012-SP2)
Database: MonetDB v11.9.7 (Apr2012-SP2), 'mapi:monetdb://shimajiro:50000/firstdb'
Type \q to quit, \? for a list of available commands
auto commit mode: on
sql>

# テーブル作成
sql>create table hoge(id int, value varchar(256), primary key(id));
operation successful (7.342ms)
sql>\d
TABLE  sys.hoge
sql>\d sys.hoge 
CREATE TABLE "sys"."hoge" (
 "id"    INTEGER       NOT NULL,
 "value" VARCHAR(256),
 CONSTRAINT "hoge_id_pkey" PRIMARY KEY ("id")
);

# データ投入
sql>insert into sys.hoge values(1, 'hoge1');
1 affected row (4.401ms)
sql>insert into sys.hoge values(2, 'hoge2');
1 affected row (3.798ms)
sql>insert into sys.hoge values(3, 'hoge3');
1 affected row (4.896ms)

# データ検索
sql>select * from sys.hoge;
+------+-------+
| id   | value |
+======+=======+
|    1 | hoge1 |
|    2 | hoge2 |
|    3 | hoge3 |
+------+-------+
3 tuples (2.883ms)

# データ更新
sql>update sys.hoge set value = 'hoge999' where id = 2;
1 affected row (4.356ms)
sql>select * from sys.hoge;
+------+---------+
| id   | value   |
+======+=========+
|    1 | hoge1   |
|    2 | hoge999 |
|    3 | hoge3   |
+------+---------+
3 tuples (2.797ms)

# データ削除
sql>delete from sys.hoge where id = 2;
1 affected row (4.234ms)
sql>select * from sys.hoge;
+------+-------+
| id   | value |
+======+=======+
|    1 | hoge1 |
|    3 | hoge3 |
+------+-------+
2 tuples (3.194ms)

# テーブル削除
sql>drop table sys.hoge;
operation successful (3.215ms)

ユーザ追加
# ユーザ追加
# ※ダブルクォートとシングルクォートを間違えて下記と異なるとエラー
sql>create user "hoge" with password 'hoge' name 'HOGE' schema "sys";
operation successful (5.471ms)

# hoge_schema スキーマ作成
sql>create schema "hoge_schema" authorization "hoge";
operation successful (2.851ms)

# hoge のスキーマ変更
sql>alter user "hoge" set schema "hoge_schema";
operation successful (2.135ms)

# ログアウトしてユーザ hoge として再接続
sql>\q
you1025@shimajiro:~$ mclient -u hoge -d firstdb
password:
Welcome to mclient, the MonetDB/SQL interactive terminal (Apr2012-SP2)
Database: MonetDB v11.9.7 (Apr2012-SP2), 'mapi:monetdb://shimajiro:50000/firstdb'
Type \q to quit, \? for a list of available commands
auto commit mode: on
sql>

# スキーマの確認
sql>create table foo(id int, value int, primary key(id));
operation successful (8.470ms)
sql>\d
TABLE  hoge_schema.foo # hoge_schema が適用


3. チュートリアル

チュートリアル用データの取得
$ wget http://dev.monetdb.org/Assets/VOC/voc_dump.sql.gz
$ $ gunzip voc_dump.sql.gz

# チュートリアル用のデータベース作成
$ monetdb create voc
created database in maintenance mode: voc
$ monetdb release voc
taken database out of maintenance mode: voc

# 接続
$ mclient -u monetdb -d voc
password:
Welcome to mclient, the MonetDB/SQL interactive terminal (Apr2012-SP2)
Database: MonetDB v11.9.7 (Apr2012-SP2), 'mapi:monetdb://shimajiro:50000/voc'
Type \q to quit, \? for a list of available commands
auto commit mode: on
sql>

# ユーザ voc の作成
sql>create user "voc" with password 'voc' name 'VOC Explorer' schema "sys";
operation successful (5.268ms)
sql>create schema "voc" authorization "voc";
operation successful (3.259ms)
sql>alter user "voc" set schema "voc";
operation successful (2.348ms)

sql>\q

データ投入
$ mclient -u voc -d voc < voc_dump.sql 
password:
auto commit mode: off
operation successful
1 affected row
1 affected row
…
…
…
operation successful
operation successful
operation successful
auto commit mode: on

# ※ログイン後に以下のコマンドでもデータ投入可能
sql>\< voc_dump.sql

# テーブル一覧
sql>\d 
TABLE  voc.craftsmen
TABLE  voc.impotenten
TABLE  voc.invoices
TABLE  voc.passengers
TABLE  voc.seafarers
TABLE  voc.soldiers
TABLE  voc.total
TABLE  voc.voyages

# n 件サンプリング
sql>select * from voc.voyages sample 5;

# 10%サンプリング
sql>select * from voc.voyages sample 0.1;

下記を参考にしたが View の作成やちょっとした Select 程度なのでここで終了とする。
参考: http://www.monetdb.org/Downloads/Tutorial

0 件のコメント:

コメントを投稿