Movatterモバイル変換


[0]ホーム

URL:


Yohei Sasaki, profile picture
Uploaded byYohei Sasaki
PPTX, PDF2,336 views

BPStudy32 CouchDB 再入門

CouchDB introduction at BPStudy.

Embed presentation

Downloaded 39 times
Apache CouchDB再入門2010/04/23id: yssk22 (CouchDB-JP)
自己紹介Yohei Sasaki (yssk22)developerWorks のCouchDB連載記事CouchDB基礎文法最速マスターCouchDB-JPPeople on the Couch: UTC+9今年から某ECサイトの開発
はじめに / お願い質問は随時... というのは大変なのでハッシュタグ #bpstudyを添えてつぶやいてください。つぶやきに 半角?または全角? をいれていただければ回答します。ハンズオン用URLhttp://bit.ly/6rXbn5
目次CouchDBとは何か?HTTP APIMapReduceCouchDB Application
CouchDBとは何か?まずは思想的な話から...
CouchDBとは何か?KVSっぽいデータストア
Apache プロジェクト
HTTP によるアクセス
MapReduceでクエリができる
Erlangで実装されたデータベース
Lotus Notes みたいなレプリケーション
すべて正しいけれど、その前にもっと本質的な話を...CouchDBの思想の原点: RelaxCouchDB: The Definitive Guide より...If there’s one phrase to describe CouchDB it is relax.making CouchDB easy, event a pleasure, to use.当たり前のことが当たり前に感じられる道具であること。開発するときの当たり前感ドキュメント指向運用するときの当たり前感いつでも利用可能
データモデルに対するアプローチWebそのもの。WWW はデータベースWWW はドキュメント指向データベースDjango may be built for the Web, but CouchDB is built of the Web.Jacob Kaplan-Moss, Django DeveloperDocument Oriented DatabaseWebで実現する文書そのものを格納するためのデータベース。
例:請求書請求元: hogehoge株式会社請求先:郵便番号: 123-4567住所: 神奈川県川崎市...氏名: 佐々木庸平請求金額: \12,345明細:商品数量金額小計AAAA11,9801,980BBBB31,2103,630...CouchDBにおける1つの保存単位- ドキュメント
例:請求書 (RDBの場合)請求元: 1請求先: 3請求金額: SUM(小計)明細商品数量金額小計111.P1 * 1.P232.P3 * 2.P1, hogehoge株式会社3, 123-4567, 神奈川県..., 佐々木庸平10, 1, 11, AAAA, 1,98010, 2, 32, BBBB, 1,210正規化!正規化!正規化!
正規化とドキュメント指向の狭間正規化の利点はデータの整合性を保つこと。
例えば、請求書の発行後に住所が変わったら?
顧客マスタ上の住所を変更する
あれ? 昔の請求書の住所までかわっちゃったんだけど...
現実世界の"ドキュメント"は整合性を保たないほうがよい場合も。
現実世界のとおりであることが当たり前 = Relax
Web を作るイメージでデザインするとしっくりくる。1 URI = 1 ドキュメントでも、マスタ管理はしたい。
ドキュメント指向的アプローチ請求元: hogehoge株式会社請求先:郵便番号: 123-4567住所: 神奈川県川崎市...氏名: 佐々木庸平請求金額: \12,345明細:商品数量金額小計AAAA11,9801,980BBBB31,2103,630...hogehoge株式会社佐々木庸平AAAA, 1,980BBBB, 1,210台帳から書き写す、という事務処理
データモデルを定義するタイミングRDB
最初に蓄積すべきデータをモデル化しておく
業務分析
エンティティを切り出し
正規化
業務の決まりを事前定義
CouchDB
随時やる業務の決まりを随時定義現実世界で随時やるように...スケールに対する考え方CouchDBにとっての基幹システムユーザーのブラウザWebのだめなところレイテンシーユーザーネットワークはSPoFスケールダウンしても利用可能なサービスを提供するアプリケーションとデータ(のサブセット)を丸ごとユーザーに複製させる
通勤経路の稼働率稼働率 24min/30min : 80%具体的なサービスの例:gmail, google reader, twitter, hatena.ne.jp, ...サービス提供側としては100%を目指しているのを十分承知しているものの...
レプリケーションによる可用性の確保ができるかもしれない1台になっても、N台になっても対応できるストレージシステムAppHTTPApp
ここまでのまとめCouchDB = Relax当たり前のことを当たり前に。データモデルに対するアプローチドキュメント指向スケールに対するアプローチスケールダウンレプリケーション
HTTP API実際の使い方
CouchDBの使い方HTTP で使う使い方 = Web で当たり前の使い方GET : ドキュメントを取得するPOST : ドキュメントを作成するPUT : ドキュメントを更新するDELETE : ドキュメントを削除するWeb の常識をしっていれば、どの言語/ランタイムでもCouchDBは簡単「Webを支える技術」参照
ドキュメントの表現方法JSONで記述すべてのドキュメントは一意に識別するためのIDとバージョン番号REVをもつ他は自由{ "_id" : "請求番号XXXXYYYY", "_rev" : "3-ZZZZZMMMM""発行者": "hogehoge株式会社""請求先": {"郵便番号": 123-4567"   "住所": "神奈川県川崎市...""氏名": "佐々木庸平"},"請求金額": 12345"明細": [   { "商品: "AAAA", "数量": 1, "単価": 1980, "小計": 1980 },   ...   ]}
Futon による確認GUI Toolhttp://localhost:5984/_utils/Firefox + Firebug を使うのがbetterデモ
補足: リビジョン管理CouchDBはMVCCによりディスクアクセスを行うデータの更新操作(PUT)は、論理更新であり物理的には追加が行われる。_rev には"更新回数-ドキュメントのMD5" が格納されている_rev を使った Optimistic Lock により更新の衝突を検出するCompaction という操作により、古いリビジョンは削除される
HTTP API 一覧後でリファレンス的に利用できるようにSphinx Document にまとめみましたhttp://bit.ly/b008oPHTTPメソッドは省略慣習に従えばよいので。XXを実行する 系はPOSTハンズオンで curl を使って試します。
HTTP Header も活用しようRequestX-Couch-Full-Committrueレスポンス前に確実にディスクに書き込む帳票などのドキュメントに使うfalseディスクに書き込む前に HTTP 201 を返すポストイット的なドキュメントに使うResponseETagドキュメントの _rev と同じ値が入るJSONのparseをしなくても_revを入手できる
そのほかの主要機能レプリケーション二つのデータベースの同期をとるP2P モデルで、双方向に同期をとることができる。半自動実行なので、ネットワークが切れても問題がない。添付ファイルドキュメントにはバイナリファイルを添付できる。メディア+メタデータ管理とかに利用可能
各種言語からの利用HTTPライブラリとJSONライブラリが必要十分条件以下独断と偏見によるおすすめJavaScript/_utils/script/jquery.couch.jsが標準添付RubycouchrestPythoncouchdb-kitpython-couchdbJavacouchdb4j
MapReduceデータ処理のための手法...
デザインドキュメントデザインドキュメントCouchDBに格納されるアプリケーションを定義したドキュメントビューデザインドキュメントの中に定義するMapReduce関数を記述し、インデックスを作成する機能
デザインドキュメントの構成{   "_id" : "_design/app",   "_rev" : "3-XXXXXX",   "language" : "text/javascript",   "views" : {      "count_by_name" : {         "map" : "function(doc){ ... }",       "reduce" : "function(k,v,r){ ... }"      }   },   "shows" : ... "lists" : ...}これ
ビューの用途基本ドキュメントのフィルタリング並び替え内部的にはインデックスを作る作業ドキュメントを効率的に見つけるために!様々な計算SUM  とか。応用(データ構造の)フォーマット"正規化", "非正規化" も含めて覚えておくべきこと:クエリではありません。"クエリ"の機能 ... URLにクエリ文字列っていうものがありますよね?
MapReduceMap1つのドキュメントから別のデータを作成する。別のデータ : Key-Value の組み合わせReduceKeyが同じデータの集合から、データを集約して1つの値を計算する。reduce フェーズと rereduce フェーズがある
サンプルデータハンズオンでやります。http://search.twitter.com/?q=%23bpstudy { "_id": "479ce1c32f79d7864730ecbae60d6610",   "_rev": "1-f45bf5f71b84692d0acc4b196849c2d7","iso_language_code": "ja",   "type": "tweets",   "keyword": "#bpstudy", "text": "1時間遅れたけど終わった。これであとは資料の残り半分を完成させればOK #bpstudy (といってハッシュタグのテスト)",   "created_at": "Sat, 17 Apr 2010 19:07:16 +0000", "profile_image_url": "http://a3.twimg.com/profile_images/427387065/speedland_normal.png", "source": "<ahref="http://sites.google.com/site/yorufukurou/" rel="nofollow">YoruFukurou</a>", "from_user": "yssk22", "from_user_id": 3749810, "to_user_id": null,   "geo": null,   "id": 12356675615,   "metadata": {  "result_type": "recent"   }}
map 関数 の書き方function(doc){   emit(key, value);emit(key, value);   ...}emit(key, value)
発言者ごとにemitするfunction(doc){   function format_date() { ... }; // 省略   if( doc.type == ''tweets'' ){var t = format_date(t);      emit([doc.from_user, t],              null);   }}emit(key, value) で出力を定義key はobject以外の任意の値value は null でもよい。undefined はJSONの仕様外なのでだめ
結果/{db}/_design/{app} /_view/{viewname} で確認可能{"total_rows":169,"offset":0,"rows":[{"id":"...","key":["AE35","2010/04/02 01:36"],"value":null},{"id":"...","key":["albuk","2010/04/01 15:36"],"value":null},{"id":"...","key":["ali_lin5757","2010/04/05 20:02"],"value":null},{"id":"...","key":["Amoreeeee","2010/04/06 15:45"],"value":null},{"id":"...","key":["aodag","2010/04/02 01:57"],"value":null},...]}
ビューに対してクエリをかけるよく使うのは範囲指定startkey=xxx&endkey=yyyy特定の発言者だけ時系列にとりだすstartkey=["yssk22"]&endkey=["yssk22", "\u9999"]["yssk22"] より大きくて、["yssk22", "\u9999"] より小さいキーを抽出配列は要素ごとに比較して順序づけ文字列の最大値は \u9999
CouchDBのMapReduceの特徴B+Tree構造でディスクに結果を保持インクリメンタルに実行される一度計算した結果は、元のドキュメントが更新されない限りキャッシュが保持される。
CouchDBのMapReduceの特徴B+Tree構造でディスクに結果を保持インクリメンタルに実行される一度計算した結果は、元のドキュメントが更新されない限りキャッシュが保持される。オンラインシステムで使えるMapReduceの仕組み再計算する再計算しない再計算しない再計算しない更新

Recommended

PDF
Open Policy Agent (OPA) 入門
PDF
Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会)
PDF
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
PDF
文字コードに起因する脆弱性とその対策(増補版)
PPTX
Metaspace
PDF
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
PPTX
Amazon EKS への道 ~ EKS 再入門 ~
KEY
はじめてのCouch db
PPTX
分散トレーシングAWS:X-Rayとの上手い付き合い方
PDF
HashiCorpのNomadを使ったコンテナのスケジューリング手法
PPTX
現場ではこう使った~Office 365 と Azure Functions、Azure Data Factory、Azure SQL Database,...
PDF
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
PDF
Spring Framework ふりかえりと4.3新機能
PDF
Dockerfileを改善するためのBest Practice 2019年版
PPTX
第15回JSSUG「Azure SQL Database 超入門」
PDF
【EX/QFX】JUNOS ハンズオントレーニング資料 EX/QFX シリーズ サービス ゲートウェイ コース
PDF
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
PPTX
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
PDF
B23,B31 sap sybase iq ~全部話します。IQのカラムストア方式、ビットワイズインデックス、DQP、カラム圧縮、等々 by Toshih...
PDF
Azure ADとIdentity管理
PDF
Oracle Database Enterprise Edition で解決する データベースシステムの課題 (12c対応版)
PPTX
ログの書き方がチームの生産性を爆上げする話
PPTX
Linked Dataの基本原則 -LODを公開するときに知っておきたい基本技術-
PPTX
Linked Data (再)入門
PDF
正しいものを正しく作る塾-設計コース
PPTX
Goss入門
PDF
ソフトウェアの核心にある複雑さに立ち向かう
PDF
MapReduce/YARNの仕組みを知る

