予習CouchDB
BPStudy#32の予習です。とりあえず、インストールから動かしてみるところまで。
CouchDB
- SQLを使わないドキュメント指向データベース
- DBとの通信にHTTPを使い、特別なドライバがいらない
- データはJSON形式で表現される“ドキュメント”としてやりとりする
インストール
Mac OSX
CouchDBXで、一発インストール
http://janl.github.com/couchdbx/
アプリケーションから起動したら
$ curl http://localhost:8954/ {"couchdb":"Welcome","version":"0.11.0"}
{"couchdb":"Welcome","version":"0.11.0"}が表示されたら、正しく起動している。
http://localhost:5984/_utils/にアクセスして、管理コンソール(Futon)が表示されることを確認。
Linux(Ubuntu 9.10使ってます)
1.ソースからインストールする
http://couchdb.apache.org/downloads.html
aptだと、旧バージョンがインストールされてしまうので非推奨とのこと。
CouchDBの前に予め、以下をインストールする必要がある。
$ sudo apt-get install build-essential erlang libicu-dev libmozjs-dev libcurl4-openssl-dev
$ tar zxvf apache-couchdb-[VERSION].tar.gz $ cd apache-couchdb-[VERSION] $ ./configure $ make $ sudo make install
2.インストール後
/usr/local/以下にインストールされるので、CouchDBの実行ユーザ、ファイルオーナーを作る。
$ sudo adduser --system --home /usr/local/var/lib/couchdb -no-create-home --shell /bin/bash --group --gecos "CouchDB" couchdb
3.CouchDBのディレクトリの所有者を変更
$ sudo chown -R couchdb:couchdb /usr/local/etc/couchdb $ sudo chown -R couchdb:couchdb /usr/local/var/lib/couchdb $ sudo chown -R couchdb:couchdb /usr/local/var/log/couchdb $ sudo chown -R couchdb:couchdb /usr/local/var/run/couchdb
$ sudo chmod -R 0770 /usr/local/etc/couchdb $ sudo chmod -R 0770 /usr/local/var/lib/couchdb $ sudo chmod -R 0770 /usr/local/var/log/couchdb $ sudo chmod -R 0770 /usr/local/var/run/couchdb
これで、一通り準備が完了したのでCouchDBを起動。
$ sudo -i -u couchdb couchdb -b Apache CouchDB has started, time to relax.
http://localhost:5984/_utils/にアクセスして、Futonが表示されることを確認。
Daemonとして起動したい場合は、以下の操作で起動・停止・ステータスの確認ができる。
$ sudo /usr/local/etc/init.d/couchdb start $ sudo /usr/local/etc/init.d/couchdb stop $ sudo /usr/local/etc/init.d/couchdb status
基本操作
ターミナルから、データベースの一覧を取得する。
$ curl http://localhost:5984/_all_dbs []
まだ何もやってないので、空です。
最初のデータベースを作成してみる。
$ curl -X PUT http://localhost:5984/firstdb {"ok":true} $ curl http://localhost:5984/_all_dbs ["firstdb"]
同じ名前のデータベースを作成しようとするとエラーが返る。
$ curl -X PUT http://localhost:5984/firstdb {"error":"file_exists","reason":"The database could not be created, the file already exists."}
データベースを消す時は、
$ curl -X DELETE http://localhost:5984/firstdb {"ok":true} $ curl http://localhost:5984/_all_dbs []
以上は、ターミナルでデータベースを操作で、同じことはFutonを使えばGUIで操作できる。
http://localhost:5984/_utils/
MacのCouchDBXであれば、CouchDB起動時のウィンドウで管理画面が使えます。
データベースとドキュメントを作成する
FutonのOverviewページで「Create Database」をクリックすることで、データベースを作成できる。
"hello-world"でデータベースを作成したら、「Overview > hello-world」というページに移るので、「New Document」をクリックしてドキュメントを作成する。"_id"というフィールドが作成されたことを確認して「Save Document」でドキュメントを保存。保存すると新たに「_rev」というフィールドができる。
新しいフィールドを追加するには「Add Field」をクリック。valueは、JSON形式である必要があるので、以下のような形式になる。
{ name: 'daigo3', place: 'Yokohama' } // 配列もOK [1, 2, 3] // 文字列もOK 'String'
フィールドは「Source」タブからも編集・確認できる。最後に「Save Document」をクリックすると"_rev(ドキュメントの版)"が更新される。
{ "_id": "1fa487039df82eb22d63a1531d000481", "_rev": "4-275e3ca27492c7648ba2ca2f04547770", "me": "{name: 'daigo3'}", "str": "'string'", "arr": [ 1, 2, 3 ] }
クエリを実行する
テスト用に3つのドキュメントを作りました。
{ "_id": "52443afd48f481ce24b3dee2df0006ca", "_rev": "1-9e59e6f7b92fdac46ae17f7feb39567e", "name": "KidA", "info": { "age": 19, "sex": "male" } } { "_id": "52443afd48f481ce24b3dee2df0007b2", "_rev": "1-b7cd2bd9f1995f9b84d2c99d68b723ee", "name": "KidB", "info": { "age": 18, "sex": "female" } } { "_id": "52443afd48f481ce24b3dee2df000b26", "_rev": "1-2a0075d2ef6c8909c9df2367bf518e5c", "name": "KidC", "info": { "age": 15, "sex": "female" } }
「View」のセレクトボックスから「Temporary View」を選択するとView(Map関数とReduce関数の組)作成画面に遷移するので、ここでmap関数を作成する。以下のMap関数で、名前をkeyとしたデータが取得できる。
// Map関数 // param: document function(doc) { var name; var info = []; if(doc.name && doc.info) { name = doc.name; for(item in doc.info) { info.push(doc.info[item]); } emit(name, info); } }