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

What's hot (20)

MySQLユーザ視点での小さく始めるElasticsearch
MySQLユーザ視点での小さく始めるElasticsearchMySQLユーザ視点での小さく始めるElasticsearch
MySQLユーザ視点での小さく始めるElasticsearch
Kentaro Yoshida
 
LocalStack
LocalStackLocalStack
LocalStack
chibochibo
 
Yesod勉強会
Yesod勉強会Yesod勉強会
Yesod勉強会
Hideyuki Tanaka
 
SolrとElasticsearchの比較
SolrとElasticsearchの比較SolrとElasticsearchの比較
SolrとElasticsearchの比較
genta kaneyama
 
20140930 anything as_code
20140930 anything as_code20140930 anything as_code
20140930 anything as_code
Sugawara Genki
 
まだDOM操作で消耗してるの?
まだDOM操作で消耗してるの?まだDOM操作で消耗してるの?
まだDOM操作で消耗してるの?
IRI MO
 
閉じタグを超えた先に僕が見た景色とは
閉じタグを超えた先に僕が見た景色とは閉じタグを超えた先に僕が見た景色とは
閉じタグを超えた先に僕が見た景色とは
Muyuu Fujita
 
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
Kentaro Yoshida
 
小規模案件で作られた秘伝のタレ
小規模案件で作られた秘伝のタレ小規模案件で作られた秘伝のタレ
小規模案件で作られた秘伝のタレ
Muyuu Fujita
 
RESTful APIとしてのRailsとクライアントとしてのJavaScript
RESTful APIとしてのRailsとクライアントとしてのJavaScriptRESTful APIとしてのRailsとクライアントとしてのJavaScript
RESTful APIとしてのRailsとクライアントとしてのJavaScript
Naoto Koshikawa
 
Elasticsearch at CrowdWorks
Elasticsearch at CrowdWorksElasticsearch at CrowdWorks
Elasticsearch at CrowdWorks
佑介 九岡
 
第51回NDS PostgreSQLのデータ型 #nds51
第51回NDS PostgreSQLのデータ型 #nds51第51回NDS PostgreSQLのデータ型 #nds51
第51回NDS PostgreSQLのデータ型 #nds51
civicpg
 
Elasticsearchで作る形態素解析サーバ
Elasticsearchで作る形態素解析サーバElasticsearchで作る形態素解析サーバ
Elasticsearchで作る形態素解析サーバ
Shinsuke Sugaya
 
CouchDB+OpenSocial - OSC 2009/Fall Tokyo
CouchDB+OpenSocial - OSC 2009/Fall TokyoCouchDB+OpenSocial - OSC 2009/Fall Tokyo
CouchDB+OpenSocial - OSC 2009/Fall Tokyo
Yohei Sasaki
 
はじめての datadog
はじめての datadogはじめての datadog
はじめての datadog
Naoya Nakazawa
 
第52回なんてかんたんなJavaEE
第52回なんてかんたんなJavaEE第52回なんてかんたんなJavaEE
第52回なんてかんたんなJavaEE
civicpg
 
Web制作勉強会 #2
Web制作勉強会 #2Web制作勉強会 #2
Web制作勉強会 #2
Moto Yan
 
Re-frame and A-Frame
Re-frame and A-FrameRe-frame and A-Frame
Re-frame and A-Frame
Kazuhiro Hara
 
MySQLのリアルタイムモニタリングツールを作った話
MySQLのリアルタイムモニタリングツールを作った話MySQLのリアルタイムモニタリングツールを作った話
MySQLのリアルタイムモニタリングツールを作った話
Kentaro Kitagawa
 
Anemoneによるクローラー入門
Anemoneによるクローラー入門Anemoneによるクローラー入門
Anemoneによるクローラー入門
Tasuku Nakano
 
MySQLユーザ視点での小さく始めるElasticsearch
MySQLユーザ視点での小さく始めるElasticsearchMySQLユーザ視点での小さく始めるElasticsearch
MySQLユーザ視点での小さく始めるElasticsearch
Kentaro Yoshida
 
SolrとElasticsearchの比較
SolrとElasticsearchの比較SolrとElasticsearchの比較
SolrとElasticsearchの比較
genta kaneyama
 
