Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Upcoming SlideShare
Loading in...5
×
 

Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)

on

  • 19,680 views

 

Statistics

Views

Total Views
19,680
Views on SlideShare
15,426
Embed Views
4,254

Actions

Likes
30
Downloads
297
Comments
2

27 Embeds 4,254

http://todobi.blogspot.com 2649
http://www.slideshare.net 581
http://todobi.blogspot.com.es 379
http://www.dataprix.com 273
http://todobi.blogspot.mx 131
http://www.10gen.com 86
http://todobi.blogspot.com.ar 76
http://www.todobi.blogspot.com 29
http://feeds.feedburner.com 8
http://paper.li 6
http://todobi.blogspot.com.br 5
http://todobi.blogspot.it 5
http://www.mongodb.org 4
http://todobi.blogspot.in 3
http://webcache.googleusercontent.com 3
http://geacode.appspot.com 2
http://ellieaskswhy.blogspot.com 2
http://todobi.blogspot.be 2
http://todobi.blogspot.pt 2
http://todobi.blogspot.co.uk 1
http://todobi.blogspot.de 1
http://todobi.blogspot.ro 1
http://todobi.blogspot.com.au 1
http://www.todobi.blogspot.com.ar 1
http://localhost:8080 1
http://translate.googleusercontent.com 1
http://todobi.blogspot.ie 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • mongodb
    Are you sure you want to
    Your message goes here
    Processing…
  • 地理位置索引不错
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow) Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow) Presentation Transcript

  • MapReduce,  Geospatial  Indexes,   and  Other  Cool  Features Kristina  Chodorow
  • connecting  to   your  mongod
  • connecting  to   your  mongod you
  • connecting  to   your  mongod you mongod
  • mongod
  • mongod
  • update insert query insert query mongod
  • mongod driver
  • query insert driver
  • insert query mongod driver
  • insert getlasterror mongod driver
  • insert getlasterror mongod driver
  • replication Dwight  @  3:15 Farallon Room
  • insert  this
  • all  set
  • insert  this
  • all  set
  • make  sure  two   slaves  have  this
  • all  set
  • make  sure  two   slaves  have  this
  • >  db.runCommand({ ...  getlasterror :  1 ...  })
  • >  db.runCommand({ ...  getlasterror :  1, ...  w  :  3 ...  })
  • >  db.runCommand({ ...  getlasterror :  1, ...  w  :  500 ...  })
  • >  db.runCommand({ ...  getlasterror :  1, ...  w  :  500, ...  wtimeout :  3000 ...  })
  • >  db.runCommand({ ...  getlasterror :  1, ...  fsync :  true ...  })
  • some  internals
  • Operations: insert update remove query get  more
  • Operations: insert update remove query get  more
  • Operations: insert update remove query get  more
  • Operations: insert update remove query get  more
  • Operations: insert update remove query get  more
  • Operations: insert update remove query get  more
  • Operations: insert update remove query get  more
  • get  help
  • $  mongo MongoDB  shell  version  1.5.1 url:  test connecting  to:  test type  "help"  for  help >
  • $  mongo MongoDB  shell  version  1.5.1 url:  test connecting  to:  test type  "help"  for  help >
  • >  db.help() DB  methods: db.addUser() db.auth() db.cloneDatabase() db.commandHelp() db.copyDatabase() db.createCollection() db.currentOp() ...
  • >  db.foo.help() DBCollection help db.foo.count() db.foo.dataSize() db.foo.distinct() db.foo.drop() db.foo.dropIndex() db.foo.dropIndexes() ...
  • >  var cursor  =  db.foo.find() >  cursor.help() DBQuery help .sort() .limit() .skip() .count() .size() ...
  • http://api.mongodb.org/js
  • >  db.foo.count() 40 >
  • >  db.foo.count() 40 >  db.foo.count
  • >  db.foo.count() 40 >  db.foo.count function(x)  { return  this.find(x).count();; } >
  • >  db.foo.count() 40 >  db.foo.count function(x)  { return  this.find(x).count();; } >  var cursor  =  db.foo.find() >
  • >  db.foo.count() 40 >  db.foo.count function(x)  { return  this.find(x).count();; } >  var cursor  =  db.foo.find() >  cursor.count
  • >  cursor.count function(applySkipLimit)  { var cmd =  {count  :  this._collection.getName()};; if  (this._query)  { if  (this._special)  { cmd.query =  this._query.query;; } else  { cmd.query =  this._query;; } } cmd.fields =  this._fields ||  {};; if  (applySkipLimit)  { if  (this._limit)  { cmd.limit =  this._limit;; ...
  • function(x)  { //  prep  cmd ... //  run  command var res  =  this._db.runCommand(cmd);; //  return  result ... }
  • >  db.runCommand({count  :  "foo"}) { "n"  :  40, "ok"  :  1 } >
  • >  db.runCommand({listCommands :  1})
  • >  db.runCommand({listCommands :  1}) { "commands"  :  { "$eval"  :  {...}, "assertinfo :  {...}, "authenticate"  :  {...}, "buildinfo"  :  {...}, "clean"  :  {...}, "clone"  :  {...}, "cloneCollection"  :  {...}, "cloneCollectionAsCapped"  :  {...}, "closeAllDatabases"  :  {...}, ...
  • >  db.runCommand({ ...  datasize :  collectionName})
  • >  db.runCommand({ ...  datasize :  collectionName}) >  db.runCommand({ ...  dbstats :  1})
  • >  db.commandHelp("distinct") help  for:  distinct:  {   distinct  :  'collection  name', key  :  'a.b'  } >
  • >  db.commandHelp("distinct") help  for:  distinct:  {   distinct  :  'collection  name', key  :  'a.b'  } >  db.commandHelp function(name)  { var c  =  {};; c[name]  =  1;; c.help =  true;; return  this.runCommand(c).help;; } >
  • >  db.runCommand({"count"  :  1,   ...  "help"  :  true})
  • >  db.runCommand({"count"  :  1,   ...  "help"  :  true}) help  for:  count:  no  help  defined >
  • $
  • >  db.blog.posts.find( ...  {_id  :  123}, ...  {comments  :  1})
  • >  db.blog.posts.find( ...  {_id  :  123}, ...  {comments  :  {$slice  :  10}})
  • >  db.blog.posts.find( ...  {_id  :  123}, ...  {comments  :  {$slice  :  [20,  10]}})
  • >  db.blog.posts.find( ...  {_id  :  123}, ...  {comments  :  {$slice  :  -­10}})
  • >  db.blog.posts.find( ...  {_id  :  123}, ...  {comments  :  {$slice  :  [-­20,  10]}})
  • >  db.blog.posts.find({ ...  comments  :  { ...      date  :  {$gt :  today}, ...      votes  :  {$gte :  10} ...  }})
  • >  db.blog.posts.find({ ...  'comments.date'  :  {$gt :  today}, ...  'comments.votes'  :  {$gte :  10} ...  })
  • >  db.blog.posts.find({ ...  comments  :  {$elemMatch :  { ...      date  :  {$gt :  today}, ...      votes  :  {$gte :  10} ...  }}})
  • Types
  • minKey maxKey
  • MapReduce
  • { _id  :  123, name  :  "Fred", email  :  "fred@example.com" } { _id  :  456, name  :  "Paul", phone  :  "555-­5555", picture  :  BinData } { _id  :  789, email  :  "alice@example.com", }
  • _id               40 name             32 email         20 phone           2 picture       17 pet             3 friends   40 hobbies       6 favorites   12 notes           14
  • { _id  :  123, name  :  "Fred", email  :  "fred@example.com" }
  • 1 1 1
  • _id 1 name 1 email 1
  • email
  • email
  • 12
  • cluck  cluck 12
  • email 12
  • map  =  function()  { for  (var key  in  this)  { emit(key,  1);; } }
  • reduce  =  function(prev,  current)  { var count  =  0;; for  (var egg  in  current)  { count  +=  current[egg];; } return  count;; }
  • A B C D E F
  • A B C D E F
  • A B C D E F _id  :  A,  value  : _id  :  C,  value  : _id  :  E,  value  : _id  :  B,  value  : _id  :  D,  value  : _id  :  F,  value  :
  • GridFS
  • Indexes
  • >  db.users.find({ ...  date  :  new  Date("10/3/2010")}) >  db.users.ensureIndex({ ...  date  :  1})
  • Dates,  timestamps,  ObjectIds
  • indexing Aaron  @  3:15 Niantic  Room
  • Geospatial  Indexes
  • >  db.map.ensureIndex({location  :  "2d"}) >
  • >  db.map.insert({location  :  [-­40,  78]}) >
  • >  db.map.insert({location  :  [-­40,  78]}) >  db.map.insert({location  :  { ...  x  :  -­40,   ...  y  :  78}}) >
  • >  db.map.insert({location  :  [-­40,  78]}) >  db.map.insert({location  :  { ...  x  :  -­40,   ...  y  :  78}}) >  db.map.insert({location  :  { ...  longitude  :  -­40,   ...  latitude  :  78}}) >
  • >  db.map.find({location  :  { ...  $near  :  [-­40,  77]}})
  • >  db.map.find({location  :  { ...  $near  :  [-­40,  77]}})-­>limit(10)
  • >  db.map.ensureIndex({ ...  location  :  "2d", ...  user  :  1});;
  • 1  degree  of  longitude  at  the  equator:
  • 1  degree  of  longitude  at  the  equator: 1  degree  of  longitude  near  the  poles:
  • geospatial Eliot  @  10:15 Gateway  Room
  • please  help   document  stuff! http://cookbook.mongodb.org
  • want  to  work  on   mongodb? http://www.10gen.com/jobs
  • thank  you! @kchodorow http://www.snailinaturtleneck.com