Upload
antonio-terreno
View
1.084
Download
0
Tags:
Embed Size (px)
Citation preview
1Get to know MongoDB
Monday, 27 September 2010
try.mongodb.org
Monday, 27 September 2010
Ruby driverrequire 'rubygems'require 'mongo'
@db = Mongo::Connection.new.db("blog")
@blogposts = @db['blogposts']
Monday, 27 September 2010
a simple document
post = { :time => Time.now.utc, :title => "Simple Post",}
@blogposts << blogpost
Monday, 27 September 2010
When we call #save:
1. Adds an _id 2. Serialise to BSON 3. socket.send()
Monday, 27 September 2010
2Use rich documents
Monday, 27 September 2010
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
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
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
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
upsert
@blogposts.update({:title => "My First Post"}, blogpost, { :upsert => true })
Monday, 27 September 2010
update
@blogposts.update({:title => "My First Post"}, blogpost)
@blogposts.update({:title => "My First Post"}, {'$inc' => {"views" => 1}})
Monday, 27 September 2010
query operators
"$ne""$in""$nin""$mod""$all""$size""$exists"
"$inc""$set""$push""$pushAll" "$pop""$pull""$pullAll"
Monday, 27 September 2010
3Map reduce for aggregation
Monday, 27 September 2010
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
4Indexes are indexes
Monday, 27 September 2010
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
5GridFS
Monday, 27 September 2010
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
6Replication
Monday, 27 September 2010
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
replica sets (1.6+)
• Supports 1-7 servers in the cluster
• Automatic failover
• Automatic recovery
Monday, 27 September 2010
7Auto-shard
Monday, 27 September 2010
mongo shards
Sharding occurs on a per-collection basis
Monday, 27 September 2010
8Pro & Cons
Monday, 27 September 2010
pro & cons
• schema free > no migrations needed
• no sql
• update existing data
• stable
• very nice api
Monday, 27 September 2010
good for
• the web
• real time
• logging
• analytics
• humans
Monday, 27 September 2010
9Links
Monday, 27 September 2010
links
• http://api.mongodb.org/ruby/1.0.9/index.html
• http://www.mongodb.org/
• http://mongoid.org/
Monday, 27 September 2010
10Questions
Monday, 27 September 2010