20140930 anything as_code
20140930 anything as_code20140930 anything as_code
20140930 anything as_code
Sugawara Genki
 
まだDOM操作で消耗してるの?
まだDOM操作で消耗してるの?まだDOM操作で消耗してるの?
まだDOM操作で消耗してるの?
IRI MO
 
閉じタグを超えた先に僕が見た景色とは
閉じタグを超えた先に僕が見た景色とは閉じタグを超えた先に僕が見た景色とは
閉じタグを超えた先に僕が見た景色とは
Muyuu Fujita
 
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
Kentaro Yoshida
 
小規模案件で作られた秘伝のタレ
小規模案件で作られた秘伝のタレ小規模案件で作られた秘伝のタレ
小規模案件で作られた秘伝のタレ
Muyuu Fujita
 
RESTful APIとしてのRailsとクライアントとしてのJavaScript
RESTful APIとしてのRailsとクライアントとしてのJavaScriptRESTful APIとしてのRailsとクライアントとしてのJavaScript
RESTful APIとしてのRailsとクライアントとしてのJavaScript
Naoto Koshikawa
 
Elasticsearch at CrowdWorks
Elasticsearch at CrowdWorksElasticsearch at CrowdWorks
Elasticsearch at CrowdWorks
佑介 九岡
 
第51回NDS PostgreSQLのデータ型 #nds51
第51回NDS PostgreSQLのデータ型 #nds51第51回NDS PostgreSQLのデータ型 #nds51
第51回NDS PostgreSQLのデータ型 #nds51
civicpg
 
Elasticsearchで作る形態素解析サーバ
Elasticsearchで作る形態素解析サーバElasticsearchで作る形態素解析サーバ
Elasticsearchで作る形態素解析サーバ
Shinsuke Sugaya
 
CouchDB+OpenSocial - OSC 2009/Fall Tokyo
CouchDB+OpenSocial - OSC 2009/Fall TokyoCouchDB+OpenSocial - OSC 2009/Fall Tokyo
CouchDB+OpenSocial - OSC 2009/Fall Tokyo
Yohei Sasaki
 
はじめての datadog
はじめての datadogはじめての datadog
はじめての datadog
Naoya Nakazawa
 
第52回なんてかんたんなJavaEE
第52回なんてかんたんなJavaEE第52回なんてかんたんなJavaEE
第52回なんてかんたんなJavaEE
civicpg
 
Web制作勉強会 #2
Web制作勉強会 #2Web制作勉強会 #2
Web制作勉強会 #2
Moto Yan
 
Re-frame and A-Frame
Re-frame and A-FrameRe-frame and A-Frame
Re-frame and A-Frame
Kazuhiro Hara
 
MySQLのリアルタイムモニタリングツールを作った話
MySQLのリアルタイムモニタリングツールを作った話MySQLのリアルタイムモニタリングツールを作った話
MySQLのリアルタイムモニタリングツールを作った話
Kentaro Kitagawa
 
Anemoneによるクローラー入門
Anemoneによるクローラー入門Anemoneによるクローラー入門
Anemoneによるクローラー入門
Tasuku Nakano
 

Viewers also liked (20)

Molino De Güeria
Molino De GüeriaMolino De Güeria
Molino De Güeria
CP Baudilio Arce
 
Perkusiozko Musika Instrumentuak
Perkusiozko Musika InstrumentuakPerkusiozko Musika Instrumentuak
Perkusiozko Musika Instrumentuak
guest8432f7
 
X3D - VRLM Task
X3D - VRLM TaskX3D - VRLM Task
X3D - VRLM Task
Andreas M. Papaderos
 
Folksonomie
FolksonomieFolksonomie
Folksonomie
Daniele
 
ROLLER SHUTTER SYSTEMS
ROLLER SHUTTER SYSTEMS ROLLER SHUTTER SYSTEMS
ROLLER SHUTTER SYSTEMS
DoorHan
 
Dancing With Wolves
Dancing With WolvesDancing With Wolves
Dancing With Wolves
Javier
 
The Angels Song
The Angels SongThe Angels Song
The Angels Song
Javier
 
Gprs基本原理
Gprs基本原理Gprs基本原理
Gprs基本原理
fossnow
 
Kleiwegkwartier Presentation
Kleiwegkwartier PresentationKleiwegkwartier Presentation
Kleiwegkwartier Presentation
InterlocuteurM
 