More Related Content

PDF
Open Policy Agent (OPA) 入門
PDF
Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会)
PDF
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
PDF
文字コードに起因する脆弱性とその対策(増補版)
PPTX
Metaspace
PDF
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
PPTX
Amazon EKS への道 ~ EKS 再入門 ~
Open Policy Agent (OPA) 入門
Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会)
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
文字コードに起因する脆弱性とその対策(増補版)
Metaspace
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
Amazon EKS への道 ~ EKS 再入門 ~

What's hot

KEY
はじめてのCouch db
PPTX
分散トレーシングAWS:X-Rayとの上手い付き合い方
PDF
HashiCorpのNomadを使ったコンテナのスケジューリング手法
PPTX
現場ではこう使った~Office 365 と Azure Functions、Azure Data Factory、Azure SQL Database,...
PDF
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
PDF
Spring Framework ふりかえりと4.3新機能
PDF
Dockerfileを改善するためのBest Practice 2019年版
PPTX
第15回JSSUG「Azure SQL Database 超入門」
PDF
【EX/QFX】JUNOS ハンズオントレーニング資料 EX/QFX シリーズ サービス ゲートウェイ コース
PDF
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
PPTX
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
PDF
B23,B31 sap sybase iq ~全部話します。IQのカラムストア方式、ビットワイズインデックス、DQP、カラム圧縮、等々 by Toshih...
PDF
Azure ADとIdentity管理
PDF
Oracle Database Enterprise Edition で解決する データベースシステムの課題 (12c対応版)
PPTX
ログの書き方がチームの生産性を爆上げする話
PPTX
Linked Dataの基本原則 -LODを公開するときに知っておきたい基本技術-
PPTX
Linked Data (再)入門
PDF
正しいものを正しく作る塾-設計コース
PPTX
Goss入門
PDF
ソフトウェアの核心にある複雑さに立ち向かう
はじめてのCouch db
分散トレーシングAWS:X-Rayとの上手い付き合い方
HashiCorpのNomadを使ったコンテナのスケジューリング手法
現場ではこう使った~Office 365 と Azure Functions、Azure Data Factory、Azure SQL Database,...
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
Spring Framework ふりかえりと4.3新機能
Dockerfileを改善するためのBest Practice 2019年版
第15回JSSUG「Azure SQL Database 超入門」
【EX/QFX】JUNOS ハンズオントレーニング資料 EX/QFX シリーズ サービス ゲートウェイ コース
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
B23,B31 sap sybase iq ~全部話します。IQのカラムストア方式、ビットワイズインデックス、DQP、カラム圧縮、等々 by Toshih...
Azure ADとIdentity管理
Oracle Database Enterprise Edition で解決する データベースシステムの課題 (12c対応版)
ログの書き方がチームの生産性を爆上げする話
Linked Dataの基本原則 -LODを公開するときに知っておきたい基本技術-
Linked Data (再)入門
正しいものを正しく作る塾-設計コース
Goss入門
ソフトウェアの核心にある複雑さに立ち向かう

