79
NoSQL Ruby で実践 するための n 個の方法

NoSQL を Ruby で実践するための n 個の方法

Embed Size (px)

Citation preview

Page 1: NoSQL を Ruby で実践するための n 個の方法

NoSQL を Ruby で実践するための n 個の方法

Page 2: NoSQL を Ruby で実践するための n 個の方法

NoSQL を Ruby で実践するための 1 個の方法

n = 1 である異論は認めにゃいにゃ

Page 3: NoSQL を Ruby で実践するための n 個の方法

西村 友裕 (@Sixeight)にしむら ともひろ

Page 4: NoSQL を Ruby で実践するための n 個の方法

もくじ

• NoSQL とは

• MongoDB について

• MongoMapper を使う

• まとめ

Page 5: NoSQL を Ruby で実践するための n 個の方法

もくじ

• NoSQL とは

• MongoDB について

• MongoMapper を使う

• まとめ

Page 6: NoSQL を Ruby で実践するための n 個の方法

NoSQL

Page 7: NoSQL を Ruby で実践するための n 個の方法

「SQL 止めようぜ」

Page 8: NoSQL を Ruby で実践するための n 個の方法

「SQL 止めようぜ」×

Page 9: NoSQL を Ruby で実践するための n 個の方法

Not only SQL

Page 10: NoSQL を Ruby で実践するための n 個の方法

リレーショナルでないデータベースの

発展促進運動のこと

Page 11: NoSQL を Ruby で実践するための n 個の方法

リレーショナルでない?

Page 12: NoSQL を Ruby で実践するための n 個の方法

スキーマに縛られない

Page 13: NoSQL を Ruby で実践するための n 個の方法

CREATE TABLE cats ( id int NOT NULL, name text, PRIMARY KEY (id));INSERT INTO cats VALUES (1, “tama”);

Page 14: NoSQL を Ruby で実践するための n 個の方法

CREATE TABLE cats ( id int NOT NULL, name text, PRIMARY KEY (id));INSERT INTO cats VALUES (1, “tama”);

斑の色も入れたいにゃー

Page 15: NoSQL を Ruby で実践するための n 個の方法

$ mongo> db.cats.insert({name: “tama”})

ここまでは一緒にゃ

Page 16: NoSQL を Ruby で実践するための n 個の方法

$ mongo> db.cats.insert({name: “tama”})> db.cats.insert({ name: “goro”, dapple_color: “gray” })> db.cats.find(){ "_id" : ObjectId("4c49118783d1600c126d2147"), "name" : "tama" }{ "_id" : ObjectId("4c49119983d1600c126d2148"), "name" : "goro", "dapple_color" : "gray" }

なんでも入るにゃー

Page 17: NoSQL を Ruby で実践するための n 個の方法

スケールするように設計されている

Page 18: NoSQL を Ruby で実践するための n 個の方法

• Google BigTable

• amazon Dynamo

• HBase

• Apache Casandra

• CounchDB

• MongoDB

• and more

Page 19: NoSQL を Ruby で実践するための n 個の方法

• Google BigTable

• amazon Dynamo

• HBase

• Apache Casandra

• CounchDB

• MongoDB

• and more

オープンソース

Page 20: NoSQL を Ruby で実践するための n 個の方法

• Google BigTable

• amazon Dynamo

• HBase

• Apache Casandra

• CounchDB

• MongoDB

• and more

今日はこれを見るにゃ

Page 21: NoSQL を Ruby で実践するための n 個の方法

もくじ

• NoSQL とは

• MongoDB について

• MongoMapper を使う

• まとめ

Page 22: NoSQL を Ruby で実践するための n 個の方法

MongoDBby 10gen

Page 23: NoSQL を Ruby で実践するための n 個の方法

MongoDB は、C++ で書かれた、オープンソースのドキュメント指向データベースである。 (wikipedia)

Page 24: NoSQL を Ruby で実践するための n 個の方法

MongoDB は、C++ で書かれた、オープンソースのドキュメント指向データベースである。 (wikipedia)

スケーラブル

ハイパフォーマンス

スキーマフリー

Page 25: NoSQL を Ruby で実践するための n 個の方法

• ドキュメント指向ストレージ (the simplicity and power of JSON-like data schemas)

