Couchdb
-
Upload
kota-sakoda -
Category
Documents
-
view
3.059 -
download
0
Transcript of Couchdb
![Page 2: Couchdb](https://reader033.fdocuments.us/reader033/viewer/2022060111/5566012bd8b42aa6628b48dc/html5/thumbnails/2.jpg)
自己紹介• cohtan ( Kota Sakoda )
• フリーランスプログラマ
• 九州大学大学院テクニカルスタッフ
• 知育玩具のショップの副店長
• 不定期ミュージシャン(ドラマー)
• codecheck.in のサーバーを管理
2009年6月1日月曜日
![Page 3: Couchdb](https://reader033.fdocuments.us/reader033/viewer/2022060111/5566012bd8b42aa6628b48dc/html5/thumbnails/3.jpg)
Agenda
• 半構造DBであるCouchDBを触ってみたので紹介します
• スライド半分・デモ半分の内容です
2009年6月1日月曜日
![Page 4: Couchdb](https://reader033.fdocuments.us/reader033/viewer/2022060111/5566012bd8b42aa6628b48dc/html5/thumbnails/4.jpg)
What’s CouchDB?
• Erlangで実装された半構造DB
• ドキュメント指向(Not Relational!)
• 通信は全てRESTful API
• 問合せはSQLではなくMapReduce
• N-Master Replication
2009年6月1日月曜日
![Page 5: Couchdb](https://reader033.fdocuments.us/reader033/viewer/2022060111/5566012bd8b42aa6628b48dc/html5/thumbnails/5.jpg)
Erlang
2009年6月1日月曜日
![Page 6: Couchdb](https://reader033.fdocuments.us/reader033/viewer/2022060111/5566012bd8b42aa6628b48dc/html5/thumbnails/6.jpg)
Erlang
• もともと分散処理に強い言語
• 最初からマルチコア対応
• 0.9.0のソースコードはたったの11067行!
($ cat src/couchdb/*.erl | wc)
2009年6月1日月曜日
![Page 7: Couchdb](https://reader033.fdocuments.us/reader033/viewer/2022060111/5566012bd8b42aa6628b48dc/html5/thumbnails/7.jpg)
Document Oriented
2009年6月1日月曜日
![Page 8: Couchdb](https://reader033.fdocuments.us/reader033/viewer/2022060111/5566012bd8b42aa6628b48dc/html5/thumbnails/8.jpg)
Document Oriented
• RDBのようにスキーマは存在しない
• 1レコードをJSONフォーマットで表現
• JSONの定義はいつでも好きなように追加・変更・削除が可能
• 多次元の構造が可能
2009年6月1日月曜日
![Page 9: Couchdb](https://reader033.fdocuments.us/reader033/viewer/2022060111/5566012bd8b42aa6628b48dc/html5/thumbnails/9.jpg)
{ “_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](https://reader033.fdocuments.us/reader033/viewer/2022060111/5566012bd8b42aa6628b48dc/html5/thumbnails/10.jpg)
{ “_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](https://reader033.fdocuments.us/reader033/viewer/2022060111/5566012bd8b42aa6628b48dc/html5/thumbnails/11.jpg)
RESTful API
2009年6月1日月曜日
![Page 12: Couchdb](https://reader033.fdocuments.us/reader033/viewer/2022060111/5566012bd8b42aa6628b48dc/html5/thumbnails/12.jpg)
RESTful API
• CreteHTTP PUT /dbname/docid
• ReadHTTP GET /dbname/docid
• UpdateHTTP PUT /dbname/docid
• DeleteHTTP DELETE /dbname/docid
2009年6月1日月曜日
![Page 13: Couchdb](https://reader033.fdocuments.us/reader033/viewer/2022060111/5566012bd8b42aa6628b48dc/html5/thumbnails/13.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022060111/5566012bd8b42aa6628b48dc/html5/thumbnails/14.jpg)
MapReduce Framework
2009年6月1日月曜日
![Page 15: Couchdb](https://reader033.fdocuments.us/reader033/viewer/2022060111/5566012bd8b42aa6628b48dc/html5/thumbnails/15.jpg)
MapReduce Framework
• JavaScriptでMapReduce!
• MapはJSONドキュメントの中から情報を抽出してKeyValueの形に整形する処理
• ReduceはKeyValueの形に整形された情報を使った処理
2009年6月1日月曜日
![Page 16: Couchdb](https://reader033.fdocuments.us/reader033/viewer/2022060111/5566012bd8b42aa6628b48dc/html5/thumbnails/16.jpg)
{ “_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](https://reader033.fdocuments.us/reader033/viewer/2022060111/5566012bd8b42aa6628b48dc/html5/thumbnails/17.jpg)
// Map Functionfunction(doc) { if(doc.tag.match(/couchdb/i){ emit(doc.title, doc.href); }}
2009年6月1日月曜日
![Page 18: Couchdb](https://reader033.fdocuments.us/reader033/viewer/2022060111/5566012bd8b42aa6628b48dc/html5/thumbnails/18.jpg)
Result2009年6月1日月曜日
![Page 19: Couchdb](https://reader033.fdocuments.us/reader033/viewer/2022060111/5566012bd8b42aa6628b48dc/html5/thumbnails/19.jpg)
// 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](https://reader033.fdocuments.us/reader033/viewer/2022060111/5566012bd8b42aa6628b48dc/html5/thumbnails/20.jpg)
Result2009年6月1日月曜日
![Page 21: Couchdb](https://reader033.fdocuments.us/reader033/viewer/2022060111/5566012bd8b42aa6628b48dc/html5/thumbnails/21.jpg)
N-Master Replication
2009年6月1日月曜日
![Page 22: Couchdb](https://reader033.fdocuments.us/reader033/viewer/2022060111/5566012bd8b42aa6628b48dc/html5/thumbnails/22.jpg)
$ curl -X POST --data \'{”source”:”http://remote:5984/somedb”,”target”:”somedb”}' \http://localhost:5984/_replicate
2009年6月1日月曜日
![Page 23: Couchdb](https://reader033.fdocuments.us/reader033/viewer/2022060111/5566012bd8b42aa6628b48dc/html5/thumbnails/23.jpg)
Replication Complete
2009年6月1日月曜日
![Page 24: Couchdb](https://reader033.fdocuments.us/reader033/viewer/2022060111/5566012bd8b42aa6628b48dc/html5/thumbnails/24.jpg)
!!!
2009年6月1日月曜日
![Page 25: Couchdb](https://reader033.fdocuments.us/reader033/viewer/2022060111/5566012bd8b42aa6628b48dc/html5/thumbnails/25.jpg)
こんだけ!?
2009年6月1日月曜日
![Page 26: Couchdb](https://reader033.fdocuments.us/reader033/viewer/2022060111/5566012bd8b42aa6628b48dc/html5/thumbnails/26.jpg)
N-Master Replication
• Master - Slaveとかいう概念がない
• 差分コピー
• source, targetは双方向に切替可能
• 全部マスター!※厳密にはコンフリクトは発生する
2009年6月1日月曜日
![Page 27: Couchdb](https://reader033.fdocuments.us/reader033/viewer/2022060111/5566012bd8b42aa6628b48dc/html5/thumbnails/27.jpg)
Demo
2009年6月1日月曜日
![Page 28: Couchdb](https://reader033.fdocuments.us/reader033/viewer/2022060111/5566012bd8b42aa6628b48dc/html5/thumbnails/28.jpg)
Demo
• cohtanのDeliciousのブックマークを全てダンプし、CouchDBに入れています
• それを使って各種デモAll Document, Design Document, Temporary View, created viewのデモ
2009年6月1日月曜日
![Page 29: Couchdb](https://reader033.fdocuments.us/reader033/viewer/2022060111/5566012bd8b42aa6628b48dc/html5/thumbnails/29.jpg)
CouchApp
2009年6月1日月曜日
![Page 30: Couchdb](https://reader033.fdocuments.us/reader033/viewer/2022060111/5566012bd8b42aa6628b48dc/html5/thumbnails/30.jpg)
CouchApp
• CouchDBのDesign Documentを使ったアプリケーションを手軽に構築/同期するPython Framework
• Pythonの知識はほとんど必要無し
• 基本的にはHTMLとJavaScriptでアプリケーションを作成
2009年6月1日月曜日
![Page 31: Couchdb](https://reader033.fdocuments.us/reader033/viewer/2022060111/5566012bd8b42aa6628b48dc/html5/thumbnails/31.jpg)
Sofa
2009年6月1日月曜日
![Page 32: Couchdb](https://reader033.fdocuments.us/reader033/viewer/2022060111/5566012bd8b42aa6628b48dc/html5/thumbnails/32.jpg)
Sofa
• CouchAppで作られたブログエンジン
• CouchDBスタンドアローンで動作
2009年6月1日月曜日
![Page 33: Couchdb](https://reader033.fdocuments.us/reader033/viewer/2022060111/5566012bd8b42aa6628b48dc/html5/thumbnails/33.jpg)
Demo
2009年6月1日月曜日
![Page 34: Couchdb](https://reader033.fdocuments.us/reader033/viewer/2022060111/5566012bd8b42aa6628b48dc/html5/thumbnails/34.jpg)
Demo
• Sofaの実際の動きをDemo
2009年6月1日月曜日
![Page 35: Couchdb](https://reader033.fdocuments.us/reader033/viewer/2022060111/5566012bd8b42aa6628b48dc/html5/thumbnails/35.jpg)
まとめ• Web ApplicationにFitしやすそう
• RESTfulとJSONなので言語を選ばない
• スキーマレスという自由
• プロトタイプを作る時に最適
• Scaffold以来の衝撃(個人的に)
2009年6月1日月曜日
![Page 36: Couchdb](https://reader033.fdocuments.us/reader033/viewer/2022060111/5566012bd8b42aa6628b48dc/html5/thumbnails/36.jpg)
ご静聴ありがとうございました
参考情報のまとめ : http://delicious/com/cohtan/couchdb
2009年6月1日月曜日