Neo4j + MongoDB. Neo4j Doc Manager for Mongo Connector - GraphConnect SF 2015
From Zero to Mongo, Art.sy Experience w/ MongoDB
-
Upload
daniel-doubrovkine -
Category
Technology
-
view
1.792 -
download
2
description
Transcript of From Zero to Mongo, Art.sy Experience w/ MongoDB
![Page 1: From Zero to Mongo, Art.sy Experience w/ MongoDB](https://reader034.fdocuments.net/reader034/viewer/2022051611/54b750214a795967588b4636/html5/thumbnails/1.jpg)
歓喜に寄せて
![Page 2: From Zero to Mongo, Art.sy Experience w/ MongoDB](https://reader034.fdocuments.net/reader034/viewer/2022051611/54b750214a795967588b4636/html5/thumbnails/2.jpg)
» 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](https://reader034.fdocuments.net/reader034/viewer/2022051611/54b750214a795967588b4636/html5/thumbnails/3.jpg)
» How do you plan to query your data?
![Page 4: From Zero to Mongo, Art.sy Experience w/ MongoDB](https://reader034.fdocuments.net/reader034/viewer/2022051611/54b750214a795967588b4636/html5/thumbnails/4.jpg)
» 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](https://reader034.fdocuments.net/reader034/viewer/2022051611/54b750214a795967588b4636/html5/thumbnails/5.jpg)
~ 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](https://reader034.fdocuments.net/reader034/viewer/2022051611/54b750214a795967588b4636/html5/thumbnails/6.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022051611/54b750214a795967588b4636/html5/thumbnails/7.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022051611/54b750214a795967588b4636/html5/thumbnails/8.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022051611/54b750214a795967588b4636/html5/thumbnails/9.jpg)
![Page 10: From Zero to Mongo, Art.sy Experience w/ MongoDB](https://reader034.fdocuments.net/reader034/viewer/2022051611/54b750214a795967588b4636/html5/thumbnails/10.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022051611/54b750214a795967588b4636/html5/thumbnails/11.jpg)
Shard?
![Page 12: From Zero to Mongo, Art.sy Experience w/ MongoDB](https://reader034.fdocuments.net/reader034/viewer/2022051611/54b750214a795967588b4636/html5/thumbnails/12.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022051611/54b750214a795967588b4636/html5/thumbnails/13.jpg)
» 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](https://reader034.fdocuments.net/reader034/viewer/2022051611/54b750214a795967588b4636/html5/thumbnails/14.jpg)
Denormalize? https://github.com/logandk/mongoid_denormalize
https://github.com/dzello/mongoid_alize
![Page 15: From Zero to Mongo, Art.sy Experience w/ MongoDB](https://reader034.fdocuments.net/reader034/viewer/2022051611/54b750214a795967588b4636/html5/thumbnails/15.jpg)
» 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](https://reader034.fdocuments.net/reader034/viewer/2022051611/54b750214a795967588b4636/html5/thumbnails/16.jpg)
Throw Birds?
![Page 17: From Zero to Mongo, Art.sy Experience w/ MongoDB](https://reader034.fdocuments.net/reader034/viewer/2022051611/54b750214a795967588b4636/html5/thumbnails/17.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022051611/54b750214a795967588b4636/html5/thumbnails/18.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022051611/54b750214a795967588b4636/html5/thumbnails/19.jpg)
• 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](https://reader034.fdocuments.net/reader034/viewer/2022051611/54b750214a795967588b4636/html5/thumbnails/20.jpg)
![Page 21: From Zero to Mongo, Art.sy Experience w/ MongoDB](https://reader034.fdocuments.net/reader034/viewer/2022051611/54b750214a795967588b4636/html5/thumbnails/21.jpg)
Local MongoDB sudo rm /var/lib/mongodb/mongod.lock
Heroku MongoDB small
Heroku MongoDB shared replica set
MongoHQ dedicted replica set
![Page 22: From Zero to Mongo, Art.sy Experience w/ MongoDB](https://reader034.fdocuments.net/reader034/viewer/2022051611/54b750214a795967588b4636/html5/thumbnails/22.jpg)
MongoHQ
Heroku
Heroku & Local
mongodump
mongodump
http://code.dblock.org/a-rake-task-for-copying-mongodb-databases
![Page 23: From Zero to Mongo, Art.sy Experience w/ MongoDB](https://reader034.fdocuments.net/reader034/viewer/2022051611/54b750214a795967588b4636/html5/thumbnails/23.jpg)
» $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](https://reader034.fdocuments.net/reader034/viewer/2022051611/54b750214a795967588b4636/html5/thumbnails/24.jpg)
art.sy: http://art.sy
twitter: @dblockdotorg
blog: http://code.dblock.org
email: [email protected]
slides on slideshare: http://slideshare.net/dblockdotorg