24
歓喜に寄せて

From Zero to Mongo, Art.sy Experience w/ MongoDB

Embed Size (px)

DESCRIPTION

Talk given at MongoNYC 2012.

Citation preview

Page 1: From Zero to Mongo, Art.sy Experience w/ MongoDB

歓喜に寄せて

Page 2: From Zero to Mongo, Art.sy Experience w/ MongoDB

» MongoDB is our only data store

(technically, S3 is our other store)

January 2011

Page 3: From Zero to Mongo, Art.sy Experience w/ MongoDB

» How do you plan to query your data?

Page 4: From Zero to Mongo, Art.sy Experience w/ MongoDB

» N-Gram Search https://github.com/artsy/mongoid_fulltext

class Artist

include Mongoid::Document

include Mongoid::FullTextSearch

field :first_name

field :last_name

def name

[first_name, last_name].join(' ')

end

fulltext_search_in :name

end

Page 5: From Zero to Mongo, Art.sy Experience w/ MongoDB

~ 50 of 850 genes

MongoDB: A Sparse Hash

{

Contemporary : 100,

Computer Art : 20,

Plays With Scale: 80,

Humor : 70,

Nostalgia : 0,

Hairy or Fluffy : 0

}

Page 6: From Zero to Mongo, Art.sy Experience w/ MongoDB

MongoDB: Inheritance in the Database

{

_type : SoloArtist,

birthday : 1929,

deathday : 1972

}

{

_type : ArtCollective

founded : 1929

}

Page 7: From Zero to Mongo, Art.sy Experience w/ MongoDB

MongoDB: Cartesian Product

{

id : BSON::ObjectId(…)

color : red,

medium : works-on-paper,

size : small,

price : [0, 12, 48],

}

Page 8: From Zero to Mongo, Art.sy Experience w/ MongoDB

MongoDB: from LSH to K-Most Similar Graph

{

artwork_id : BSON::ObjectId(…)

neighbors : [[ BSON::ObjectId(…), score ], … ]

}

http://www.mit.edu/~andoni/LSH/

http://www.cs.princeton.edu/cass/papers/www11.pdf

Page 9: From Zero to Mongo, Art.sy Experience w/ MongoDB
Page 10: From Zero to Mongo, Art.sy Experience w/ MongoDB

class User

include Mongoid::Document

field :account_created, default: false

has_many :authentications

def account_created?

account_created || authentications.any?

end

end

task :migrate do

User.where({ :account_created.exists => false }).each do |user|

user.update_attributes!({ account_created: user.account_created? })

end

end

Page 11: From Zero to Mongo, Art.sy Experience w/ MongoDB

Shard?

Page 12: From Zero to Mongo, Art.sy Experience w/ MongoDB

REST API as little online

processing as

possible as much offline

parallel processing

as possible

iPad

CMS

Web

Page 13: From Zero to Mongo, Art.sy Experience w/ MongoDB

» Mongoid Collection Snapshot https://github.com/aaw/mongoid_collection_snapshot

as much offline

parallel processing

as possible

Page 14: From Zero to Mongo, Art.sy Experience w/ MongoDB

Denormalize? https://github.com/logandk/mongoid_denormalize

https://github.com/dzello/mongoid_alize

Page 15: From Zero to Mongo, Art.sy Experience w/ MongoDB

» Mongoid Cached JSON https://github.com/dblock/mongoid-cached-json

REST API

class Widget

include Mongoid::CachedJson

field :name

has_many :gadgets

json_fields \

:name => { },

:gadgets => {

:type => :reference,

:properties => :public

}

end

Page 16: From Zero to Mongo, Art.sy Experience w/ MongoDB

Throw Birds?

Page 17: From Zero to Mongo, Art.sy Experience w/ MongoDB

rpm_contrib 2.1.9

newrelic_rpm 3.3.3

https://github.com/newrelic/rpm_contrib/pull/16

Page 18: From Zero to Mongo, Art.sy Experience w/ MongoDB

testing models and APIs will save your life

class User

include Mongoid::Document

end

class Admin < User

end

class Representative

include Mongoid::Document

belongs_to :user, inverse_of: :representative

belongs_to :admin , inverse_of: nil

end

Page 19: From Zero to Mongo, Art.sy Experience w/ MongoDB

• mongoid-history

• carrierwave-mongoid

• mongoid_fulltext

• mongoid_slug

• delayed_job_mongoid

• mongoid_collection_snapshot

• delayed_job_shallow_mongoid

• mongoid-cached-json

Page 20: From Zero to Mongo, Art.sy Experience w/ MongoDB
Page 21: From Zero to Mongo, Art.sy Experience w/ MongoDB

Local MongoDB sudo rm /var/lib/mongodb/mongod.lock

Heroku MongoDB small

Heroku MongoDB shared replica set

MongoHQ dedicted replica set

Page 23: From Zero to Mongo, Art.sy Experience w/ MongoDB

» $15 - $49 per developer / month

» 149$ / month for a Small Replica Set

» $1345 / month for a Large Replica Set

--------

~ 25K$ / year on database hosting

Page 24: From Zero to Mongo, Art.sy Experience w/ MongoDB

art.sy: http://art.sy

twitter: @dblockdotorg

blog: http://code.dblock.org

email: [email protected]

slides on slideshare: http://slideshare.net/dblockdotorg