Rails + mongo db

24
Rails + MongoDB = <3 Sérgio Santos @sdsantos Improve Coimbra

Transcript of Rails + mongo db

Page 1: Rails + mongo db

Rails + MongoDB = <3

Sérgio Santos@sdsantos

Improve Coimbra

Page 2: Rails + mongo db

Introduction / Disclamer

Page 3: Rails + mongo db

Bundlr MongoDB stats

MongoDB from the start

~ 3½ years of development

~ 6 GB of data

~ 6 million documents

Cloud hosted on MongoHQ

Page 4: Rails + mongo db

MongoDB 101

Page 5: Rails + mongo db

Documents

Page 6: Rails + mongo db

Collections

Page 7: Rails + mongo db

References

Page 8: Rails + mongo db

Embeds

Page 9: Rails + mongo db

Rails MongoDB ORMs

Page 10: Rails + mongo db

Mongoid vs MongoMapper

Page 11: Rails + mongo db

Mongoid

Page 12: Rails + mongo db

Modelsclass Person include Mongoid::Documentend

person = Person.newperson[:name] = 'Sérgio'person[:age] = 26person.save

Page 13: Rails + mongo db

Modelsclass Person include Mongoid::Document field :name, type: String field :age, type: Integerend

person = Person.newperson.name = 'Sérgio'person.age = 26person.save

Page 14: Rails + mongo db

Persistenceperson = Person.create(name: 'Sérgio', age: 26)

person.update_attributes(name: 'Sérgio Santos')

person.touch

person.delete

person.destroy

person.rename(:name, :first_name)

Page 15: Rails + mongo db

Queryingperson = Person.find("4baa56f1230048567300485c")

people = Person.where(age: 18)

people = Person.where(name: 'Sérgio').not(age: 26)

Person.count

Person.all.avg(:age)

-- INSERT MAP/REDUCE CLEVER EXAMPLE HERE --

Page 16: Rails + mongo db

Referencesclass Band include Mongoid::Document has_many :membersend

class Member include Mongoid::Document field :name, type: String belongs_to :bandend

Page 17: Rails + mongo db

References# The parent band document.{ "_id" : ObjectId("4d3ed089fb60ab534684b7e9")}

# The child member document. { "_id" : ObjectId("4d3ed089fb60ab534684b7f1"), "name" : "Matt Berninger" "band_id" : ObjectId("4d3ed089fb60ab534684b7e9")}

Page 18: Rails + mongo db

Embedsclass Band include Mongoid::Document embeds_many :albumsend

class Album include Mongoid::Document field :name, type: String embedded_in :bandend

Page 19: Rails + mongo db

Embeds{ "_id" : ObjectId("4d3ed089fb60ab534684b7e9"), "albums" : [ { "_id" : ObjectId("4d3ed089fb60ab534684b7e0"), "name" : "Boxer", } ]}

Page 20: Rails + mongo db

Extrasidentity map & cache

paranoia

versioning

timestamps

geo

full text search

Page 21: Rails + mongo db

Cloud Hosting

Page 22: Rails + mongo db
Page 23: Rails + mongo db

Wrapping up…

Page 24: Rails + mongo db

Rails + MongoDB = <3Sérgio Santos

@[email protected]

We’re hiring!nourishcare.co.uk/careers/