Couchdb

36
CouchDB relax Kota Sakoda 200961日月曜日

Transcript of Couchdb

Page 1: Couchdb

CouchDB relax

Kota Sakoda

2009年6月1日月曜日

Page 2: Couchdb

自己紹介• cohtan ( Kota Sakoda )

• フリーランスプログラマ

• 九州大学大学院テクニカルスタッフ

• 知育玩具のショップの副店長

• 不定期ミュージシャン(ドラマー)

• codecheck.in のサーバーを管理

2009年6月1日月曜日

Page 3: Couchdb

Agenda

• 半構造DBであるCouchDBを触ってみたので紹介します

• スライド半分・デモ半分の内容です

2009年6月1日月曜日

Page 4: Couchdb

What’s CouchDB?

• Erlangで実装された半構造DB

• ドキュメント指向(Not Relational!)

• 通信は全てRESTful API

• 問合せはSQLではなくMapReduce

• N-Master Replication

2009年6月1日月曜日

Page 5: Couchdb

Erlang

2009年6月1日月曜日

Page 6: Couchdb

Erlang

• もともと分散処理に強い言語

• 最初からマルチコア対応

• 0.9.0のソースコードはたったの11067行!

($ cat src/couchdb/*.erl | wc)

2009年6月1日月曜日

Page 7: Couchdb

Document Oriented

2009年6月1日月曜日

Page 8: Couchdb

Document Oriented

• RDBのようにスキーマは存在しない

• 1レコードをJSONフォーマットで表現

• JSONの定義はいつでも好きなように追加・変更・削除が可能

• 多次元の構造が可能

2009年6月1日月曜日

Page 9: Couchdb

{ “_id”: “ABCDEFG”, “_rev”: “1-AB123C”, “type”: “person”, “name”: “Kota Sakoda”, “age”: 29, “computer”: [”MacBook Air”, “MacBook”, “Inspiron Mini 12”], }

2009年6月1日月曜日

Page 10: Couchdb

{ “_id”: “ABCDEFG”, “_rev”: “2-AB123C”, “type”: “person”, “name”: “Kota Sakoda”, “age”: 29, “computer”: [”MacBook Air”, “MacBook”, “Inspiron Mini 12”, “SC430”], “hobby”:{“program”:[”perl”,”erlang”]}}

2009年6月1日月曜日

Page 11: Couchdb

RESTful API

2009年6月1日月曜日

Page 12: Couchdb

RESTful API

• CreteHTTP PUT /dbname/docid

• ReadHTTP GET /dbname/docid

• UpdateHTTP PUT /dbname/docid

• DeleteHTTP DELETE /dbname/docid

2009年6月1日月曜日

Page 13: Couchdb

RESTful API

• 豊富なベーシックサンプルhttp://wiki.apache.org/couchdb/Basics

• Amazon EC2, ExtJS, C, C#, Erlang, Futon, Haskell, Java, JavaScript, LISP, LotusScript, Objective-C, Perl, PHP, Python, Ruby, Smalltalk

2009年6月1日月曜日

Page 14: Couchdb

MapReduce Framework

2009年6月1日月曜日

Page 15: Couchdb

MapReduce Framework

• JavaScriptでMapReduce!

• MapはJSONドキュメントの中から情報を抽出してKeyValueの形に整形する処理

• ReduceはKeyValueの形に整形された情報を使った処理

2009年6月1日月曜日

Page 16: Couchdb

{ “_id”:“ABCDEFG”, “_rev”:“1-A1B2C3”, “tag”:“perl couchdb cpan”, “title”:”AnyEvent::CouchDB”, “href”:”http://search.cpan.org/~beppu/AnyEvent-CouchDB/”}

2009年6月1日月曜日

Page 17: Couchdb

// Map Functionfunction(doc) { if(doc.tag.match(/couchdb/i){ emit(doc.title, doc.href); }}

2009年6月1日月曜日

Page 18: Couchdb

Result2009年6月1日月曜日

Page 19: Couchdb

// Map Functionfunction(doc) { var tags = doc.tag.split(“ “); for(var i in tags) { emit(tags[i], 1); }}// Reduce Functionfunction(keys, values) { return sum(values);}

2009年6月1日月曜日

Page 20: Couchdb

Result2009年6月1日月曜日

Page 21: Couchdb

N-Master Replication

2009年6月1日月曜日

Page 22: Couchdb

$ curl -X POST --data \'{”source”:”http://remote:5984/somedb”,”target”:”somedb”}' \http://localhost:5984/_replicate

2009年6月1日月曜日

Page 23: Couchdb

Replication Complete

2009年6月1日月曜日

Page 24: Couchdb

!!!

2009年6月1日月曜日

Page 25: Couchdb

こんだけ!?

2009年6月1日月曜日

Page 26: Couchdb

N-Master Replication

• Master - Slaveとかいう概念がない

• 差分コピー

• source, targetは双方向に切替可能

• 全部マスター!※厳密にはコンフリクトは発生する

2009年6月1日月曜日

Page 27: Couchdb

Demo

2009年6月1日月曜日

Page 28: Couchdb

Demo

• cohtanのDeliciousのブックマークを全てダンプし、CouchDBに入れています

• それを使って各種デモAll Document, Design Document, Temporary View, created viewのデモ

2009年6月1日月曜日

Page 29: Couchdb

CouchApp

2009年6月1日月曜日

Page 30: Couchdb

CouchApp

• CouchDBのDesign Documentを使ったアプリケーションを手軽に構築/同期するPython Framework

• Pythonの知識はほとんど必要無し

• 基本的にはHTMLとJavaScriptでアプリケーションを作成

2009年6月1日月曜日

Page 31: Couchdb

Sofa

2009年6月1日月曜日

Page 32: Couchdb

Sofa

• CouchAppで作られたブログエンジン

• CouchDBスタンドアローンで動作

2009年6月1日月曜日

Page 33: Couchdb

Demo

2009年6月1日月曜日

Page 34: Couchdb

Demo

• Sofaの実際の動きをDemo

2009年6月1日月曜日

Page 35: Couchdb

まとめ• Web ApplicationにFitしやすそう

• RESTfulとJSONなので言語を選ばない

• スキーマレスという自由

• プロトタイプを作る時に最適

• Scaffold以来の衝撃(個人的に)

2009年6月1日月曜日

Page 36: Couchdb

ご静聴ありがとうございました

参考情報のまとめ : http://delicious/com/cohtan/couchdb

2009年6月1日月曜日