Finding Your Data with Views

  • 895 views
Uploaded on

This is my summary for Chapter 06 of "CouchDB: The Definitive Guide". …

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

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
895
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
12
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. CouchDB : The Definitive Guide 勉強会 #206. Finding Your Data with Views2009/10/16
    RelaxCafe@CouchDB break.2
    id:yssk22 (CouchDB-JP)
  • 2. 先に読後感想
    とりあえず動かしながら考えてみましょう。
    手元に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は削除しないでください!
  • 3. View の目的
    ドキュメントのフィルタリング
    フォーマットと並び替え
    インデックスを作る
    ドキュメントを効率的に見つけるために!
    リレーションを定義するために!
    様々な計算
  • 4. Relax1. ビューの作成
    ブログのデータを日付順に並び替えよう
    実際にやってみる
  • 5. Relax1.ビューの作成
    データが格納してあるデータベース
    relax_data1
    適当に新しくDBを作って、relax_data_1からデータをコピー
    map 関数を定義して、結果を確認する
    デザインドキュメント"docs"を作り、"by_date"というビューを定義
  • 6. map function の中身
    1つ1つのドキュメントに対する処理を定義する関数
    function(doc){ .... }
    emit(key, value) で出力を定義する
    出力されるkeyの辞書順で並び替えされる
    デザインドキュメントのviewsに文字列として登録
  • 7. map functionの実行タイミング
    各ドキュメントに対して、ビューの呼び出し時に1回ずつ呼ばれる
    N個のドキュメントがあればN回mapが呼ばれる。
    mapの結果はB-Treeに保存される
    オリジナルのドキュメントに変更がない限り2度以上は呼ばれない
    B-Tree は Key に基づく構成になっているため、Keyに対する検索、並び替えが高速
  • 8. ドキュメントを変更したときのViewの挙動
    map結果のB-Treeのそれぞれのノードは、どのドキュメントから生成されたか、の情報を持っている。
    古いノードはCouchDBによりinvalidマークがつけられ、Viewの結果に表れなくなる。
    ドキュメントが追加/更新されたときにのみ、map関数が新しく追加されたドキュメントに対して実行され、結果がViewのB-Treeに保存される。
    実際には、ドキュメントが追加/更新されて、次にViewにアクセスがあったとき。
  • 9. Relax2. ビューを使った検索(1)
    特定の日付のタイトルを検索しよう
    実際にやってみる
  • 10. Relax2. ビューを使った検索(1)
    ブラウザ(or curl)でアクセス
    URIにクエリ文字列(key)をつける
    /{db}/_design/docs/_view/by_date?key="2009/01/30 18:04:11"
  • 11. keyパラメーター
    emit(key, value)のkeyに一致する結果を返す。
    次のような場合
    emit("a", "foo");emit("a", "bar");
    ?key="a" でアクセスすると... ?
  • 12. Relax3. ビューを使った検索(2)
    指定範囲の日付のタイトルを検索しよう
    2009年1月のタイトルを検索
    実際にやってみる
  • 13. 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 "
  • 14. Relax4. ビューを使った検索(3)
    指定範囲の日付のタイトルを検索しよう
    日付の範囲をNumber配列にして扱いやすくする
    実際にやってみる?
  • 15. 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]
  • 16. Relax5. ビューを使った検索(4)
    特定のタグを持つタイトルを検索。
    emit のキーは?
    実際にやってみる?
  • 17. クエリ文字列に関して
    key={JSON}
    指定したキーにマッチする結果を検索
    startkey={JSON}
    指定したキーより大きい結果を検索
    endkey={JSON}
    指定したキーより小さな結果を検索
    descending=true
    キーの逆順に"たどる"
    startkey, endkeyの解釈も変わるので注意
    結果を並び替えるのではなく、B-Treeのたどり方を指定する点に注意。
    limit=Number
    キーをたどってNumber個見つかった時点で結果を返す。
    skip=Number
    キーをたどるときに、最初のNumber個をとばす
  • 18. これ以降
    まだ完成していない模様
    資料じゃなくて元の本が!
    補完しながら進めます。
    宣伝
    reduce の仕組みは少し複雑なので、とりあえず使い方知りたい方は、developerWorksの記事を読むといい!
    http://www.ibm.com/developerworks/jp/web/library/j_wa-couchdb03/index.html
  • 19. Relax6. ビューを使った計算
    コメントの数をカウントする
    実際にやってみる
    ちょっとデータが足りないので、適当に作ってください。
    データ作ったら relax_data1 に向けてレプリカしてもらえると!
  • 20. 追加するデータ
    "post_id"
    "biking", "bought-a-cat", "hello-world"のどれか
    "name"
    適当に
    "body"
    適当に
    "created_at"
    "YYYY/MM/DD HH:MM:SS +0000"
    "type"
    "comment"
  • 21. Relax6. ビューを使った計算
  • 22. reduceとB-Tree
    B-TreeのNon-Leaf ノードに保存される
    mapの結果と同じくキャッシュが有効!
    Non-Leaf同士の計算をするときは第3引数rereduceがtrueになる
    Leafノード(mapの結果)同士の計算の場合 rereduceはfalse
    CouchDBのB-Treeは B+-Tree
  • 23. イメージ
    rereduce()
    reduce()
    map()