Couchdb

Post on 28-May-2015

3.061 views 0 download

Tags:

Transcript of Couchdb

CouchDB relax

Kota Sakoda

2009年6月1日月曜日

自己紹介• cohtan ( Kota Sakoda )

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

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

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

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

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

2009年6月1日月曜日

Agenda

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

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

2009年6月1日月曜日

What’s CouchDB?

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

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

• 通信は全てRESTful API

• 問合せはSQLではなくMapReduce

• N-Master Replication

2009年6月1日月曜日

Erlang

2009年6月1日月曜日

Erlang

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

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

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

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

2009年6月1日月曜日

Document Oriented

2009年6月1日月曜日

Document Oriented

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

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

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

• 多次元の構造が可能

2009年6月1日月曜日

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

2009年6月1日月曜日

{ “_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日月曜日

RESTful API

2009年6月1日月曜日

RESTful API

• CreteHTTP PUT /dbname/docid

• ReadHTTP GET /dbname/docid

• UpdateHTTP PUT /dbname/docid

• DeleteHTTP DELETE /dbname/docid

2009年6月1日月曜日

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日月曜日

MapReduce Framework

2009年6月1日月曜日

MapReduce Framework

• JavaScriptでMapReduce!

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

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

2009年6月1日月曜日

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

2009年6月1日月曜日

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

2009年6月1日月曜日

Result2009年6月1日月曜日

// 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日月曜日

Result2009年6月1日月曜日

N-Master Replication

2009年6月1日月曜日

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

2009年6月1日月曜日

Replication Complete

2009年6月1日月曜日

!!!

2009年6月1日月曜日

こんだけ!?

2009年6月1日月曜日

N-Master Replication

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

• 差分コピー

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

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

2009年6月1日月曜日

Demo

2009年6月1日月曜日

Demo

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

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

2009年6月1日月曜日

CouchApp

2009年6月1日月曜日

CouchApp

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

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

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

2009年6月1日月曜日

Sofa

2009年6月1日月曜日

Sofa

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

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

2009年6月1日月曜日

Demo

2009年6月1日月曜日

Demo

• Sofaの実際の動きをDemo

2009年6月1日月曜日

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

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

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

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

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

2009年6月1日月曜日

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

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

2009年6月1日月曜日