Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Couch Db勉強会0623 by yssk22

CouchDB 勉強会で発表した内容です。

  • Login to see the comments

Couch Db勉強会0623 by yssk22

  1. 1. 2009/06/23 webjourney.org Yohei Sasaki / yssk22 CouchDB or Erlangを使って やってみたいアプリケーション
  2. 2. 自己紹介  Yohei Sasaki  http://www.yssk22.info/  仕事の時は ysasaki2  developerWorks にCouchDBの記事を書いてます。  5回連載 3ヶ月で終わる予定が、1年で4回 orz  趣味の時は yssk22 (← 今日はこっち)  http://d.hatena.ne.jp/yssk22
  3. 3. WebJourney http://journal.mycom.co.jp/series/webtool/026/index.html
  4. 4. WebJourney  iGoogle を Rails で作ってみたもの  jQuery + Rails + CouchDB 0.9.0 で実装  昔はMySQL(その話は後ほど)
  5. 5. さらに、今なら OpenSocial
  6. 6. OpenSocial + CouchDB = Open Web Application  OpenSocial  自由にアプリケーションを持ち運べる  CouchDB  自由にデータを持ち運べる データとアプリケーションに 明確な境界など要らない?
  7. 7. 2009/06/23 webjourney.org Yohei Sasaki / yssk22 CouchDB で始める ActiveRecord からの脱却
  8. 8. これからの話 "CouchDBに興味があって、最近始めた"~ "CouchDBのアプリを作ってみようかなっ て思い始めた"人くらいを主なターゲット にしています。  Rails 使い がCouchDBのアプリを作ってみ ようかなー、と思い始めたときの話。  Relational DB から CouchDB へのreplace
  9. 9. 長年の悩み:: GadgetをRDBに保存するのは難しい  Gadget のデータ、スキーマ はユーザーが追加するまで 決められない。  Gadget は必要に応じて追加 開発するから最初からス キーマを定義できない
  10. 10. そうはいっても ActiveRecord + MySQL
  11. 11. ActiveRecord による実装 pages pages - 各ページのデータ gadget_instances - ページに貼り付けられた gadgetのデータ gadgets gadget_instance - サイトにインストールされた s gadget のマスターデータ gadgets 意外と簡単そう???
  12. 12. ActiveRecord による実装 class GadgetInstance pages < ActiveRecord::Base validates_length_of :title, ... validates ... serialize :parameters gadget_instance end gadget 結局KeyValueにシリアライズ!
  13. 13. GadgetInstance#parameters  Gadget 開発者がそれぞれのGadgetアプリ ケーションに応じて利用可能なフィールド  RSS のフィードURL  Blog Parts のようなJavaScript スクリプト  ... gi.parameters[:feed_url] = "http://...." とか gi.parameters[:script][:src] = "http://..." とか
  14. 14. 抱える問題 = クエリ  GadgetデータをRDBに入れるのは簡単  ADO.NET の場合:: XML列にMapping (SQL Server)  Rails の場合:: YAMLで放り込む  Object → XML/YAML は比較的楽  しかし、クエリで取り出せない罠  XQuery 勉強する暇あったらORMなんか使いませんよ!  玉石混交のユーザーデータをフィルタできないなん て!!  例えば、Feed Gadgetなら設定されたURLのランキングを とりたい、とか。
  15. 15. そこでCouchDB
  16. 16. きっかけ  ロゴが気に入った。  勉強する時間が欲しかった。  特にErlang  HTTP  JSON  MapReduce  これなら、JavaScriptでクエリでき る!!
  17. 17. Active Record => CouchDB 移植開始  中のロジックを変えるのが面倒だったの で、ActiveRecord とインターフェースをそ ろえた CouchDB Mapper 作る  3ヶ月ぐらいで、いい加減実装完了  CouchResource  http://github.com/yssk22/couch_resource/tree/mast er
  18. 18. 結果 class GadgetInstance < CouchResource::Base string :title, :validates => [:length_of => ..] object :parameters end  GadgetInstance.find(...) でCouchDBのビューが呼ばれるので、 クエリもサポート!  Gadget 開発者が自由にデータを使える(クエリも含めて!  ActiveRecord のノリで開発できる!  ほとんど記法は同じ。  migration 部分はクラスに直接かく  他のCouchDB Mapper でも property :title, :as => :string とか。
  19. 19. CouchResource  ○  バリデーション: validates_xxx サポート  コールバック: before|after_xxx サポート  JSONデータ型 : string :title などのようにマッ ピング時の型変換ルールをかける  クエリ : find メソッド使える  △  関連 : habtm, has_many, belongs_to などはいら ないので作らなかった  CouchRest のようにストリーミングしない。
  20. 20. Good by Relational Database
  21. 21. とりあえず結論  serializeとか STI (Single Table Inheritance / 同じテーブルを複数 クラスで使い回す)とか使いたくなってくるところには CouchDBみたいなもの  入れる(INSERT/UPDATE)だけなら、そこまで無理なくていい  (item_name, value) なんていうテーブルがあったら、 CouchDBを検討してみるといい!  Form の項目をDBに保存しているときとか。  がんばればActiveRecordっぽく、CouchDBを使える!  Merb::DataMapper のCouchDB Adapterももあるらしい。  CouchDB は、(alpha stageっていってるけど)わりと素直に動 きます。  compaction さえ忘れなければ。
  22. 22. Do you realy need app server?
  23. 23. わき上がる疑問:: Rails要るの? JavaScriptで バリデーションとか Rails が Hashを Ruby でバリデーションとか CouchResourceに CouchResourceを Hash経由でJSONに
  24. 24. 結果  jQuery から 直接 CouchDB たたけばいい  CouchDB にビジネスロジック書いておけば OK  奥の手External Process  CouchDB と任意のコマンドラインプロセスをPipeで つなぐことができる  script/runner でもOK  さようならRails, こんにちはCouchDB  CouchAppもヨロシク。
  25. 25. Good by Rails
  26. 26. Ruby off Rails  Rails で RDB 使わないのは敷居が高すぎる  問い合わせ;  MySQLで動かないようなんだけどSQLiteじゃな いとだめ?どのDB使えばいいの?  回答:  いや、RDBじゃだめw CouchDBインストールして。  結果:  連絡が途絶えた
  27. 27. CouchResource  ×  終了のお知らせ。  ActiveRecord 思想にこだわった時点で終了のお 知らせだったか。  trac にかいといたドキュメントがlost  CouchRest がいい。  がんばって作ってみたけど、だめでした。
  28. 28. CouchDBで Web Appを作る。  まさに CouchApp の世界  セキュリティは[あとで]。  とりあえず、リラックスすれば、世の中みんな いい人しかいないと思えてくる!!!
  29. 29. @これから

×