<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ricollab Web Tech Blog &#187; couchdb</title>
	<atom:link href="http://blogs.ricollab.jp/webtech/tag/couchdb/feed/" rel="self" type="application/rss+xml" />
	<link>http://blogs.ricollab.jp/webtech</link>
	<description>ricollab engineers' blog</description>
	<lastBuildDate>Mon, 26 Apr 2010 02:09:12 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.2</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>CouchDB について Erlang 分散システム勉強会で紹介してきました</title>
		<link>http://blogs.ricollab.jp/webtech/2008/06/couchdb/</link>
		<comments>http://blogs.ricollab.jp/webtech/2008/06/couchdb/#comments</comments>
		<pubDate>Thu, 19 Jun 2008 08:56:53 +0000</pubDate>
		<dc:creator>yohei</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[couchdb]]></category>
		<category><![CDATA[erlang]]></category>

		<guid isPermaLink="false">http://blogs.ricollab.jp/webtech/2008/06/couchdb/</guid>
		<description><![CDATA[先日、Erlang分散システム勉強会で、最近私が追っている CouchDB というオープンソースのドキュメント指向分散データベースについて紹介してきました。発表資料をおいておきます。
ドキュメント指向データベース CouchDB(PDF)
分散システムでしかも Erlang というニッチっぽい勉強会でしたが、30人の参加者が一瞬で集まり、非常に熱い会でした。私も自分の好きな話を好きなように話してしまい、参加者のみなさんはドン引きだったかもしれません…
これだけでは何なので、ついでに手元の Fedora7 on coLinux に CouchDB の trunk を入れたときの手順と、簡単な couchdb の使い方をご紹介しておきます。
基本的にはオフィシャルwikiにあるとおり、yum でモジュールを入れていけば問題ありません。素の coLinux からの場合、以下のモジュールが必要でした。

sudo yum install automake gcc libtool erlang \
  help2man icu libicu-devel js js-devel
次に svn から最新の trunk を取ってきます。

svn co http://svn.apache.org/repos/asf/incubator/couchdb/trunk couchdb
普通にコンパイルします。最初に ./bootstrap が必要です。

cd couchdb; ./bootstrap; ./configure; make
ちゃんとコンパイルできたら、あとはインストールするだけです。

sudo make install
オフィシャルの説明では couchdb ユーザを作って /usr/local/etc/couchdb/couch.ini を編集するようになっていますが、いろいろいじるときは自分のアカウントで動かした方が楽です。

cd ~mkdir couchdbcd couchdb
mkdir databases
cp [...]]]></description>
			<content:encoded><![CDATA[<p>先日、<a href="http://teahut.sakura.ne.jp/b/2008-06-02-1.html">Erlang分散システム勉強会</a>で、最近私が追っている <a href="http://incubator.apache.org/couchdb/">CouchDB</a> というオープンソースのドキュメント指向分散データベースについて紹介してきました。発表資料をおいておきます。</p>
<p><a href="http://blogs.ricollab.jp/webtech/wp-content/uploads/2008/06/erlang_couchdb.pdf" title="erlang_couchdb.pdf">ドキュメント指向データベース CouchDB</a>(PDF)</p>
<p>分散システムでしかも Erlang というニッチっぽい勉強会でしたが、30人の参加者が一瞬で集まり、非常に熱い会でした。私も自分の好きな話を好きなように話してしまい、参加者のみなさんはドン引きだったかもしれません…</p>
<p>これだけでは何なので、ついでに手元の Fedora7 on coLinux に CouchDB の trunk を入れたときの手順と、簡単な couchdb の使い方をご紹介しておきます。</p>
<p>基本的には<a href="http://wiki.apache.org/couchdb/InstallingOnFedora7">オフィシャルwiki</a>にあるとおり、yum でモジュールを入れていけば問題ありません。素の coLinux からの場合、以下のモジュールが必要でした。</p>
<pre>
sudo yum install automake gcc libtool erlang \
  help2man icu libicu-devel js js-devel</pre>
<p>次に svn から最新の trunk を取ってきます。</p>
<pre>
svn co http://svn.apache.org/repos/asf/incubator/couchdb/trunk couchdb</pre>
<p>普通にコンパイルします。最初に ./bootstrap が必要です。</p>
<pre>
cd couchdb; ./bootstrap; ./configure; make</pre>
<p>ちゃんとコンパイルできたら、あとはインストールするだけです。</p>
<pre>
sudo make install</pre>
<p>オフィシャルの説明では couchdb ユーザを作って /usr/local/etc/couchdb/couch.ini を編集するようになっていますが、いろいろいじるときは自分のアカウントで動かした方が楽です。</p>
<pre>
cd ~mkdir couchdbcd couchdb
mkdir databases
cp /usr/local/etc/couchdb/couch.ini .
vi couch.ini</pre>
<p>/usr/local/etc/couchdb/couch.ini が雛形なので、それをコピーし、</p>
<ul>
<li>データベースファイル(.couch)を格納するディレクトリ(DbRootDir)</li>
<li>他のマシンからアクセスするためのIPアドレス(BindAddress)</li>
<li>ログファイルの位置(LogFile)</li>
<li>ログレベル(LogLevel)</li>
</ul>
<p>を書きかえます。ログレベルは debug にしておく方が、いろいろ情報が出てわかりやすくなります。</p>
<pre>
; etc/couchdb/couch.ini.tpl.  Generated from couch.ini.tpl.in by configure.

[Couch]

ConsoleStartupMsg=Apache CouchDB is starting.

DbRootDir=<strong>/home/yohei/couchdb/databases</strong>

Port=5984

BindAddress=<strong>192.168.0.2</strong>

DocumentRoot=/usr/local/share/couchdb/www

LogFile=<strong>/home/yohei/couchdb/couch.log</strong>

UtilDriverDir=/usr/local/lib/couchdb/erlang/lib/couch-0.8.0-incubating/priv/lib

LogLevel=<strong>debug</strong>

[Couch Query Servers]

javascript=/usr/local/bin/couchjs /usr/local/share/couchdb/server/main.js</pre>
<p>あとは -c オプションで設定ファイルを指定して couchdb を起動するだけです。</p>
<pre>
% /usr/local/bin/couchdb -c couch.ini
Apache CouchDB 0.8.0-incubating (LogLevel=debug)
Apache CouchDB is starting.

Apache CouchDB has started. Time to relax.
[debug] [&lt;0.1.0&gt;] Config Info /home/yohei/couchdb/couch.ini:
　　　　　　　　CurrentWorkingDir=/home/yohei/couchdb
　　　　　　　　DbRootDir=/home/yohei/couchdb/databases
　　　　　　　　BindAddress="192.168.0.2"
　　　　　　　　Port="5984"
　　　　　　　　DocumentRoot=/usr/local/share/couchdb/www
　　　　　　　　LogFile=/home/yohei/couchdb/couch.log
　　　　　　　　UtilDriverDir=/usr/local/lib/couchdb/erlang/lib/couch-0.8.0-incubating/priv/lib
　　　　　　　　DbUpdateNotificationProcesses=
　　　　　　　　FullTextSearchQueryServer=
　　　　　　　　javascript=/usr/local/bin/couchjs /usr/local/share/couchdb/server/main.js</pre>
<p>このようなログが流れれば起動は成功です。</p>
<p>curl でアクセスしてみましょう(curl が入っていない場合は yum で入れてください)。</p>
<pre>
colinux% curl -v http://192.168.0.2:5984
* About to connect() to 192.168.0.2 port 5984 (#0)
* Trying 192.168.0.2... connected
* Connected to 192.168.0.2 (192.168.0.2) port 5984 (#0)
&gt; GET / HTTP/1.1
&gt; User-Agent: curl/7.16.4 (i386-redhat-linux-gnu) libcurl/7.16.4 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.8
&gt; Host: 192.168.0.2:5984
&gt; Accept: */*
&gt;
&lt; HTTP/1.1 200 OK
&lt; Server: MochiWeb/1.0 (Any of you quaids got a smint?)
&lt; Date: Thu, 19 Jun 2008 05:42:35 GMT
&lt; Content-Type: text/plain;charset=utf-8
&lt; Content-Length: 50
&lt;
* Connection #0 to host 192.168.0.2 left intact
* Closing connection #0
{"couchdb":"Welcome","version":"0.8.0-incubating"}</pre>
<p>ルートにアクセスすると Welcome メッセージとバージョン番号が入った JSON ドキュメントが取得できます。</p>
<p>データベースは PUT で作成できるので、PUT /test というリクエストを送ってみます。</p>
<pre>
colinux% curl -v -X PUT http://192.168.0.2:5984/test
* About to connect() to 192.168.0.2 port 5984 (#0)
* Trying 192.168.0.2... connected
* Connected to 192.168.0.2 (192.168.0.2) port 5984 (#0)
&gt; PUT /test HTTP/1.1
&gt; User-Agent: curl/7.16.4 (i386-redhat-linux-gnu) libcurl/7.16.4 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.8
&gt; Host: 192.168.0.2:5984
&gt; Accept: */*
&gt;
&lt; HTTP/1.1 201 Created
&lt; Server: MochiWeb/1.0 (Any of you quaids got a smint?)
&lt; Date: Thu, 19 Jun 2008 05:44:58 GMT
&lt; Content-Type: text/plain;charset=utf-8
&lt; Content-Length: 11
&lt;
* Connection #0 to host 192.168.0.2 left intact
* Closing connection #0
{"ok":true}</pre>
<p>ちゃんと 201 Created が返ってきましたね。今度は ドキュメントを追加してみます。ドキュメントの名前(id)がURIに入るので、PUTでドキュメントを作成できます。</p>
<pre>
colinux% curl -v -X PUT -H "Content-Type: application/json" \
--data "{\"hoge\": \"fuga\"}" http://192.168.0.2:5984/test/testdoc
* About to connect() to 192.168.0.2 port 5984 (#0)
*   Trying 192.168.0.2... connected
* Connected to 192.168.0.2 (192.168.0.2) port 5984 (#0)
&gt; PUT /test/testdoc HTTP/1.1
&gt; User-Agent: curl/7.16.4 (i386-redhat-linux-gnu) libcurl/7.16.4 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.8
&gt; Host: 192.168.0.2:5984
&gt; Accept: */*
&gt; Content-Type: application/json
&gt; Content-Length: 16
&gt;
&lt; HTTP/1.1 201 Created
&lt; Server: MochiWeb/1.0 (Any of you quaids got a smint?)
&lt; Etag: "1623090219"
&lt; Date: Thu, 19 Jun 2008 05:55:33 GMT
&lt; Content-Type: text/plain;charset=utf-8
&lt; Content-Length: 45
&lt;
* Connection #0 to host 192.168.0.2 left intact
* Closing connection #0
{"ok":true,"id":"testdoc","rev":"1623090219"}</pre>
<p>ドキュメントの追加はデータベースURIへの POST でもできます。この場合はドキュメント名を指定する必要はありません。サーバ側で適当な名前を付けてくれます。</p>
<pre>
colinux% curl -v -X POST -H "Content-Type: application/json" \
--data "{\"hoge\": \"piyo\"}" http://192.168.0.2:5984/test;
* About to connect() to 192.168.0.2 port 5984 (#0)
*   Trying 192.168.0.2... connected
* Connected to 192.168.0.2 (192.168.0.2) port 5984 (#0)
&gt; POST /test HTTP/1.1
&gt; User-Agent: curl/7.16.4 (i386-redhat-linux-gnu) libcurl/7.16.4 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.8
&gt; Host: 192.168.0.2:5984
&gt; Accept: */*
&gt; Content-Type: application/json
&gt; Content-Length: 16
&gt;
&lt; HTTP/1.1 201 Created
&lt; Server: MochiWeb/1.0 (Any of you quaids got a smint?)
&lt; Date: Thu, 19 Jun 2008 05:57:47 GMT
&lt; Content-Type: text/plain;charset=utf-8
&lt; Content-Length: 70
&lt;
* Connection #0 to host 192.168.0.2 left intact
* Closing connection #0
{"ok":true,"id":"2366ffde9e795d8e9c9047f1303cfbcd","rev":"4244254602"}</pre>
<p>POST の場合は Location ヘッダが返ってきた方がいいような気もしますが、ありませんね。今ソースを確認したところ、POST の場合でも Location を返さないようです。couchdbのバグっぽいですね。</p>
<p>ドキュメントができたらやっと GET できます。これは簡単です。</p>
<pre>
colinux% curl -v -X GET http://192.168.0.2:5984/test/testdoc
* About to connect() to 192.168.0.2 port 5984 (#0)
* Trying 192.168.0.2... connected
* Connected to 192.168.0.2 (192.168.0.2) port 5984 (#0)
&gt; GET /test/testdoc HTTP/1.1
&gt; User-Agent: curl/7.16.4 (i386-redhat-linux-gnu) libcurl/7.16.4 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.8
&gt; Host: 192.168.0.2:5984
&gt; Accept: */*
&gt;
&lt; HTTP/1.1 200 OK
&lt; Server: MochiWeb/1.0 (Any of you quaids got a smint?)
&lt; Etag: "1623090219"
&lt; Date: Thu, 19 Jun 2008 06:10:04 GMT
&lt; Content-Type: text/plain;charset=utf-8
&lt; Content-Length: 51
&lt;
* Connection #0 to host 192.168.0.2 left intact
* Closing connection #0
{"_id":"testdoc","_rev":"1623090219","hoge":"fuga"}</pre>
<p>レスポンスの Content-Type が text/plain なのがちょっと気に入りませんが、これはリクエストの Accept ヘッダに application/json がない場合は text/plain を返すように couchdb が実装されているからです。ブラウザなんかで見るときは、text/plain の方がなにかとありがたいからでしょう。Accept ヘッダを付けた場合の例も示しておきます。</p>
<pre>
colinux% curl -v -X GET -H "Accept: application/json" http://192.168.0.2:5984/test/testdoc
* About to connect() to 192.168.0.2 port 5984 (#0)
* Trying 192.168.0.2... connected
* Connected to 192.168.0.2 (192.168.0.2) port 5984 (#0)
&gt; GET /test/testdoc HTTP/1.1
&gt; User-Agent: curl/7.16.4 (i386-redhat-linux-gnu) libcurl/7.16.4 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.8
&gt; Host: 192.168.0.2:5984
&gt; Accept: application/json
&gt;
&lt; HTTP/1.1 200 OK
&lt; Server: MochiWeb/1.0 (Any of you quaids got a smint?)
&lt; Etag: "1623090219"
&lt; Date: Thu, 19 Jun 2008 06:11:48 GMT
&lt; Content-Type: application/json
&lt; Content-Length: 51
&lt;
* Connection #0 to host 192.168.0.2 left intact
* Closing connection #0
{"_id":"testdoc","_rev":"1623090219","hoge":"fuga"}</pre>
<p>こんな感じで、curl のような HTTP クライアントがあれば、すぐに CouchDB で遊んでみることができます。各言語用のライブラリもいろいろ出てきていますので、それを使うのもいいでしょう。HTTP ライブラリさえあれば、ラッパーを作るのは簡単なのでぜひお試しください。</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.ricollab.jp/webtech/2008/06/couchdb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
