まずCouchDBのHP(launchpad.net)にいってインストール方法を調べます。Ubuntu14.04の場合は以下のようにするらしい。
$ sudo apt-get install software-properties-common
(aptのリポジトリの状態を確認、更新するらしい。
自分の場合あ既にこのリポジトリが入っていたらしく、最新の状態ですと言われた)
$ sudo add-apt-repository ppa:couchdb/stable
既に(古いバージョンが)インストールされているとまずいので、一度削除します。
$ sudo apt-get remove couchdb couchdb-bin couchdb-common
(自分は3個とも入ってない言われました)
いよいよインストールします。
$ sudo apt-get install -V couchdb $ sudo stop couchdb $ sudo start couchdb
ブラウザでhttp://127.0.0.1:5984/にアクセスします。
動いてるようですが、文字列しか表示されません。
couchdbのユーザー設定ないから?
(でも/etc/passwdで確認するとcouchdbのアカウントは登録されていました)
HPのドキュメントを見たら、現状はこれでいいようです。
http://127.0.0.1:5984/_utils
でFutonが動きます。大丈夫なようです。(データベースをWebベースで参照、変更、作成ができます)
PCを再起動しても自動的にデーモンは起動しています、Futonが動きました。
pythonでcoudbを使いたいので、/etc/couchdb/local.iniに以下を追加して再起動しろとのこと。
[query_servers] python=/usr/bin/couchpy
念の為に/usr/bin以下を知らべてみたら、couchjs(おそらくJavaScript用のモジュール)はあるが、couchpyは存在していません。(注:この設定は必要なかったかも、なくてもcouchpyさえインストールすれば動きました。でも本当は必要な筈...)しばらくぐぐった結果、以下のパッケージをインストールしたらよかった。
$ sudo apt-get install python-couchdb
しかしcouchdbの再起動方法がわからない。(/etc/init.d以下にcoudbというスクリプトがあるという情報があったが、ubutu14.04だとそんなのない!どうやって最初に起動してるんだ?→後述)
PS:ちなみにこのpython-couchdb、昔はgoogle-Codeで開発されていたんですが、githubに移っていました。googleでも特に制約はないと思うけど、流行りですかね。
というか、再起動は必要なかった。(うまくいかないようなら、インストール直後にやったみたいにコマンドで直接、停止、起動をすればいいでしょう。)
試しにpythonでプログラムを書いてみました。試験用に用意したのは以下の様なデータです。
ぱっと見わかりにくいでしょうが、Fieldにわざと"name"と”名前”と英語、日本語の両方を使っています。
# coding: utf-8 import couchdb db = couchdb.Server('http://localhost:5984') sampledb = db['sample_db'] for id in sampledb: dbitem = sampledb[id] name = dbitem[u'名前'] print name
日本語のフィールド名でも動きました。(まあそれでも、英語にしといた方が無難だろうね)
ところでCouchDBはデフォルトではPCの外部からのアクセスは禁止してあります。(データの操作にhttp使うくせに、こういうとこはしっかりしてます)
これを許可しないと使いずらいので、以下の場所を編集します。(コメントにデフォルトでなっているのをはずして、全部のIPアドレスを許可する、といったところでしょうか)
/etc/couchdb/local.ini
;bind 127.0.0.1
↓
bind 0.0.0.0
特に起動用スクリプトが見当たらないんですが、勝手に再起動してくれるようです。(他のディストリビューションだと起動用スクリプトができるものもあるらしいですが、今度はcouchdbのアカウントを自分で作ってあげないといけないとか)
あとFuton上でもConfigurationというToolがありそこからもできそうですが、、、ちょっとよくわかりません。うっかいこの項目を削除という操作をしてしまったらしく、いきなりWeb上から何もできなってしまって(まあ意味から考えて通信ができなくなりますわな)、あわてて手動で設定ファイルを編集しなおしました。
ところでCouchDBを通常のDBとして使おうと思ったんですが、どうもサンプルを探すとCouchDBの特徴であるMap/Reduceにより全文中の特定のFieldを探してくる、という例ばかりひっかかります。(考えてみたら、フォーマット自由のドキュメント型DBなんだから、そういう使い方が本道なんでしょうね)
でも自分はとりあえず普通に(ユニークな)idで検索するのをやりたいんです。
とりあえず、以下のプログラムでまずDBを作成します。
# coding: utf-8 import couchdb server = couchdb.Server('http://localhost:5984') db = server.create('python-tests') db['johndoe'] = dict(type='Person', name='John Doe', sex='male') db['maryjane'] = {'type':'Person', 'name':'Mary Jane', 'sex':'female'} # あえてjson形式で指定してみる db.commit() # 特にcloseとかsaveは必要ない? # 不安なら時にcommitするか # 他のPCからすぐに編集した結果を参照したいアプリでは、あったほうがいい
次に以下のプログラムでidを直接指定します。
# coding: utf-8 import couchdb server = couchdb.Server('http://localhost:5984') db = server['python-tests'] print db['maryjane']
これで以下の出力がでてきます。
<Document u'maryjane'@u'1-6d8ea1b66198a41c398662aa3ae07514' {u'type': u'Person', u'name': u'Mary Jane', u'sex': u'female'}>
うまくいきました。(couchdb-pythonにAPIとかのマニュアルが見当たらないので、試行錯誤です)
せっかくなので、Map機能を使い検索してみます。FutonでTemplate Viewにして、
以下の関数をMap関数(左側の欄)として定義します。
function(doc) { emit(doc.sex, doc); }
デフォルトは、emit(null, doc);でどうも全文対象という意味らしいんですが、sexというFieldにマークをします。
これをapplication/sample_viewという名前で保存します。(このスクリプト自体がDB内に保存されるのに注意。Futonで参照できます。)
これを使ったサンプルを以下に示します。
# coding: utf-8 import couchdb server = couchdb.Server('http://localhost:5984') db = server['python-tests'] #print db['maryjane'] result = db.view("application/sample_view", key="female") for r in result: print 'id',r['id'] print 'key',r['key'] print 'name', r['value']['name']
keyの与え方はともかく、検索された後の他のタグを知る方法がちょっとクセがあります。
以下の様に出力されます。
id maryjane key female name Mary Jane
とりあえず最低限、必要なことはわかりました。
0 件のコメント:
コメントを投稿