SlideShare ist ein Scribd-Unternehmen logo
1 von 27
WebアプリのDBスキーマレス化がRubyにぴったりな件 RubyKansai #37 松本一輝 Lang-8,Inc.
自己紹介 ,[object Object]
Ruby歴,[object Object]
SimpleResource,[object Object]
キャッシュ機構の複雑さWebアプリ開発時の2つの問題点
DBスキーマ拡張の手間 (一例:blogアプリ) Entryモデル Commentモデル Commentモデル
Commentに写真が張れる Commentモデル Commentモデル CommentPic モデルを導入
has_many has_many
Entry一覧ページに写真枚数カウンタを追加するには? Entryモデル 5枚 Entryモデル 2枚 Entryモデル 3枚
ダメな例その1 : ナイーブ Comment.find_all_by_entry_id.map{|c| CommentPic.find_all_by_comment_id(c.id).size }.sum -> SQLクエリが、Entry1つにつきコメントの数だけ 生じる。非効率。
(個人的には)ダメな例その2 : SQLJOIN SELECT COUNT(*) FROM comment_pics LEFT JOIN comments ON comment_pics.comment_id = comments.id LEFT JOIN entries ON comment.entry_id = entries.id WHERE entries.id = entry_id -> クエリが遅い。 entries、comments、comment_pics各テーブルが すべて同一DB上にあることが前提。 スケールがめんどくさそう。
一般的手法1:DBスキーマの非正規化 entriesテーブルに、写真カウンタフィールドを追加。 has_many has_many
一般的手法2:KVSによる オブジェクトキャッシュ App Server Read Write Write DB Server Memcached Server
問題点 ,[object Object]
複雑なキャッシュ機構
効率の悪いキャッシュ生成
R/W比が低いアプリケーションについては効果薄(例:SNS),[object Object]
SimpleResource
SimpleResource? ,[object Object]
JSONシリアライズ保存
ActiveRecord風インターフェース
バックエンドは任意のKVSDB (現在MySQLのみ対応)
透過的にMemcachedによりキャッシュなDBインターフェースライブラリ
使用例 –blogアプリ has_many has_many { “id” => 12763, “body” => “Hello, world!”, “comments” => [ {“id”=>735634, “body” => “comment1”, “pics” => [“pic1.jpg”]}, 		    {“id” => 735635, “body” => “comment2”} ] } スキーマレス化
class Entry < SimpleResource::Base   include SimpleResource::MysqlEntityBackend end  entry = Entry.create("subject" => "test", 			    "body" => "hello world!", 			    "author" => "kazuki") entry.id  #=> 54  (create時にidを指定しなかった場合は、自動採番される)
Entryへのコメントの追加   comment = {"body" => "nice1!",  "from" => "kazuko", 		  "pics" => ["pic1.jpg", "pic2.jpg"]}   entry = Entry.find(12763) entry.comments ||= [] entry.comments << comment entry.save ダメな例
プロセス1 プロセス2  entry = Entry.find(12763) entry.comments ||= [] entry.comments << “foo” entry.save ① ② entry = Entry.find(12763) entry.comments ||= [] entry.comments << “bar” entry.save ③ ④ プロセス1の書き込みが 破壊される

Weitere ähnliche Inhalte

Was ist angesagt?

Xamarin で クラシックデスクトップ 2
Xamarin で クラシックデスクトップ 2Xamarin で クラシックデスクトップ 2
Xamarin で クラシックデスクトップ 2
m ishizaki
 
Win/Mac/Android/iOS向け クロスプラットフォーム開発にXamarinが うまくハマりそうだった話
Win/Mac/Android/iOS向けクロスプラットフォーム開発にXamarinがうまくハマりそうだった話Win/Mac/Android/iOS向けクロスプラットフォーム開発にXamarinがうまくハマりそうだった話
Win/Mac/Android/iOS向け クロスプラットフォーム開発にXamarinが うまくハマりそうだった話
Takuya Kikuchi
 
HTMLを1行も書かずにwebアプリを作ってみました
HTMLを1行も書かずにwebアプリを作ってみましたHTMLを1行も書かずにwebアプリを作ってみました
HTMLを1行も書かずにwebアプリを作ってみました
Shinichi Hirauchi
 
090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa
Tomoki Maeda
 

Was ist angesagt? (17)

Movable Type から BOT を作ろう! ~ Data API と Microsoft BOT Framework ~
Movable Type から BOT を作ろう! ~ Data API と Microsoft BOT Framework ~Movable Type から BOT を作ろう! ~ Data API と Microsoft BOT Framework ~
Movable Type から BOT を作ろう! ~ Data API と Microsoft BOT Framework ~
 
Xamarin で クラシックデスクトップ 2
Xamarin で クラシックデスクトップ 2Xamarin で クラシックデスクトップ 2
Xamarin で クラシックデスクトップ 2
 
Visual Studio + xamarin で始めるモバイル アプリ開発
Visual Studio + xamarin で始めるモバイル アプリ開発Visual Studio + xamarin で始めるモバイル アプリ開発
Visual Studio + xamarin で始めるモバイル アプリ開発
 
Win/Mac/Android/iOS向け クロスプラットフォーム開発にXamarinが うまくハマりそうだった話
Win/Mac/Android/iOS向けクロスプラットフォーム開発にXamarinがうまくハマりそうだった話Win/Mac/Android/iOS向けクロスプラットフォーム開発にXamarinがうまくハマりそうだった話
Win/Mac/Android/iOS向け クロスプラットフォーム開発にXamarinが うまくハマりそうだった話
 
Windows ストア アプリの上手な作り方
Windows ストア アプリの上手な作り方Windows ストア アプリの上手な作り方
Windows ストア アプリの上手な作り方
 
