ページ

2011年4月7日

CouchDBを始めてみる

MongoDBのほうが好みなのですが、CouchDBももっと触ってみないとフェアじゃないということで、しばらくはCouchDBで遊んでみます。CouchDBのアーキテクチャとかはまだ、あんまり調べてません。とりあえず、小手先の遊びだけです。

MacなのでHomebrewで普通にCouchDBをインストールできます。今は1.0.2がインストールされました。それからJavaScriptでCouchDBを操作してもいいのですが、このあと計測するときに環境をそろえた方がいいのでPythonを使います。jsonを直接扱うほど若くはないので、Wikiのページの一番上にリストされていたcouchdbkitを使います。couchdbkitはpipでインストールしました。インストールが終わると、counchdbを起動します。

さて、Pythonです。まずは、データベースを作ります。
import couchdbkit

server = couchdbkit.Server("http://localhost:5984")
db = server.get_or_create_db("test")

これでtestというデータベースが作られたはずです。次に文書を保存します。保存するにはdb.save_doc関数をコールします。ipythonはdb.save_doc以外にもsave_docsがいることをおしえてくれます。それからbulk_saveっていうのがいます。名前からどういう機能か想像がつきますね。なので、説明しません。

save_docには
save_doc(self, doc, encode_attachments=True, force_update=False, **params) method of couchdbkit.client.Database instance
    Save a document. It will use the `_id` member of the document
    or request a new uuid from CouchDB. IDs are attached to
    documents on the client side because POST has the curious property of
    being automatically retried by proxies in the event of network
    segmentation and lost responses. (Idee from `Couchrest `)
    @param doc: dict.  doc is updated
    with doc '_id' and '_rev' properties returned
    by CouchDB server when you save.
    @param force_update: boolean, if there is conlict, try to update
    with latest revision
    @param params, list of optionnal params, like batch="ok"

    @return res: result of save. doc is updated in the mean time
と言うことらしいです。最初の引数には辞書で保存したいデータを渡せばいいようですね。と言うことで、

doc = {"key": 1, "value": "value 1"}
db.save_doc(doc)
で保存します。とりあえず、保存したデータが本当に保存されているか確認したいですね。ということで、viewを経由して確認します。viewって何?と言うのも知っているという前提で・・・

print db.documents().all()
で、とりあえず確認できます。出力は困難でした。
[{u'id': u'30149720151e9b6c0629b470ad1e876d',
  u'key': u'30149720151e9b6c0629b470ad1e876d',
  u'value': {u'rev': u'2-7fc14c5ecc566e386a36f7717a84c8d6'}}]

こっから先はまた今度。

保存がどれくらいの速度なのかを知りたかったので、save_docの時間を計測すると、僕のiMacでは大体2ミリ秒から3ミリ秒でした。一個ずつsave_docを呼ぶとあんまりパフォーマンスが出ないかもしれないです。save_docsとかbulk_saveでまとめてやると、一件あたりの保存スピードは上がるかもしれません。

以前のmongodbの保存スピードも同じぐらいだったので、そんなものなのかもしれません。Pythonのせいなのかもしれません。


でわでわ

0 件のコメント: