Upload
daniel-doubrovkine
View
1.790
Download
2
Embed Size (px)
DESCRIPTION
Talk given at MongoNYC 2012.
Citation preview
歓喜に寄せて
» MongoDB is our only data store
(technically, S3 is our other store)
January 2011
» How do you plan to query your data?
» 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
~ 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
}
MongoDB: Inheritance in the Database
{
_type : SoloArtist,
birthday : 1929,
deathday : 1972
}
{
_type : ArtCollective
founded : 1929
}
MongoDB: Cartesian Product
{
id : BSON::ObjectId(…)
color : red,
medium : works-on-paper,
size : small,
price : [0, 12, 48],
}
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
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
Shard?
REST API as little online
processing as
possible as much offline
parallel processing
as possible
iPad
CMS
Web
» Mongoid Collection Snapshot https://github.com/aaw/mongoid_collection_snapshot
as much offline
parallel processing
as possible
Denormalize? https://github.com/logandk/mongoid_denormalize
https://github.com/dzello/mongoid_alize
» 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
Throw Birds?
rpm_contrib 2.1.9
newrelic_rpm 3.3.3
https://github.com/newrelic/rpm_contrib/pull/16
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
• mongoid-history
• carrierwave-mongoid
• mongoid_fulltext
• mongoid_slug
• delayed_job_mongoid
• mongoid_collection_snapshot
• delayed_job_shallow_mongoid
• mongoid-cached-json
Local MongoDB sudo rm /var/lib/mongodb/mongod.lock
Heroku MongoDB small
Heroku MongoDB shared replica set
MongoHQ dedicted replica set
MongoHQ
Heroku
Heroku & Local
mongodump
mongodump
http://code.dblock.org/a-rake-task-for-copying-mongodb-databases
» $15 - $49 per developer / month
» 149$ / month for a Small Replica Set
» $1345 / month for a Large Replica Set
--------
~ 25K$ / year on database hosting
art.sy: http://art.sy
twitter: @dblockdotorg
blog: http://code.dblock.org
email: [email protected]
slides on slideshare: http://slideshare.net/dblockdotorg