SlideShare a Scribd company logo
2009/06/23
                   webjourney.org
               Yohei Sasaki / yssk22

CouchDB or Erlangを使って
やってみたいアプリケーション
自己紹介

 Yohei Sasaki
   http://www.yssk22.info/
   仕事の時は ysasaki2
     developerWorks にCouchDBの記事を書いてます。
       5回連載 3ヶ月で終わる予定が、1年で4回 orz


   趣味の時は yssk22 (← 今日はこっち)
     http://d.hatena.ne.jp/yssk22
WebJourney
http://journal.mycom.co.jp/series/webtool/026/index.html
WebJourney

 iGoogle を Rails で作ってみたもの
 jQuery + Rails + CouchDB 0.9.0 で実装
   昔はMySQL(その話は後ほど)
さらに、今なら OpenSocial
OpenSocial + CouchDB
= Open Web Application
 OpenSocial
   自由にアプリケーションを持ち運べる


          CouchDB
            自由にデータを持ち運べる



          データとアプリケーションに
           明確な境界など要らない?
2009/06/23
                   webjourney.org
               Yohei Sasaki / yssk22

CouchDB で始める
ActiveRecord からの脱却
これからの話

 "CouchDBに興味があって、最近始めた"~
 "CouchDBのアプリを作ってみようかなっ
 て思い始めた"人くらいを主なターゲット
 にしています。

 Rails 使い がCouchDBのアプリを作ってみ
  ようかなー、と思い始めたときの話。
 Relational DB から CouchDB へのreplace
長年の悩み::
GadgetをRDBに保存するのは難しい
 Gadget のデータ、スキーマ
  はユーザーが追加するまで
  決められない。
 Gadget は必要に応じて追加
  開発するから最初からス
  キーマを定義できない
そうはいっても
ActiveRecord + MySQL
ActiveRecord による実装
                            pages
pages                        - 各ページのデータ
                            gadget_instances
                             - ページに貼り付けられた
                               gadgetのデータ
                            gadgets
          gadget_instance
                             - サイトにインストールされた
                 s
                               gadget のマスターデータ



gadgets                     意外と簡単そう???
ActiveRecord による実装
                           class GadgetInstance 
pages
                             < ActiveRecord::Base
                             validates_length_of :title, ...
                             validates ...


                             serialize :parameters
         gadget_instance
                           end




gadget
                 結局KeyValueにシリアライズ!
GadgetInstance#parameters

 Gadget 開発者がそれぞれのGadgetアプリ
  ケーションに応じて利用可能なフィールド
  RSS のフィードURL
  Blog Parts のようなJavaScript スクリプト
  ...


 gi.parameters[:feed_url] = "http://...."
 とか
 gi.parameters[:script][:src] = "http://..."
 とか
抱える問題 = クエリ

 GadgetデータをRDBに入れるのは簡単
  ADO.NET の場合:: XML列にMapping (SQL Server)
  Rails の場合:: YAMLで放り込む

  Object → XML/YAML は比較的楽


 しかし、クエリで取り出せない罠
  XQuery 勉強する暇あったらORMなんか使いませんよ!
  玉石混交のユーザーデータをフィルタできないなん
  て!!
    例えば、Feed Gadgetなら設定されたURLのランキングを
     とりたい、とか。
そこでCouchDB
きっかけ

 ロゴが気に入った。
 勉強する時間が欲しかった。
  特にErlang
 HTTP
 JSON
 MapReduce
  これなら、JavaScriptでクエリでき
   る!!
Active Record => CouchDB
移植開始
 中のロジックを変えるのが面倒だったの
 で、ActiveRecord とインターフェースをそ
 ろえた CouchDB Mapper 作る

 3ヶ月ぐらいで、いい加減実装完了
  CouchResource
   http://github.com/yssk22/couch_resource/tree/mast
    er