ゆるふわ Xamarin Tips
ゆるふわ Xamarin Tipsゆるふわ Xamarin Tips
ゆるふわ Xamarin Tips
 
20171202 Xamarinの歩き方
20171202 Xamarinの歩き方20171202 Xamarinの歩き方
20171202 Xamarinの歩き方
 
Developers.io.札幌 xamarinってどうよ
Developers.io.札幌 xamarinってどうよDevelopers.io.札幌 xamarinってどうよ
Developers.io.札幌 xamarinってどうよ
 
HTMLを1行も書かずにwebアプリを作ってみました
HTMLを1行も書かずにwebアプリを作ってみましたHTMLを1行も書かずにwebアプリを作ってみました
HTMLを1行も書かずにwebアプリを作ってみました
 
TypeScript vs flow
TypeScript vs flowTypeScript vs flow
TypeScript vs flow
 
WPF開発での陥りやすい罠
WPF開発での陥りやすい罠WPF開発での陥りやすい罠
WPF開発での陥りやすい罠
 
モバイル向けクロスプラットフォーム開発ツール Xamarin の概要とその利点
モバイル向けクロスプラットフォーム開発ツール Xamarin の概要とその利点モバイル向けクロスプラットフォーム開発ツール Xamarin の概要とその利点
モバイル向けクロスプラットフォーム開発ツール Xamarin の概要とその利点
 
いまさら学ぶMVVMパターン
いまさら学ぶMVVMパターンいまさら学ぶMVVMパターン
いまさら学ぶMVVMパターン
 
090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa
 
JS で Bot つくろうぜ! ~刮目せよ!、これがMSのBot Framewok だ!!~
JS で Bot つくろうぜ! ~刮目せよ!、これがMSのBot Framewok だ!!~JS で Bot つくろうぜ! ~刮目せよ!、これがMSのBot Framewok だ!!~
JS で Bot つくろうぜ! ~刮目せよ!、これがMSのBot Framewok だ!!~
 
BoxViewの美味しい食べ方
BoxViewの美味しい食べ方BoxViewの美味しい食べ方
BoxViewの美味しい食べ方
 
Xamarin から使う Azure
Xamarin から使う AzureXamarin から使う Azure
Xamarin から使う Azure
 

Ähnlich wie SimpleResource

Rubyで作るtwitter風webアプリケーション
Rubyで作るtwitter風webアプリケーションRubyで作るtwitter風webアプリケーション
Rubyで作るtwitter風webアプリケーション
Naoto Hori
 
Windowsストア[DB]アプリ入門
Windowsストア[DB]アプリ入門Windowsストア[DB]アプリ入門
Windowsストア[DB]アプリ入門
Akira Hatsune
 
マイクロソフトWeb開発の今と今後
マイクロソフトWeb開発の今と今後マイクロソフトWeb開発の今と今後
マイクロソフトWeb開発の今と今後
Akira Inoue
 
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD PatternApplication Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Atsushi Kambara
 
「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺
Yusuke Wada
 

Ähnlich wie SimpleResource (20)

Wcosaka2012concrete5
Wcosaka2012concrete5Wcosaka2012concrete5
Wcosaka2012concrete5
 
Web App Framework at SwapSkills vol28
Web App Framework at SwapSkills vol28Web App Framework at SwapSkills vol28
Web App Framework at SwapSkills vol28
 
Rubyで作るtwitter風webアプリケーション
Rubyで作るtwitter風webアプリケーションRubyで作るtwitter風webアプリケーション
Rubyで作るtwitter風webアプリケーション
 
MAF2013 Enterprise Windows 8 – Architecture for rapid development of WinRT apps
MAF2013 Enterprise Windows 8 – Architecture for rapid development of WinRT appsMAF2013 Enterprise Windows 8 – Architecture for rapid development of WinRT apps
MAF2013 Enterprise Windows 8 – Architecture for rapid development of WinRT apps
 
Htmlコーディングの効率化 前編
Htmlコーディングの効率化 前編Htmlコーディングの効率化 前編
Htmlコーディングの効率化 前編
 
Windowsストア[DB]アプリ入門
Windowsストア[DB]アプリ入門Windowsストア[DB]アプリ入門
Windowsストア[DB]アプリ入門
 
About rails 3
About rails 3About rails 3
About rails 3
 
Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1
Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1
Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1
 
マイクロソフトWeb開発の今と今後
マイクロソフトWeb開発の今と今後マイクロソフトWeb開発の今と今後
マイクロソフトWeb開発の今と今後
 
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版
 
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
 
Computer Vision と Translator Text API 使ってみた
Computer Vision と Translator Text API 使ってみたComputer Vision と Translator Text API 使ってみた
Computer Vision と Translator Text API 使ってみた
 
Windows Azure Mobile Servicesによるアプリ構築
Windows Azure Mobile Servicesによるアプリ構築Windows Azure Mobile Servicesによるアプリ構築
Windows Azure Mobile Servicesによるアプリ構築
 
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD PatternApplication Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD Pattern
 
フロントエンド技術の変遷
フロントエンド技術の変遷フロントエンド技術の変遷
フロントエンド技術の変遷
 
静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話
静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話
静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話
 
LINE お絵描きアプリハンズオン
LINE お絵描きアプリハンズオンLINE お絵描きアプリハンズオン
LINE お絵描きアプリハンズオン
 
UnicastWS vol.2
UnicastWS vol.2UnicastWS vol.2
UnicastWS vol.2
 
Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介
 
「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺
 

Kürzlich hochgeladen

Kürzlich hochgeladen (11)

論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 

SimpleResource