• 動的な クエリー

• 組み込みのオブジェクトと配列をサポートした完全な Index のサポート。

• クエリー プロファイリング

• 速い in-place アップデート

• バイナリデータの効率的な保存 large objects (例:写真や動画)

• レプリケーション とフェイルオーバーのサポート。

• クラウドレベルのスケーラビリティな 自動的なsharding

• 複雑な集約のための MapReduce

• 商用サポート、ホスティング、コンサルティング

公式サイトより

Page 26: NoSQL を Ruby で実践するための n 個の方法

ドキュメント指向

Page 27: NoSQL を Ruby で実践するための n 個の方法

各ドキュメントがスキーマ情報を持つ

Page 28: NoSQL を Ruby で実践するための n 個の方法

Page 29: NoSQL を Ruby で実践するための n 個の方法

まずドキュメントってなに?

Page 30: NoSQL を Ruby で実践するための n 個の方法

コレクション ≒ テーブルドキュメント ≒ レコード

リレーショナルドキュメント指向

Page 31: NoSQL を Ruby で実践するための n 個の方法

各ドキュメントがスキーマ情報を持つ

Page 32: NoSQL を Ruby で実践するための n 個の方法

{ "_id" : ###, "name" : "tama" }

たま

ドキュメント

Page 33: NoSQL を Ruby で実践するための n 個の方法

{ "_id" : ###, "name" : "tama" }{ "_id" : ###, "name" : "goro", "dapple_color" : "gray" }

たま

コレクション

ごろう

Page 34: NoSQL を Ruby で実践するための n 個の方法

{ "_id" : ###, "name" : "tama" }{ "_id" : ###, "name" : "goro", "dapple_color" : "gray" }

たま

ごろう

Page 35: NoSQL を Ruby で実践するための n 個の方法

Page 36: NoSQL を Ruby で実践するための n 個の方法

導入事例

Page 37: NoSQL を Ruby で実践するための n 個の方法

over 200 projects

Page 38: NoSQL を Ruby で実践するための n 個の方法

もくじ

• NoSQL とは

• MongoDB について

• MongoMapper を使う

• まとめ

Page 39: NoSQL を Ruby で実践するための n 個の方法

MongoMapperhttp://github.com/jnunemaker/mongomapper

Page 40: NoSQL を Ruby で実践するための n 個の方法

ActiveRecord に似たAPI

 + 周辺ライブラリの充実

Page 41: NoSQL を Ruby で実践するための n 個の方法

gem install mongo_mapper

簡単にゃ

Page 42: NoSQL を Ruby で実践するための n 個の方法

使う

Page 43: NoSQL を Ruby で実践するための n 個の方法

class Cats include MongoMapper::Document

key :name, Stringend

Page 44: NoSQL を Ruby で実践するための n 個の方法

irb で使う

Page 45: NoSQL を Ruby で実践するための n 個の方法

class Cats include MongoMapper::Document

key :name, Stringend

Page 46: NoSQL を Ruby で実践するための n 個の方法

class Cats include MongoMapper::Document

key :name, Stringend

Page 47: NoSQL を Ruby で実践するための n 個の方法

class Cats include MongoMapper::Document

key :name, Stringend

Page 48: NoSQL を Ruby で実践するための n 個の方法

irb:001:0> Cats.create :name => 'tama'

irb:002:0> Cats.first

=> #<Cats name: "tama", _id: BSON::ObjectID('###')>

irb:003:0> Cats.create :name => 'goro', :dapple_color => ‘gray’

irb:004:0> Cats.count

=> 2

irb:005:0> Cats.first(:name => ‘goro’)

=> #<Cats name: "goro", dapple_color:”gray”,_id: ###>

Page 49: NoSQL を Ruby で実践するための n 個の方法

Array, Binary, Boolean, Date, Float, Hash

Integer, Nil, ObjectId, Set, String, Time

Custom Type, and TypeLess

Page 50: NoSQL を Ruby で実践するための n 個の方法

Array, Binary, Boolean, Date, Float, Hash

Integer, Nil, ObjectId, Set, String, Time

Custom Type, and TypeLess

TypeLessってにゃに?

Page 51: NoSQL を Ruby で実践するための n 個の方法

class Storage include MongoMapper::Document

key :valueend

Page 52: NoSQL を Ruby で実践するための n 個の方法

class Storage include MongoMapper::Document

key :valueend

Page 53: NoSQL を Ruby で実践するための n 個の方法

irb:001:0> Storage.create :values => 25

irb:002:0> Storage.create :value => 'String'

irb:003:0> Cats.all

=> [#<Storage value: 25, _id: BSON::ObjectID('###')>,

#<Storage value: “String”, _id: BSON::ObjectID('###')>]

Page 54: NoSQL を Ruby で実践するための n 個の方法

Array, Binary, Boolean, Date, Float, Hash

Integer, Nil, ObjectId, Set, String, Time

Custom Type, and TypeLess

にゃるほど!

Page 55: NoSQL を Ruby で実践するための n 個の方法

アソシエーション

Page 56: NoSQL を Ruby で実践するための n 個の方法

class Family include MongoMapper::Document key :name, String many :catsend

class Cats include MongoMapper::Document key :name, String key :family_id, ObjectId belongs_to :familyend

Page 57: NoSQL を Ruby で実践するための n 個の方法

class Person include MongoMapper::Document key :name, String one :addressend

class Address include MongoMapper::EmbeddedDocument key :zipcode, String key :street, Stringend

Page 58: NoSQL を Ruby で実践するための n 個の方法

バリデーション

Page 59: NoSQL を Ruby で実践するための n 個の方法

• validates_presence_of :title

• validates_presence_of

• validates_length_of

• validates_format_of

• validated_numericality_of

• validates_acceptance_of

• validated_configmati

Page 60: NoSQL を Ruby で実践するための n 個の方法

class Cats include MongoMapper::Document key :name, String

validates_presence_of :nameend

Page 61: NoSQL を Ruby で実践するための n 個の方法

class Cats include MongoMapper::Document key :name, String, :required => trueend

Page 62: NoSQL を Ruby で実践するための n 個の方法

class Cats include MongoMapper::Document key :name, String, :required => trueend

実は一緒にゃんです

Page 63: NoSQL を Ruby で実践するための n 個の方法

コールバック

Page 64: NoSQL を Ruby で実践するための n 個の方法

before / after

Page 65: NoSQL を Ruby で実践するための n 個の方法

validate, create, save

Page 66: NoSQL を Ruby で実践するための n 個の方法

class Cats include MongoMapper::Document key :name, String

before_validation :add_nyan

private def add_nyan self.name += ‘ nyan’ endend

Page 67: NoSQL を Ruby で実践するための n 個の方法

irb:001:0> Cats.create :name => 'tama'

irb:002:0> Cats.first

=> #<Cats name: "tama nyan", _id: BSON::ObjectID('###')>

Page 68: NoSQL を Ruby で実践するための n 個の方法

拡張する

Page 69: NoSQL を Ruby で実践するための n 個の方法

基本機能もプラグイン

Page 70: NoSQL を Ruby で実践するための n 個の方法

module Charisma def fly puts “I’m flying” endend

MongoMapper::Document. append_inclusions(Charisma)

Cats.first(:name => ‘tama’).fly

Page 71: NoSQL を Ruby で実践するための n 個の方法

module Charisma def fly puts “I’m flying” endend

MongoMapper::Document. append_inclusions(Charisma)

Cats.first(:name => ‘tama’).fly

実は飛べるにゃ

Page 72: NoSQL を Ruby で実践するための n 個の方法

もくじ

• NoSQL とは

• MongoDB について

• MongoMapper を使う

• まとめ

Page 73: NoSQL を Ruby で実践するための n 個の方法

MongoDB

Page 74: NoSQL を Ruby で実践するための n 個の方法

ドキュメント指向DB

と KVS と RDBMS

の良いとこどり

Page 75: NoSQL を Ruby で実践するための n 個の方法

MongoMapper

Page 76: NoSQL を Ruby で実践するための n 個の方法

ActiveRecord のように簡単に MongoDB

を利用できる

Page 77: NoSQL を Ruby で実践するための n 個の方法

使ってみるにゃ

Page 79: NoSQL を Ruby で実践するための n 個の方法

ご清聴ありがとうございましたにゃー。

猫 by http://www.wanpug.com/