Talk MongoDB - Amil

  • 349 views
Uploaded on

Overview das principais features do MongoDB.

Overview das principais features do MongoDB.

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
349
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
7
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. { } name : ‘Marcelo Cenerino’, company: ‘Amil’, date : ‘2013-10-30T08:30:00.000Z’
  • 2. What is MongoDB?
  • 3. 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.
  • 4. You can have at most two of these properties for any shared-data system. Dr. Eric A. Brewer, 2000
  • 5. Main characteristics • Document based • Schemaless • Open source (on GitHub) • High performance • Horizontally scalable • Full featured
  • 6. Customers eBay, Ericsson, EA, SAP, Telefonica, Code School, Abril...
  • 7. MongoDB vs. RDBMS
  • 8. RDBMS: data is structured as tables id nome idade genero 1 João 25 Masculino 2 Maria 30 Feminino 3 Pedro 40 Masculino ... ... ...
  • 9. Document oriented???
  • 10. 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
  • 11. RDBMS vs. MongoDB Table Collection Row Document Column Field Index Index Joins Embedded doc. FK Reference Partition Shard
  • 12. Transaction Model MongoDB guarantees atomic updates to data at the document level.
  • 13. Relational schema design
  • 14. 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
  • 15. In a MongoDB based app we start building our app and let the schema evolve.
  • 16. Mongo “schema” design Article User name email title date text author Comment[] author date text Tag[] value
  • 17. Getting started with MongoDB
  • 18. > mongod > mongo
  • 19. Basic CRUD operations
  • 20. Inserting a document > user = {name : ‘marcelo’, age : 29, gender : ‘Male’} > db.users.insert(user) > • No collection creation needed!
  • 21. 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
  • 22. Querying a document > db.users.find({name : 'maria', age : {$gt : 25}}) { "_id" : ObjectId("526f1af1dac0a62cdc152a96"), "name" : "maria", "age" : 26 }
  • 23. 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
  • 24. 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']}})
  • 25. Removing a document > db.users.remove({name : 'maria'}) > db.users.find().pretty() { "_id" : ObjectId("526f1cb3dac0a62cdc152a98"), "age" : 29, "name" : "marcelo", "roles" : [ "admin", "dev", "operator" ] }
  • 26. Indexing
  • 27. 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"
  • 28. Showing collection’s indexes > db.estabelecimentos.getIndexes() [ { "v" : 1, "key" : { "_id" : 1 }, "ns" : "mapa-servicos.estabelecimentos", "name" : "_id_" } ] >
  • 29. 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" } ] >
  • 30. 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" }
  • 31. 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" } ]
  • 32. 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/
  • 33. Aggregation Framework
  • 34. Aggregation Framework Pipeline Operators: $project, $match, $limit, $skip, $unwind, $group, $sort, $geoNear
  • 35. 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 } >
  • 36. Mongo Driver for Java
  • 37. Spring Data MongoDB http://projects.spring.io/spring-data-mongodb/
  • 38. Replica Sets
  • 39. 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
  • 40. Replica Sets
  • 41. Replica Sets
  • 42. Sharding
  • 43. 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
  • 44. 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
  • 45. Sharded clusters
  • 46. Range Based Sharding • Supports more efficient range queries • Results in an uneven distribution of data • Monotonically increasing keys should be avoided
  • 47. Hash Based Sharding Ensures an even distribution of data at the expense of efficient range queries
  • 48. https://education.mongodb.com/
  • 49. Books
  • 50. db.audience.find({‘question’ : true})
  • 51. Thanks everyone! Hope you’ve enjoyed it.