Similar to BPStudy32 CouchDB 再入門

PDF
MapReduce/YARNの仕組みを知る
PDF
MongoDBとAjaxで作る解析フロントエンド&GraphDBを用いたソーシャルデータ解析
PDF
Apache Drill を利用した実データの分析
PPTX
What's new in Couchbase Server 4.0 ja
PDF
私の考えるドキュメント指向
PDF
CouchDB JP & BigCouch
PPTX
PHPとMongoDBで学ぶ次世代データストア
PPT
Mongodb
ODP
Hadoop for programmer
PDF
カウチなやつら CouchDB in the room
PPTX
TinyMapReduce on ruby
PDF
Data-Intensive Text Processing with MapReduce ch4
PPTX
Finding Your Data with Views
PDF
Shibuya Perl Mongers#12 No Sql Couch Db
PDF
CouchDBをヤラナイカ
PDF
Riak map reduce for beginners
PDF
Couch DB for 197X
PDF
PHP と MySQL でカジュアルに MapReduce する
PDF
PHP と MySQL でカジュアルに MapReduce する (Short Version)
MapReduce/YARNの仕組みを知る
MongoDBとAjaxで作る解析フロントエンド&GraphDBを用いたソーシャルデータ解析
Apache Drill を利用した実データの分析
What's new in Couchbase Server 4.0 ja
私の考えるドキュメント指向
CouchDB JP & BigCouch
PHPとMongoDBで学ぶ次世代データストア
Mongodb
Hadoop for programmer
カウチなやつら CouchDB in the room
TinyMapReduce on ruby
Data-Intensive Text Processing with MapReduce ch4
Finding Your Data with Views
Shibuya Perl Mongers#12 No Sql Couch Db
CouchDBをヤラナイカ
Riak map reduce for beginners
Couch DB for 197X
PHP と MySQL でカジュアルに MapReduce する
PHP と MySQL でカジュアルに MapReduce する (Short Version)

