More Related Content
LODを使ったサイトとプラグインを作ってみた話[WordBenchOsaka] sql_require_primary_keyを使って主キーを必須にさせる React系(別言語含む)の サーバーサイドレンダリング について考えよう Scotty を利用した "ゆるふわ" Web サービス作成 What's hot (20)
MySQLユーザ視点での小さく始めるElasticsearch 20140930 anything as_code MySQLと組み合わせて始める全文検索プロダクト"elasticsearch" RESTful APIとしてのRailsとクライアントとしてのJavaScript Elasticsearch at CrowdWorks 第51回NDS PostgreSQLのデータ型 #nds51 CouchDB+OpenSocial - OSC 2009/Fall Tokyo MySQLのリアルタイムモニタリングツールを作った話 Viewers also liked (20)
Perkusiozko Musika Instrumentuak Kleiwegkwartier Presentation Kakapo slideshow by Dharia & Michenna Txorro Morro Piko Tailo Ke Kakapo slideshow by Izak and Ezra Similar to Couch Db勉強会0623 by yssk22 (20)
カウチなやつら CouchDB in the room Osc2008 Opensuse Moonlinx Fluentd Casual Talks LT #fluentd #fluentdcasual WebAppDev勉強会 #2 at cafe? IKAGAWA DO ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発 Cloudian nosql casestudy_20120318 More from Yohei Sasaki (15)
20120317 CloudFoundry #pyfes RelaxCafe@CouchDB break.4 CouchDB+OpenSocial - OSC 2009/Fall Tokyo (En) Finding Your Data with Views 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
- 6. OpenSocial + CouchDB
= Open Web Application
OpenSocial
自由にアプリケーションを持ち運べる
CouchDB
自由にデータを持ち運べる
データとアプリケーションに
明確な境界など要らない?
- 7. 2009/06/23
webjourney.org
Yohei Sasaki / yssk22
CouchDB で始める
ActiveRecord からの脱却
- 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にシリアライズ!
- 14. 抱える問題 = クエリ
GadgetデータをRDBに入れるのは簡単
ADO.NET の場合:: XML列にMapping (SQL Server)
Rails の場合:: YAMLで放り込む
Object → XML/YAML は比較的楽
しかし、クエリで取り出せない罠
XQuery 勉強する暇あったらORMなんか使いませんよ!
玉石混交のユーザーデータをフィルタできないなん
て!!
例えば、Feed Gadgetなら設定されたURLのランキングを
とりたい、とか。
- 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 さえ忘れなければ。
- 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 がいい。
がんばって作ってみたけど、だめでした。