finding your data with views

23
CouchDB : The Definitive Guide 勉勉勉 #2 06. Finding Your Data with Views 2009/10/16 RelaxCafe@CouchDB break.2 id:yssk22 (CouchDB-JP)

Upload: yohei-sasaki

Post on 04-Dec-2014

1.544 views

Category:

Technology


1 download

DESCRIPTION

This is my summary for Chapter 06 of "CouchDB: The Definitive Guide".This material was used on the CouchDB-JP study session, RelaxCafe.break02.

TRANSCRIPT

Page 1: Finding Your Data with Views

CouchDB : The Definitive Guide 勉強会 #2

06. Finding Your Data with Views

2009/10/16

RelaxCafe@CouchDB break.2

id:yssk22 (CouchDB-JP)

Page 2: Finding Your Data with Views

先に読後感想 とりあえず動かしながら考えてみましょう。

手元に CouchDB ない人は適当につないでください。接続情報

○ SSID: macbook-yssk22○ WEP: time2relax○ IP は 192.168.1.0/24 で static に降ってください。○ http://192.168.1.226:5984/_utils/

CouchDB 0.10.0 relax_xxxx と書いてある DB は削除しないでください!

Page 3: Finding Your Data with Views

View の目的 ドキュメントのフィルタリング フォーマットと並び替え インデックスを作る

ドキュメントを効率的に見つけるために!リレーションを定義するために!

様々な計算

Page 4: Finding Your Data with Views

Relax1. ビューの作成 ブログのデータを日付順に並び替えよう 実際にやってみる

Page 5: Finding Your Data with Views

Relax1. ビューの作成 データが格納してあるデータベース

relax_data1 適当に新しく DB を作っ

て、 relax_data_1 からデータをコピー

map 関数を定義して、結果を確認するデザインドキュメント "docs" を作

り、 "by_date" というビューを定義

Page 6: Finding Your Data with Views

map function の中身 1 つ 1 つのドキュメントに対する処理を

定義する関数function(doc){ .... }emit(key, value) で出力を定義する出力される key の辞書順で並び替えされる

デザインドキュメントの views に文字列として登録

Page 7: Finding Your Data with Views

map function の実行タイミング

各ドキュメントに対して、ビューの呼び出し時に 1 回ずつ呼ばれるN 個のドキュメントがあれば N 回 map が呼

ばれる。map の結果は B-Tree に保存される

○ オリジナルのドキュメントに変更がない限り2 度以上は呼ばれない

○ B-Tree は Key に基づく構成になっているため、 Key に対する検索、並び替えが高速

Page 8: Finding Your Data with Views

ドキュメントを変更したときのView の挙動 map 結果の B-Tree のそれぞれのノードは、どの

ドキュメントから生成されたか、の情報を持っている。古いノードは CouchDB により invalid マークがつけら

れ、 View の結果に表れなくなる。

ドキュメントが追加 / 更新されたときにのみ、 map 関数が新しく追加されたドキュメントに対して実行され、結果が View の B-Tree に保存される。

○ 実際には、ドキュメントが追加 / 更新されて、次に Viewにアクセスがあったとき。

Page 9: Finding Your Data with Views

Relax2. ビューを使った検索 (1)

特定の日付のタイトルを検索しよう 実際にやってみる

Page 10: Finding Your Data with Views

Relax2. ビューを使った検索 (1)

ブラウザ (or curl) でアクセス URI にクエリ文字列 (key) をつける

/{db}/_design/docs/_view/by_date?key="2009/01/30 18:04:11"

Page 11: Finding Your Data with Views

key パラメーター emit(key, value) の key に一致する結果

を返す。 次のような場合

emit("a", "foo");emit("a", "bar");

?key="a" でアクセスすると ... ?

Page 12: Finding Your Data with Views

Relax3. ビューを使った検索 (2)

指定範囲の日付のタイトルを検索しよう2009 年 1 月のタイトルを検索

実際にやってみる

Page 13: Finding Your Data with Views

Relax3. ビューを使った検索 (2)

ブラウザ (or curl) でアクセス URI にクエリ文字列 (key) をつける

/{db}/_design/docs/_view/by_date?startkey="2009/01/01 00:00:00"&endkey=" 2009/02/01 00:00:00 "

Page 14: Finding Your Data with Views

Relax4. ビューを使った検索 (3)

指定範囲の日付のタイトルを検索しよう日付の範囲を Number 配列にして扱いやす

くする 実際にやってみる ?

Page 15: Finding Your Data with Views

Relax4. ビューを使った検索 (3)

ブラウザ (or curl) でアクセスemit(doc.date, doc.title) を次の形になるよう

に書き換える。○ emit([year,month,day, hour, minutes, second],

doc.title);

URI にクエリ文字列 (key) をつける/{db}/_design/docs/_view/by_date?

startkey=[2009,1,1,0,0,0]&endkey=[2009,2,1,0,0,0]

Page 16: Finding Your Data with Views

Relax5. ビューを使った検索 (4)

特定のタグを持つタイトルを検索。emit のキーは ?

実際にやってみる ?

Page 17: Finding Your Data with Views

クエリ文字列に関して key={JSON}

指定したキーにマッチする結果を検索 startkey={JSON}

指定したキーより大きい結果を検索 endkey={JSON}

指定したキーより小さな結果を検索 descending=true

キーの逆順に " たどる "○ startkey, endkey の解釈も変わるので注意

結果を並び替えるのではなく、 B-Tree のたどり方を指定する点に注意。 limit=Number

キーをたどって Number 個見つかった時点で結果を返す。 skip=Number

キーをたどるときに、最初の Number 個をとばす

Page 18: Finding Your Data with Views

これ以降 まだ完成していない模様

資料じゃなくて元の本が! 補完しながら進めます。

宣伝reduce の仕組みは少し複雑なので、とりあえず

使い方知りたい方は、 developerWorks の記事を読むといい!○ http://

www.ibm.com/developerworks/jp/web/library/j_wa-couchdb03/index.html

Page 19: Finding Your Data with Views

Relax6. ビューを使った計算 コメントの数をカウントする 実際にやってみる

ちょっとデータが足りないので、適当に作ってください。データ作ったら relax_data1 に向けてレプ

リカしてもらえると !

Page 20: Finding Your Data with Views

追加するデータ "post_id"

"biking", "bought-a-cat", "hello-world" のどれか "name"

適当に "body"

適当に "created_at"

"YYYY/MM/DD HH:MM:SS +0000" "type"

"comment"

Page 21: Finding Your Data with Views

Relax6. ビューを使った計算

Page 22: Finding Your Data with Views

reduce と B-Tree

B-Tree の Non-Leaf ノードに保存されるmap の結果と同じくキャッシュが有効!Non-Leaf 同士の計算をするときは第 3 引数

rereduce が true になる○ Leaf ノード (map の結果 ) 同士の計算の場合

rereduce は false

CouchDB の B-Tree は B+-Tree

Page 23: Finding Your Data with Views

イメージ

map()

rereduce()

reduce()