More from Yohei Sasaki

PDF
Couch DB in 15minutes
PPTX
Couch Db勉強会0623 by yssk22
PPTX
前回のまとめ
PPTX
CouchDB+OpenSocial - OSC 2009/Fall Tokyo
KEY
MongoDB on CloudFoundry
KEY
MongoDB on CloudFoundry
PDF
Bp study39 nodejs
PDF
membase
PPTX
CouchDB+OpenSocial - OSC 2009/Fall Tokyo (En)
PPTX
RelaxCafe@CouchDB break.4
KEY
CouchDB
PDF
Couch Db.0.9.0.Pub
KEY
20120317 CloudFoundry #pyfes
KEY
CloudFoundry@home
PPTX
Why CouchDB
PPTX
Media On Couch
Couch DB in 15minutes
Couch Db勉強会0623 by yssk22
前回のまとめ
CouchDB+OpenSocial - OSC 2009/Fall Tokyo
MongoDB on CloudFoundry
MongoDB on CloudFoundry
Bp study39 nodejs
membase
CouchDB+OpenSocial - OSC 2009/Fall Tokyo (En)
RelaxCafe@CouchDB break.4
CouchDB
Couch Db.0.9.0.Pub
20120317 CloudFoundry #pyfes
CloudFoundry@home
Why CouchDB
Media On Couch

BPStudy32 CouchDB 再入門


[8]ページ先頭

©2009-2025 Movatter.jp