Kakapo slideshow by Dharia & Michenna
Kakapo slideshow by Dharia & MichennaKakapo slideshow by Dharia & Michenna
Kakapo slideshow by Dharia & Michenna
Takahe One
 
Kakapo slideshow
Kakapo slideshowKakapo slideshow
Kakapo slideshow
Takahe One
 
Camiñando a cegas
Camiñando a cegasCamiñando a cegas
Camiñando a cegas
jr.lainho
 
The Exodus Song
The Exodus SongThe Exodus Song
The Exodus Song
Javier
 
Like A Rolling Stone
Like A Rolling StoneLike A Rolling Stone
Like A Rolling Stone
Javier
 
Txorro Morro Piko Tailo Ke
Txorro Morro Piko Tailo KeTxorro Morro Piko Tailo Ke
Txorro Morro Piko Tailo Ke
Javier
 
Kakapo slideshow by Izak and Ezra
Kakapo slideshow by Izak and EzraKakapo slideshow by Izak and Ezra
Kakapo slideshow by Izak and Ezra
Takahe One
 
Perkusiozko Musika Instrumentuak
Perkusiozko Musika InstrumentuakPerkusiozko Musika Instrumentuak
Perkusiozko Musika Instrumentuak
guest8432f7
 
Folksonomie
FolksonomieFolksonomie
Folksonomie
Daniele
 
ROLLER SHUTTER SYSTEMS
ROLLER SHUTTER SYSTEMS ROLLER SHUTTER SYSTEMS
ROLLER SHUTTER SYSTEMS
DoorHan
 
Dancing With Wolves
Dancing With WolvesDancing With Wolves
Dancing With Wolves
Javier
 
The Angels Song
The Angels SongThe Angels Song
The Angels Song
Javier
 
Gprs基本原理
Gprs基本原理Gprs基本原理
Gprs基本原理
fossnow
 
Kleiwegkwartier Presentation
Kleiwegkwartier PresentationKleiwegkwartier Presentation
Kleiwegkwartier Presentation
InterlocuteurM
 
Kakapo slideshow by Dharia & Michenna
Kakapo slideshow by Dharia & MichennaKakapo slideshow by Dharia & Michenna
Kakapo slideshow by Dharia & Michenna
Takahe One
 
Kakapo slideshow
Kakapo slideshowKakapo slideshow
Kakapo slideshow
Takahe One
 
Camiñando a cegas
Camiñando a cegasCamiñando a cegas
Camiñando a cegas
jr.lainho
 
The Exodus Song
The Exodus SongThe Exodus Song
The Exodus Song
Javier
 
Like A Rolling Stone
Like A Rolling StoneLike A Rolling Stone
Like A Rolling Stone
Javier
 
Txorro Morro Piko Tailo Ke
Txorro Morro Piko Tailo KeTxorro Morro Piko Tailo Ke
Txorro Morro Piko Tailo Ke
Javier
 
Kakapo slideshow by Izak and Ezra
Kakapo slideshow by Izak and EzraKakapo slideshow by Izak and Ezra
Kakapo slideshow by Izak and Ezra
Takahe One
 

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

2016/12/17 ASP.NET フロントエンドタスク入門
 2016/12/17 ASP.NET フロントエンドタスク入門 2016/12/17 ASP.NET フロントエンドタスク入門
2016/12/17 ASP.NET フロントエンドタスク入門
miso- soup3
 
Rails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd editionRails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd edition
Goh Matsumoto
 
Mongodb
MongodbMongodb
Mongodb
Satoru Mikami
 
Rails3.1rc4を試してみた
Rails3.1rc4を試してみたRails3.1rc4を試してみた
Rails3.1rc4を試してみた
Takahiro Hidaka
 
G * magazine 0
G * magazine 0G * magazine 0
G * magazine 0
Tsuyoshi Yamamoto
 
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireSDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 Whire
Akio Katayama
 
LambdaとMobileの美味しいかもしれない関係
LambdaとMobileの美味しいかもしれない関係LambdaとMobileの美味しいかもしれない関係
LambdaとMobileの美味しいかもしれない関係
Hiraku Komuro
 
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
崇之 清水
 
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方
Yuki Morishita
 
