Mongo db

31
MongoDB Forward Tech Away Day 24 Sep 2010 [email protected] Monday, 27 September 2010

Transcript of Mongo db

Page 1: Mongo db

MongoDBForward Tech Away Day 24 Sep 2010

[email protected]

Monday, 27 September 2010

Page 2: Mongo db

1Get to know MongoDB

Monday, 27 September 2010

Page 3: Mongo db

try.mongodb.org

Monday, 27 September 2010

Page 4: Mongo db

Ruby driverrequire 'rubygems'require 'mongo'

@db = Mongo::Connection.new.db("blog")

@blogposts = @db['blogposts']

Monday, 27 September 2010

Page 5: Mongo db

a simple document

post = { :time => Time.now.utc, :title => "Simple Post",}

@blogposts << blogpost

Monday, 27 September 2010

Page 6: Mongo db

When we call #save:

1. Adds an _id 2. Serialise to BSON 3. socket.send()

Monday, 27 September 2010

Page 7: Mongo db

2Use rich documents

Monday, 27 September 2010

Page 8: Mongo db

blogpost = { :title => "My First Post", :author => {:name => "Jane"}, :comments => [{ :by => "Abe", :text => "First" }, { :by => "Ada", :text => "Good post" }]}

@blogposts.save(blogpost)

“complex objects”

Monday, 27 September 2010

Page 9: Mongo db

blogpost = { :title => "My First Post", :time => Time.now.utc, :author => {:name => "Jane"}, :views => 0, :languages => ["English", "Italian", "Spanish"],

:comments => [{ :by => "Abe", :text => "First", :vote => 1, :date => Time.now.utc }]

}

@blogposts.save(blogpost)

“complex objects”

Monday, 27 September 2010

Page 10: Mongo db

dynamic [email protected]( { "author.name" => "Jane" } )

@blogposts.find( { "author.name" => /^J/ } )

@blogposts.find( { :time => {'$lte' => Time.utc(1970,1,1)} } )

@blogposts.find( { :languages => {'$in' =>["English", "Italian"] } } )

Monday, 27 September 2010

Page 11: Mongo db

find and modify!cmd = BSON::OrderedHash.newcmd[:findandmodify] = 'blogposts'cmd[:query] = { :title => "My First Post" }cmd[:update] = { '$set' =>

{ :title => "My First Post updated"}}DB.command(cmd)

Monday, 27 September 2010

Page 12: Mongo db

upsert

@blogposts.update({:title => "My First Post"}, blogpost, { :upsert => true })

Monday, 27 September 2010

Page 13: Mongo db

update

@blogposts.update({:title => "My First Post"}, blogpost)

@blogposts.update({:title => "My First Post"}, {'$inc' => {"views" => 1}})

Monday, 27 September 2010

Page 14: Mongo db

query operators

"$ne""$in""$nin""$mod""$all""$size""$exists"

"$inc""$set""$push""$pushAll" "$pop""$pull""$pullAll"

Monday, 27 September 2010

Page 15: Mongo db

3Map reduce for aggregation

Monday, 27 September 2010

Page 16: Mongo db

map reduce def self.target_for_report(report) collections = DB['targets'].group(['metric'], { :report_type => report.report_type,

:project_name => report.project }, { 'docs' => [] }, "function(doc, prev) { prev.docs.push(doc); }"); end

Monday, 27 September 2010

Page 17: Mongo db

4Indexes are indexes

Monday, 27 September 2010

Page 18: Mongo db

indexes

db.blogposts.ensureIndex( { "comments.by" : 1 } );

@blogposts.create_index([[ "comments.by" , Mongo::ASCENDING ]]);

@blogposts.create_index([[ :languages , Mongo::ASCENDING ]]);

@blogposts.create_index([[ :time , Mongo::DESCENDING ]]);

@blogposts.create_index([[ :author , Mongo::ASCENDING, true ]]);

@blogposts.create_index([[ "comments.vote" , 1,], [ "comments.date", -1 ]]);

Monday, 27 September 2010

Page 19: Mongo db

5GridFS

Monday, 27 September 2010

Page 20: Mongo db

api

files collection for metadatachunks collection for data

grid = Mongo::Grid.new(DB)my_avatar = File.open('toni.jpg','r')id = grid.put(my_avatar)

Monday, 27 September 2010

Page 21: Mongo db

6Replication

Monday, 27 September 2010

Page 22: Mongo db

m/s vs replica set

asynchronous replication of data between servers for failover and redundancy

only one server (in the set/shard) is active for writes (the primary, or master) at a given time.

Monday, 27 September 2010

Page 23: Mongo db

replica sets (1.6+)

• Supports 1-7 servers in the cluster

• Automatic failover

• Automatic recovery

Monday, 27 September 2010

Page 24: Mongo db

7Auto-shard

Monday, 27 September 2010

Page 25: Mongo db

mongo shards

Sharding occurs on a per-collection basis

Monday, 27 September 2010

Page 26: Mongo db

8Pro & Cons

Monday, 27 September 2010

Page 27: Mongo db

pro & cons

• schema free > no migrations needed

• no sql

• update existing data

• stable

• very nice api

Monday, 27 September 2010

Page 28: Mongo db

good for

• the web

• real time

• logging

• analytics

• humans

Monday, 27 September 2010

Page 29: Mongo db

9Links

Monday, 27 September 2010

Page 31: Mongo db

10Questions

Monday, 27 September 2010