結果
  class GadgetInstance < CouchResource::Base
       string :title, :validates => [:length_of => ..]

        object :parameters
  end

 GadgetInstance.find(...) でCouchDBのビューが呼ばれるので、
  クエリもサポート!
 Gadget 開発者が自由にデータを使える(クエリも含めて!
 ActiveRecord のノリで開発できる!
     ほとんど記法は同じ。
       migration 部分はクラスに直接かく
          他のCouchDB Mapper でも property :title, :as => :string とか。
CouchResource

 ○
  バリデーション: validates_xxx サポート
  コールバック: before|after_xxx サポート
  JSONデータ型 : string :title などのようにマッ
   ピング時の型変換ルールをかける
  クエリ : find メソッド使える
 △
  関連 : habtm, has_many, belongs_to などはいら
   ないので作らなかった
  CouchRest のようにストリーミングしない。
Good by
Relational
Database
とりあえず結論
 serializeとか STI (Single Table Inheritance / 同じテーブルを複数
  クラスで使い回す)とか使いたくなってくるところには
  CouchDBみたいなもの
     入れる(INSERT/UPDATE)だけなら、そこまで無理なくていい

 (item_name, value) なんていうテーブルがあったら、
  CouchDBを検討してみるといい!
     Form の項目をDBに保存しているときとか。

 がんばればActiveRecordっぽく、CouchDBを使える!
     Merb::DataMapper のCouchDB Adapterももあるらしい。

 CouchDB は、(alpha stageっていってるけど)わりと素直に動
  きます。
     compaction さえ忘れなければ。
Do you realy
   need
app server?
わき上がる疑問:: Rails要るの?


JavaScriptで
バリデーションとか


     Rails が Hashを          Ruby でバリデーションとか
     CouchResourceに



                      CouchResourceを
                      Hash経由でJSONに
結果

 jQuery から 直接 CouchDB たたけばいい
 CouchDB にビジネスロジック書いておけば
 OK
  奥の手External Process
    CouchDB と任意のコマンドラインプロセスをPipeで
     つなぐことができる
       script/runner でもOK


 さようならRails, こんにちはCouchDB
  CouchAppもヨロシク。
Good by
 Rails
Ruby off Rails

 Rails で RDB 使わないのは敷居が高すぎる
  問い合わせ;
    MySQLで動かないようなんだけどSQLiteじゃな
     いとだめ?どのDB使えばいいの?
  回答:
    いや、RDBじゃだめw CouchDBインストールして。
  結果:
    連絡が途絶えた
CouchResource

 ×
  終了のお知らせ。
  ActiveRecord 思想にこだわった時点で終了のお
   知らせだったか。
  trac にかいといたドキュメントがlost
  CouchRest がいい。




 がんばって作ってみたけど、だめでした。
CouchDBで Web Appを作る。

 まさに CouchApp の世界
  セキュリティは[あとで]。
   とりあえず、リラックスすれば、世の中みんな
    いい人しかいないと思えてくる!!!
@これから

More Related Content

PDF
LODを使ったサイトとプラグインを作ってみた話[WordBenchOsaka]
PDF
某社のDB運用周りあれこれ
PDF
グラフで見るMySQL5.6と8.0
PDF
200k/sec
PDF
sql_require_primary_keyを使って主キーを必須にさせる
PDF
React系(別言語含む)の サーバーサイドレンダリング について考えよう
PDF
Scotty を利用した "ゆるふわ" Web サービス作成
PDF
Crawler Commons
LODを使ったサイトとプラグインを作ってみた話[WordBenchOsaka]
某社のDB運用周りあれこれ
グラフで見るMySQL5.6と8.0
200k/sec
sql_require_primary_keyを使って主キーを必須にさせる
React系(別言語含む)の サーバーサイドレンダリング について考えよう
Scotty を利用した "ゆるふわ" Web サービス作成
Crawler Commons

What's hot (20)

PDF
MySQLユーザ視点での小さく始めるElasticsearch
PDF
LocalStack
PPTX
Yesod勉強会
PDF
SolrとElasticsearchの比較
PDF
20140930 anything as_code
PPTX
まだDOM操作で消耗してるの?
PDF
閉じタグを超えた先に僕が見た景色とは
PDF
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
PDF
小規模案件で作られた秘伝のタレ
PDF
RESTful APIとしてのRailsとクライアントとしてのJavaScript
PDF
Elasticsearch at CrowdWorks
PPTX
第51回NDS PostgreSQLのデータ型 #nds51
PDF
Elasticsearchで作る形態素解析サーバ
PPTX
CouchDB+OpenSocial - OSC 2009/Fall Tokyo
PPTX
はじめての datadog
PPTX
第52回なんてかんたんなJavaEE
PDF
Web制作勉強会 #2
PDF
Re-frame and A-Frame
PDF
MySQLのリアルタイムモニタリングツールを作った話
PDF
Anemoneによるクローラー入門
MySQLユーザ視点での小さく始めるElasticsearch
LocalStack
Yesod勉強会
SolrとElasticsearchの比較
20140930 anything as_code
まだDOM操作で消耗してるの?
閉じタグを超えた先に僕が見た景色とは
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
小規模案件で作られた秘伝のタレ
RESTful APIとしてのRailsとクライアントとしてのJavaScript
Elasticsearch at CrowdWorks
第51回NDS PostgreSQLのデータ型 #nds51
Elasticsearchで作る形態素解析サーバ
CouchDB+OpenSocial - OSC 2009/Fall Tokyo
はじめての datadog
第52回なんてかんたんなJavaEE
Web制作勉強会 #2
Re-frame and A-Frame
MySQLのリアルタイムモニタリングツールを作った話
Anemoneによるクローラー入門
Ad

Viewers also liked (20)

PPS
Molino De Güeria
PPT
Perkusiozko Musika Instrumentuak
PPSX
Canvi Climatic
PPT
Presentation1
DOC
MUJERES
PDF
X3D - VRLM Task
PDF
Folksonomie
PDF
ROLLER SHUTTER SYSTEMS
PPS
Dancing With Wolves
PPS
The Angels Song
DOC
Gprs基本原理
PPTX
Kleiwegkwartier Presentation
PDF
Kakapo slideshow by Dharia & Michenna
PDF
Kakapo slideshow
PPT
Camiñando a cegas
PPS
The Exodus Song
PPS
Like A Rolling Stone
PPS
Txorro Morro Piko Tailo Ke
PDF
Kakapo slideshow by Izak and Ezra
Molino De Güeria
Perkusiozko Musika Instrumentuak
Canvi Climatic
Presentation1
MUJERES
X3D - VRLM Task
Folksonomie
ROLLER SHUTTER SYSTEMS
Dancing With Wolves
The Angels Song
Gprs基本原理
Kleiwegkwartier Presentation
Kakapo slideshow by Dharia & Michenna
Kakapo slideshow
Camiñando a cegas
The Exodus Song
Like A Rolling Stone
Txorro Morro Piko Tailo Ke
Kakapo slideshow by Izak and Ezra
Ad

Similar to Couch Db勉強会0623 by yssk22 (20)

PDF
Couch DB for 197X
PDF
私の考えるドキュメント指向
PDF
データマイニング+WEB勉強会資料第6回
PDF
CouchDBをヤラナイカ
PPT
もうひとつのNo sql couchdbとは
PDF
CouchDB JP & BigCouch
PDF
カウチなやつら CouchDB in the room
KEY
沖縄Web+db勉強会 20121026
PDF
Osc2008 Opensuse Moonlinx
PDF
Fluentd Casual Talks LT #fluentd #fluentdcasual
PPTX
Tech fun rails_workshop
PDF
Couch DB in 15minutes
PDF
PPTX
WebAppDev勉強会 #2 at cafe? IKAGAWA DO
PDF
Heroku Postgres
PDF
PDF
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
PDF
Cakephp
PDF
Cloudian nosql casestudy_20120318
KEY
Ojag20120811
Couch DB for 197X
私の考えるドキュメント指向
データマイニング+WEB勉強会資料第6回
CouchDBをヤラナイカ
もうひとつのNo sql couchdbとは
CouchDB JP & BigCouch
カウチなやつら CouchDB in the room
沖縄Web+db勉強会 20121026
Osc2008 Opensuse Moonlinx
Fluentd Casual Talks LT #fluentd #fluentdcasual
Tech fun rails_workshop
Couch DB in 15minutes
WebAppDev勉強会 #2 at cafe? IKAGAWA DO
Heroku Postgres
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
Cakephp
Cloudian nosql casestudy_20120318
Ojag20120811

More from Yohei Sasaki (15)

KEY
20120317 CloudFoundry #pyfes
KEY
CloudFoundry@home
KEY
MongoDB on CloudFoundry
KEY
MongoDB on CloudFoundry
PDF
membase
PDF
Bp study39 nodejs
PPTX
BPStudy32 CouchDB 再入門
KEY
CouchDB
PPTX
RelaxCafe@CouchDB break.4
PPTX
Media On Couch
PPTX
CouchDB+OpenSocial - OSC 2009/Fall Tokyo (En)
PPTX
前回のまとめ
PPTX
Finding Your Data with Views
PPTX
Why CouchDB
PDF
Couch Db.0.9.0.Pub
20120317 CloudFoundry #pyfes
CloudFoundry@home
MongoDB on CloudFoundry
MongoDB on CloudFoundry
membase
Bp study39 nodejs
BPStudy32 CouchDB 再入門
CouchDB
RelaxCafe@CouchDB break.4
Media On Couch
CouchDB+OpenSocial - OSC 2009/Fall Tokyo (En)
前回のまとめ
Finding Your Data with Views
Why CouchDB
Couch Db.0.9.0.Pub

Couch Db勉強会0623 by yssk22

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