HTML5でオフラインWebアプリケーションを作ろう
HTML5でオフラインWebアプリケーションを作ろうHTML5でオフラインWebアプリケーションを作ろう
HTML5でオフラインWebアプリケーションを作ろう
yoshikawa_t
 
Bp study39 nodejs
Bp study39 nodejsBp study39 nodejs
Bp study39 nodejs
Yohei Sasaki
 
C#実装から見るDDD(ドメイン駆動設計)
C#実装から見るDDD(ドメイン駆動設計)C#実装から見るDDD(ドメイン駆動設計)
C#実装から見るDDD(ドメイン駆動設計)
Takuya Kawabe
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
Toru Yamaguchi
 
AWS SDK for Haskell開発
AWS SDK for Haskell開発AWS SDK for Haskell開発
AWS SDK for Haskell開発
Nomura Yusuke
 
2018 04-14-cockroachdb-20-now-available
2018 04-14-cockroachdb-20-now-available2018 04-14-cockroachdb-20-now-available
2018 04-14-cockroachdb-20-now-available
Naoto Gohko
 
scala+liftで遊ぼう
scala+liftで遊ぼうscala+liftで遊ぼう
scala+liftで遊ぼう
youku
 
エコなWebサーバー
エコなWebサーバーエコなWebサーバー
エコなWebサーバー
emasaka
 
Couch DB in 15minutes
Couch DB in 15minutesCouch DB in 15minutes
Couch DB in 15minutes
Yohei Sasaki
 
.NET最先端技術によるハイパフォーマンスウェブアプリケーション
.NET最先端技術によるハイパフォーマンスウェブアプリケーション.NET最先端技術によるハイパフォーマンスウェブアプリケーション
.NET最先端技術によるハイパフォーマンスウェブアプリケーション
Yoshifumi Kawai
 
2016/12/17 ASP.NET フロントエンドタスク入門
 2016/12/17 ASP.NET フロントエンドタスク入門 2016/12/17 ASP.NET フロントエンドタスク入門
2016/12/17 ASP.NET フロントエンドタスク入門
miso- soup3
 
Rails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd editionRails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd edition
Goh Matsumoto
 
Rails3.1rc4を試してみた
Rails3.1rc4を試してみたRails3.1rc4を試してみた
Rails3.1rc4を試してみた
Takahiro Hidaka
 
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireSDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 Whire
Akio Katayama
 
LambdaとMobileの美味しいかもしれない関係
LambdaとMobileの美味しいかもしれない関係LambdaとMobileの美味しいかもしれない関係
LambdaとMobileの美味しいかもしれない関係
Hiraku Komuro
 
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
崇之 清水
 
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方
Yuki Morishita
 
HTML5でオフラインWebアプリケーションを作ろう
HTML5でオフラインWebアプリケーションを作ろうHTML5でオフラインWebアプリケーションを作ろう
HTML5でオフラインWebアプリケーションを作ろう
yoshikawa_t
 
C#実装から見るDDD(ドメイン駆動設計)
C#実装から見るDDD(ドメイン駆動設計)C#実装から見るDDD(ドメイン駆動設計)
C#実装から見るDDD(ドメイン駆動設計)
Takuya Kawabe
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
Toru Yamaguchi
 
AWS SDK for Haskell開発
AWS SDK for Haskell開発AWS SDK for Haskell開発
AWS SDK for Haskell開発
Nomura Yusuke
 
2018 04-14-cockroachdb-20-now-available
2018 04-14-cockroachdb-20-now-available2018 04-14-cockroachdb-20-now-available
2018 04-14-cockroachdb-20-now-available
Naoto Gohko
 
scala+liftで遊ぼう
scala+liftで遊ぼうscala+liftで遊ぼう
scala+liftで遊ぼう
youku
 
エコなWebサーバー
エコなWebサーバーエコなWebサーバー
エコなWebサーバー
emasaka
 
Couch DB in 15minutes
Couch DB in 15minutesCouch DB in 15minutes
Couch DB in 15minutes
Yohei Sasaki
 
.NET最先端技術によるハイパフォーマンスウェブアプリケーション
.NET最先端技術によるハイパフォーマンスウェブアプリケーション.NET最先端技術によるハイパフォーマンスウェブアプリケーション
.NET最先端技術によるハイパフォーマンスウェブアプリケーション
Yoshifumi Kawai
 

