7. What is MongoDB?
• Scalable high-performance open source, document-
orientated database
• Built for speed
• Rich document based queries
• Full index support
• Replication and Failover
• Auto Sharding
• Map / Reduce
8. Why use MongoDB?
• SQL was invented in the 70’s to store data
• MongoDB stores documents / objects
• We work with objects (Ruby)
• We need databases to persist our objects
• So why not just store objects directly?
9. What its great for
• Websites
• Caching
• High scalability
• Storage of program objects and JSON
10. What its not great for
• Highly transactional applications
• Problems requiring SQL
17. When I Say Think
Collection Table
• Schema-less
• Indexable by one or more keys
• Created on-the-fly when first referenced
• Capped collections: Fixed size, older records dropped after
limit reached
20. When I Say Think
Document Record / Row
• Stored in a collection
• Can have _id key - Works like primary keys in MySQL
• Supports relationships: embedded or referential
• Document storage in BSON
21. When I Say Think
Document Record / Row
• Stored in a collection
• Can have _id key - Works like primary keys in MySQL
• Supports relationships: embedded or referential
• Document storage in BSON
JSONS Binary Brother
23. Referential / Normalised
• Same as SQL
• “First class” objects that are at top level
• Many to many relationships
has_many
User Blog Post
belongs_to
24. # Post
{
title: “Getting started with MongoDB”,
body: “blah blah blah ... “,
created: Date(’09-06-2010’),
tags: [1, 2]
}
# Comments # Tags
{
{
id: 1,
body: “I did not have relations..”,
name: “example”
user_id: 1,
},
{
post_id: 1,
id: 2,
created: Date(’09-06-2010’),
name: “lol”
}
}
25. Embedded
• Embedded is pre-joining
• Embed when document always appears with parent
• 4MB document size limit
Blog Post
Post Title
Post Body
Comments
26. # Posts
{
title: “Getting started with MongoDB”,
body: “blah blah blah ... “,
created: Date(’09-06-2010’),
Array tags: [ ‘example’, ‘bill clinton’ ],
comments: [
{ author: “Bill”, comment: “I did not have relations” },
{ author: “Monica”, comment: “LOL” }
]
}
Array of hashes
28. MongoMapper
http://github.com/jnunemaker/mongomapper
• Typecasting
• Callbacks (ActiveSupport Callbacks)
• Validations
• Connection and database can differ per document
• Has create, update methods
• Find: id, ids, :all, :first, :last
• Associations (has_one, has_many, many_to_many)
29. http://www.mongoid.org
• Named scopes / chainable criteria
• Versioning of your documents
• Full callback support on documents AND embedded
documents
• Proper master/slave distribution
• Optimised for use with extremely large datasets
This is what we use!
Document Orientated: It isnt stored as records and tables, information stored as documents or objects
Build for speed: No transaction log / removed anything that would slow it down
Rich document based queries: Users can find documents based on any search criteria / similar to SQL
Full index support: Index on any attribute - similar to SQL
Replication and failover: Supports replication of data between servers for failover and redundancy
Auto sharding: Scale horizontally without compromising functionality - EVERY EASY - NO JOINS
Map Reduce - Database itself can perform advanced aggregation and data processing
Websites: Object orientated programming languages - Easy persistence of objects
Caching: Extremely fast
High scalability: Easy Auto sharding and replication and failover
* SQL writes to transaction log (for data durability)
* Performance loss
* MongoDB doesn’t do this - Uses replication
Similarities and Differences between SQL and document orientated databases
No need for any rake db:creates or rake db:setup
No need for any rake db:creates or rake db:setup
Like a table in MySQL
EXCEPT!!!
Capped collections: Extremely fast, atomic writes, good for log files
Like a table in MySQL
EXCEPT!!!
Capped collections: Extremely fast, atomic writes, good for log files
Next up is relations - which is one of the major differences or advantages over SQL
First class - objects that can stand alone (users -> blog posts)
Similar to MySQL
Tags: Array of ID’s Many to many
Comments: belongs_to / has_many
Using mongodb with ruby
First up:
Mongomapper
by jnunemaker
Works for OrderedList
Typecasting: Mongodb doesnt understand types - MongoMapper creates the typecasting