Talk MongoDB - Amil
Upcoming SlideShare
Loading in...5
×
 

Talk MongoDB - Amil

on

  • 469 views

Overview das principais features do MongoDB.

Overview das principais features do MongoDB.

Statistics

Views

Total Views
469
Views on SlideShare
463
Embed Views
6

Actions

Likes
0
Downloads
7
Comments
0

2 Embeds 6

http://www.linkedin.com 5
https://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

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…
Post Comment
Edit your comment

Talk MongoDB - Amil Talk MongoDB - Amil Presentation Transcript

  • { } name : ‘Marcelo Cenerino’, company: ‘Amil’, date : ‘2013-10-30T08:30:00.000Z’
  • What is MongoDB?
  • Here’s a definition: MongoDB (from humongous) is an open-source, highperformance, scalable, general purpose database. It is used by organizations of all sizes to power online applications where low latency and high availability are critical requirements of the system.
  • You can have at most two of these properties for any shared-data system. Dr. Eric A. Brewer, 2000
  • Main characteristics • Document based • Schemaless • Open source (on GitHub) • High performance • Horizontally scalable • Full featured
  • Customers eBay, Ericsson, EA, SAP, Telefonica, Code School, Abril...
  • MongoDB vs. RDBMS
  • RDBMS: data is structured as tables id nome idade genero 1 João 25 Masculino 2 Maria 30 Feminino 3 Pedro 40 Masculino ... ... ...
  • Document oriented???
  • Document oriented { _id : 1, nome : 'João', idade : 25, genero : 'Masculino' } MongoDB stores data as document in a binary representation called BSON (Binary JSON) Size: up to 16 MB
  • RDBMS vs. MongoDB Table Collection Row Document Column Field Index Index Joins Embedded doc. FK Reference Partition Shard
  • Transaction Model MongoDB guarantees atomic updates to data at the document level.
  • Relational schema design
  • Relational schema design • Large ERD diagrams • Create table statements • ORM to map tables to objects • Tables just to join tables together • Lots of revision and alter table statements until we get it just right
  • In a MongoDB based app we start building our app and let the schema evolve.
  • Mongo “schema” design Article User name email title date text author Comment[] author date text Tag[] value
  • Getting started with MongoDB
  • > mongod > mongo
  • Basic CRUD operations
  • Inserting a document > user = {name : ‘marcelo’, age : 29, gender : ‘Male’} > db.users.insert(user) > • No collection creation needed!
  • Querying a document > db.users.findOne() { "_id" : ObjectId("5269d66271de67aa7c3c41b4"), "name" : “marcelo", "age" : 29, “gender" : “male" } • • • • _id is the primary key in MongoDB Automatically indexed Automatically created as an ObjectId if not provided Any unique immutable value could be used
  • Querying a document > db.users.find({name : 'maria', age : {$gt : 25}}) { "_id" : ObjectId("526f1af1dac0a62cdc152a96"), "name" : "maria", "age" : 26 }
  • Operators Group Operators Comparison $gt, $gte, $in, $lt, $lte, $ne, $nin Logical $or, $and, $not, $nor Element $exists, $type Evaluation $mod, $regex, $where Geospatial $geoWithin, $geoIntersects, $near, $nearSphere Array $all, $elemMatch, $size Projection $, $elemMatch, $slice
  • Updating a document > db.users.find({age : {$gt : 25}}, {_id : 0}) { "name" : "maria", "age" : 26 } { "name" : "marcelo", "age" : 29 } > >db.users.update({age : {$gt : 25}}, {$set : {roles : ['admin', 'dev', 'operator']}})
  • Removing a document > db.users.remove({name : 'maria'}) > db.users.find().pretty() { "_id" : ObjectId("526f1cb3dac0a62cdc152a98"), "age" : 29, "name" : "marcelo", "roles" : [ "admin", "dev", "operator" ] }
  • Indexing
  • Querying a large collection without index > db.estabelecimentos.count() 307929 > > db.estabelecimentos.find({'localizacao.cidade' : 'PIACATU'}).explain() { "cursor" : "BasicCursor", "isMultiKey" : false, "n" : 5, "nscannedObjects" : 307929, "nscanned" : 307929, "nscannedObjectsAllPlans" : 307929, "nscannedAllPlans" : 307929, "scanAndOrder" : false, "indexOnly" : false, "nYields" : 1, "nChunkSkips" : 0, "millis" : 311, "indexBounds" : { } > }, "server" : "Cenerino-PC:27017"
  • Showing collection’s indexes > db.estabelecimentos.getIndexes() [ { "v" : 1, "key" : { "_id" : 1 }, "ns" : "mapa-servicos.estabelecimentos", "name" : "_id_" } ] >
  • Creating an index > // creating an index > db.estabelecimentos.ensureIndex({'localizacao.cidade' : 1}) > db.estabelecimentos.getIndexes() [ { "v" : 1, "key" : { "_id" : 1 }, "ns" : "mapa-servicos.estabelecimentos", "name" : "_id_" }, { "v" : 1, "key" : { "localizacao.cidade" : 1 }, "ns" : "mapa-servicos.estabelecimentos", "name" : "localizacao.cidade_1" } ] >
  • Same query, now using index > db.estabelecimentos.find({'localizacao.cidade' : 'PIACATU'}).explain() { "cursor" : "BtreeCursor localizacao.cidade_1", "isMultiKey" : false, "n" : 5, "nscannedObjects" : 5, "nscanned" : 5, "nscannedObjectsAllPlans" : 5, "nscannedAllPlans" : 5, "scanAndOrder" : false, "indexOnly" : false, "nYields" : 0, "nChunkSkips" : 0, "millis" : 0, "indexBounds" : { "localizacao.cidade" : [ [ "PIACATU", "PIACATU" ] ] }, "server" : "Cenerino-PC:27017" }
  • Geospatial index > db.estabelecimentos.ensureIndex({'localizacao.coordenadas' : '2dsphere'}) > db.estabelecimentos.getIndexes() [ { "v" : 1, "key" : { "_id" : 1 }, "ns" : "mapa-servicos.estabelecimentos", "name" : "_id_" }, { "v" : 1, "key" : { "localizacao.cidade" : 1 }, "ns" : "mapa-servicos.estabelecimentos", "name" : "localizacao.cidade_1" }, { "v" : 1, "key" : { "localizacao.coordenadas" : "2dsphere" }, "ns" : "mapa-servicos.estabelecimentos", "name" : "localizacao.coordenadas_2dsphere" } ]
  • Geospatial index > lng = -46.80208830000004 > lat = -23.515985699999998 > distance = 30 / 6378.137 > > db.estabelecimentos.find({ "localizacao.coordenadas" : { "$nearSphere" : [lng , lat] , "$maxDistance" : distance}}).limit(50) http://mapa-servicos-publicos.herokuapp.com/
  • Aggregation Framework
  • Aggregation Framework Pipeline Operators: $project, $match, $limit, $skip, $unwind, $group, $sort, $geoNear
  • Aggregation Framework > db.estabelecimentos.aggregate([{$match : {'localizacao.uf' : 'SP'}}, {$group : {_id : '$localizacao.cidade', qtd : {$sum : 1}}}, {$sort : {qtd : -1}}, {$limit : 3}]) { "result" : [ { "_id" : "SAO PAULO", "qtd" : 6930 }, { "_id" : "CAMPINAS", "qtd" : 881 }, { "_id" : "GUARULHOS", "qtd" : 666 } ], "ok" : 1 } >
  • Mongo Driver for Java
  • Spring Data MongoDB http://projects.spring.io/spring-data-mongodb/
  • Replica Sets
  • Replica Sets • A replica set is a group of mongod instances that host the same data set • Replication provides redundancy and increases data availability • The primary accepts all write operations from clients (only one primary allowed) • Replication can be used to increase read capacity • Asynchronous replication • Automatic failover
  • Replica Sets
  • Replica Sets
  • Sharding
  • Sharding Issues of scaling: • High query rates can exhaust the CPU capacity of the server • Larger data sets exceed the storage capacity of a single machine • Working set sizes larger than the system’s RAM stress the I/O capacity of disk drives Vertical scaling X Sharding
  • Sharding Horizontally Scalable • Sharding is the process of storing data across multiple machines • Each shard is an independent database, and collectively, the shards make up a single logical database
  • Sharded clusters
  • Range Based Sharding • Supports more efficient range queries • Results in an uneven distribution of data • Monotonically increasing keys should be avoided
  • Hash Based Sharding Ensures an even distribution of data at the expense of efficient range queries
  • https://education.mongodb.com/
  • Books
  • db.audience.find({‘question’ : true})
  • Thanks everyone! Hope you’ve enjoyed it.