More from Yohei Sasaki (15)

20120317 CloudFoundry #pyfes
20120317 CloudFoundry #pyfes20120317 CloudFoundry #pyfes
20120317 CloudFoundry #pyfes
Yohei Sasaki
 
CloudFoundry@home
CloudFoundry@homeCloudFoundry@home
CloudFoundry@home
Yohei Sasaki
 
MongoDB on CloudFoundry
MongoDB on CloudFoundryMongoDB on CloudFoundry
MongoDB on CloudFoundry
Yohei Sasaki
 
MongoDB on CloudFoundry
MongoDB on CloudFoundryMongoDB on CloudFoundry
MongoDB on CloudFoundry
Yohei Sasaki
 
membase
membasemembase
membase
Yohei Sasaki
 
CouchDB JP & BigCouch
CouchDB JP & BigCouchCouchDB JP & BigCouch
CouchDB JP & BigCouch
Yohei Sasaki
 
BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門
Yohei Sasaki
 
CouchDB
CouchDBCouchDB
CouchDB
Yohei Sasaki
 
RelaxCafe@CouchDB break.4
RelaxCafe@CouchDB break.4RelaxCafe@CouchDB break.4
RelaxCafe@CouchDB break.4
Yohei Sasaki
 
Media On Couch
Media On CouchMedia On Couch
Media On Couch
Yohei Sasaki
 
CouchDB+OpenSocial - OSC 2009/Fall Tokyo (En)
CouchDB+OpenSocial - OSC 2009/Fall Tokyo (En)CouchDB+OpenSocial - OSC 2009/Fall Tokyo (En)
CouchDB+OpenSocial - OSC 2009/Fall Tokyo (En)
Yohei Sasaki
 
前回のまとめ
前回のまとめ前回のまとめ
前回のまとめ
Yohei Sasaki
 
Finding Your Data with Views
Finding Your Data with ViewsFinding Your Data with Views
Finding Your Data with Views
Yohei Sasaki
 
Why CouchDB
Why CouchDBWhy CouchDB
Why CouchDB
Yohei Sasaki
 
Couch Db.0.9.0.Pub
Couch Db.0.9.0.PubCouch Db.0.9.0.Pub
Couch Db.0.9.0.Pub
Yohei Sasaki
 
20120317 CloudFoundry #pyfes
20120317 CloudFoundry #pyfes20120317 CloudFoundry #pyfes
20120317 CloudFoundry #pyfes
Yohei Sasaki
 
MongoDB on CloudFoundry
MongoDB on CloudFoundryMongoDB on CloudFoundry
MongoDB on CloudFoundry
Yohei Sasaki
 
MongoDB on CloudFoundry
MongoDB on CloudFoundryMongoDB on CloudFoundry
MongoDB on CloudFoundry
Yohei Sasaki
 
CouchDB JP & BigCouch
CouchDB JP & BigCouchCouchDB JP & BigCouch
CouchDB JP & BigCouch
Yohei Sasaki
 
BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門
Yohei Sasaki
 
RelaxCafe@CouchDB break.4
RelaxCafe@CouchDB break.4RelaxCafe@CouchDB break.4
RelaxCafe@CouchDB break.4
Yohei Sasaki
 
CouchDB+OpenSocial - OSC 2009/Fall Tokyo (En)
CouchDB+OpenSocial - OSC 2009/Fall Tokyo (En)CouchDB+OpenSocial - OSC 2009/Fall Tokyo (En)
CouchDB+OpenSocial - OSC 2009/Fall Tokyo (En)
Yohei Sasaki
 
前回のまとめ
前回のまとめ前回のまとめ
前回のまとめ
Yohei Sasaki
 
Finding Your Data with Views
Finding Your Data with ViewsFinding Your Data with Views
Finding Your Data with Views
Yohei Sasaki
 
Couch Db.0.9.0.Pub
Couch Db.0.9.0.PubCouch Db.0.9.0.Pub
Couch Db.0.9.0.Pub
Yohei Sasaki
 

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 の世界  セキュリティは[あとで]。  とりあえず、リラックスすれば、世の中みんな いい人しかいないと思えてくる!!!