SlideShare une entreprise Scribd logo
1  sur  29
Introdução ao Rodrigo Hjort [email_address]
 
 
“ MongoDB (from "humongous") is a scalable, high-performance, open source, powerful, document-oriented database written in C++. ”
O modelo de dados Relacional (Tabular) Orientado a Documentos
Modelo Relacional
Modelo Orientado a Documentos
Um documento JSON { _id : ObjectId("5ebf5e0fec5fab7db2b9b40e"), title : "Introdução ao MongoDB", slug : "introducao-ao-mongodb", body : "Este é o texto do post...", published : true, created : "Jun 28 2011 13:48:22 GMT-0400 (AMT)", updated : "Jun 28 2011 17:01:15 GMT-0400 (AMT)", comments :  [ { author : "Xunda", email : "xunda@dominio.com", body : "Caramba!", created : "Jun 28 2011 15:01:30 GMT-0300 (BRT)" } ] , tags :  [ "databases", "MongoDB", "nosql" ] } Array Object ID Embedded Document
Tipos de Dados null regexp array string code float date boolean binary integer
lightweight traversable efficient
Embed vs Reference Embedded DBRef
Insert, Update, Delete INSERT INTO usuarios (nome, idade, ativo) VALUES ('xunda', 32, true) > db.usuarios.insert( {nome:  “ xunda ” , idade: 32, ativo: true}) UPDATE usuarios SET idade = 28 WHERE nome = 'xunda' > db.usuarios.update({nome:  “ xunda ” }, {nome:  “ xunda ” , idade: 28, ativo: true}) DELETE FROM usuarios WHERE nome =  “ xunda ” > db.usuarios.remove({nome:  “ xunda ” }) DELETE FROM usuarios > db.usuarios.remove()
Modificadores Atômicos UPDATE posts SET hits = hits + 1 WHERE id = 999 > db.posts.update( { _id : new ObjectId("4c041e...30c093") }, { $inc : { "hits" : 1 }} ) UPDATE posts SET hits = 0 > db.posts.update({}, { $set : { "hits" : 0 }}) > db.posts.update({}, { $unset : { "hits" : 1 }}) > db.posts.update({title: "A blog post"}, {$push : {comments: { name: "joe", email: "joe@domain.com", content: "nice post."} }})
Linguagem de Consulta SELECT * FROM usuarios > db.usuarios.find() SELECT nome FROM usuarios > db.usuarios.find({}, { “ nome ” : 1}) SELECT * FROM usuarios WHERE idade = 29 > db.usuarios.find({ “ idade ” : 29}) SELECT * FROM usuarios WHERE idade = 29 AND ativo = true > db.usuarios.find({ “ idade ” : 29,  “ ativo ” : true}) SELECT * FROM usuarios WHERE idade >= 18 AND idade <= 30 > db.usuarios.find({ “ idade ” : { “ $gte ” : 18,  “ $lte ” : 30}}) SELECT * FROM usuarios WHERE nome LIKE  “ %admin% ” > db.usuarios.find({ “ nome ” : /admin/i})
Linguagem de Consulta SELECT * FROM usuarios ORDER BY nome > db.usuarios.find().sort({ “ nome ” : 1}) SELECT * FROM usuarios ORDER BY idade DESC, nome > db.usuarios.find().sort({ “ idade ” : -1,  “ nome ” : 1}) SELECT * FROM usuarios LIMIT 3 > db.usuarios.find().limit(3) SELECT * FROM usuarios OFFSET 5 > db.usuarios.find().skip(5) SELECT * FROM usuarios LIMIT 3 OFFSET 5 > db.usuarios.find().limit(3).skip(5) SELECT * FROM usuarios ORDER BY nome LIMIT 3 > db.usuarios.find().sort({ “ nome ” : 1}).limit(3)
Indexação ensureIndex() explain() hint() índice geoespacial Yes!!!
Agregação e Map/Reduce count() group() distinct() Map/Reduce
Capped Collections natural sort tailable cursors tail -f fila circular
GridFS mongofiles
Server-Side Scripting db.eval() system.js JavaScript
Replicação: Master/Slave
Replicação: Replica Sets
Sharding
Arquitetura com Sharding
Auto-Sharding + Replicação
10gen.com mongodb.org Suporte e Treinamento
Literatura
Quem está usando?
Rodrigo Hjort [email_address] http://agajorte.blogspot.com &quot;If I had asked people what they wanted, they would have said faster horses.&quot; –  Henry Ford

Contenu connexe

Tendances

Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Luis Gustavo Almeida
 
Why functional programming matters
Why functional programming mattersWhy functional programming matters
Why functional programming mattersJean Carlo Machado
 
Haskell aula7 libs_intro_arquivos
Haskell aula7 libs_intro_arquivosHaskell aula7 libs_intro_arquivos
Haskell aula7 libs_intro_arquivosCRISLANIO MACEDO
 
PHP e PostgreSQL: Um é pouco, dois é bom, três é demais
PHP e PostgreSQL: Um é pouco, dois é bom, três é demaisPHP e PostgreSQL: Um é pouco, dois é bom, três é demais
PHP e PostgreSQL: Um é pouco, dois é bom, três é demaisFabrízio Mello
 
Menu dinâmico com kendoUI
Menu dinâmico com kendoUIMenu dinâmico com kendoUI
Menu dinâmico com kendoUIDouglas Lira
 
MongoDB - Workshop Buscapé
MongoDB - Workshop BuscapéMongoDB - Workshop Buscapé
MongoDB - Workshop BuscapéWagner Bonfiglio
 
MongoDB - Wagner Bonfiglio - Navegg
MongoDB - Wagner Bonfiglio - NaveggMongoDB - Wagner Bonfiglio - Navegg
MongoDB - Wagner Bonfiglio - NaveggFelipe Guimarães
 
Introdução ao MongoDB II
Introdução ao MongoDB IIIntrodução ao MongoDB II
Introdução ao MongoDB IILuiz Duarte
 
MongoDB com a Turma do Chaves
MongoDB com a Turma do ChavesMongoDB com a Turma do Chaves
MongoDB com a Turma do ChavesPedro Menezes
 
2009 05 20 Floripa Flex
2009 05 20 Floripa Flex2009 05 20 Floripa Flex
2009 05 20 Floripa FlexEduardo Kraus
 

Tendances (20)

Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017
 
Atividade 1
Atividade 1Atividade 1
Atividade 1
 
Clean Code Matters!
Clean Code Matters!Clean Code Matters!
Clean Code Matters!
 
Palestra de PDO
Palestra de PDOPalestra de PDO
Palestra de PDO
 
Congomongo
Congomongo Congomongo
Congomongo
 
Why functional programming matters
Why functional programming mattersWhy functional programming matters
Why functional programming matters
 
Haskell aula7 libs_intro_arquivos
Haskell aula7 libs_intro_arquivosHaskell aula7 libs_intro_arquivos
Haskell aula7 libs_intro_arquivos
 
PHP e PostgreSQL: Um é pouco, dois é bom, três é demais
PHP e PostgreSQL: Um é pouco, dois é bom, três é demaisPHP e PostgreSQL: Um é pouco, dois é bom, três é demais
PHP e PostgreSQL: Um é pouco, dois é bom, três é demais
 
Menu dinâmico com kendoUI
Menu dinâmico com kendoUIMenu dinâmico com kendoUI
Menu dinâmico com kendoUI
 
MongoDB - Workshop Buscapé
MongoDB - Workshop BuscapéMongoDB - Workshop Buscapé
MongoDB - Workshop Buscapé
 
MongoDB - Wagner Bonfiglio - Navegg
MongoDB - Wagner Bonfiglio - NaveggMongoDB - Wagner Bonfiglio - Navegg
MongoDB - Wagner Bonfiglio - Navegg
 
Introdução ao MongoDB II
Introdução ao MongoDB IIIntrodução ao MongoDB II
Introdução ao MongoDB II
 
Palestra MongoDB
Palestra MongoDBPalestra MongoDB
Palestra MongoDB
 
NotORM
NotORMNotORM
NotORM
 
Uma Breve Introdução ao MongoDB
Uma Breve Introdução ao MongoDBUma Breve Introdução ao MongoDB
Uma Breve Introdução ao MongoDB
 
MongoDB com a Turma do Chaves
MongoDB com a Turma do ChavesMongoDB com a Turma do Chaves
MongoDB com a Turma do Chaves
 
DBA | Tabelas de teste
DBA | Tabelas de testeDBA | Tabelas de teste
DBA | Tabelas de teste
 
Phpex2
Phpex2Phpex2
Phpex2
 
2009 05 20 Floripa Flex
2009 05 20 Floripa Flex2009 05 20 Floripa Flex
2009 05 20 Floripa Flex
 
Python Class
Python ClassPython Class
Python Class
 

Similaire à Introdução MongoDB

Django + extjs pelos forms
Django + extjs pelos formsDjango + extjs pelos forms
Django + extjs pelos formsMoacir Filho
 
Mini Curso de Python para Coding Dojo
Mini Curso de Python para Coding DojoMini Curso de Python para Coding Dojo
Mini Curso de Python para Coding DojoFabricio NErdmann
 
Java mais ágil que nunca no desenvolvimento Web
Java mais ágil que nunca no desenvolvimento WebJava mais ágil que nunca no desenvolvimento Web
Java mais ágil que nunca no desenvolvimento WebBruno Borges
 
ORM: Sendo produtivo com NHibernate
ORM: Sendo produtivo com NHibernateORM: Sendo produtivo com NHibernate
ORM: Sendo produtivo com NHibernateJuliano Oliveira
 
Apresentação Java Web Si Ufc Quixadá
Apresentação Java Web Si Ufc QuixadáApresentação Java Web Si Ufc Quixadá
Apresentação Java Web Si Ufc QuixadáZarathon Maia
 
[CLPE] Design patterns com c#
[CLPE] Design patterns com c#[CLPE] Design patterns com c#
[CLPE] Design patterns com c#Felipe Pimentel
 
Fazendo uma aplicação cliente/servidor (e algumas dicas...)
Fazendo uma aplicação cliente/servidor (e algumas dicas...)Fazendo uma aplicação cliente/servidor (e algumas dicas...)
Fazendo uma aplicação cliente/servidor (e algumas dicas...)Makoto Miyagawa
 
MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014Christiano Anderson
 
MongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documentoMongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documentoJulio Monteiro
 
Edição de conteúdo web usando Javascript de ponta a ponta
Edição de conteúdo web usando Javascript de ponta a pontaEdição de conteúdo web usando Javascript de ponta a ponta
Edição de conteúdo web usando Javascript de ponta a pontaJorge Walendowsky
 
Introdução ao nosql (mini curso)
Introdução ao nosql (mini curso)Introdução ao nosql (mini curso)
Introdução ao nosql (mini curso)Junior Fernandes
 
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6Bruno Borges
 
C++ Standard Template Library
C++ Standard Template LibraryC++ Standard Template Library
C++ Standard Template LibraryDuda Dornelles
 
NoSQL: onde, como e por quê? Cassandra e MongoDB
NoSQL: onde, como e por quê? Cassandra e MongoDBNoSQL: onde, como e por quê? Cassandra e MongoDB
NoSQL: onde, como e por quê? Cassandra e MongoDBRodrigo Hjort
 

Similaire à Introdução MongoDB (20)

Django + extjs pelos forms
Django + extjs pelos formsDjango + extjs pelos forms
Django + extjs pelos forms
 
Mini Curso de Python para Coding Dojo
Mini Curso de Python para Coding DojoMini Curso de Python para Coding Dojo
Mini Curso de Python para Coding Dojo
 
Meetup MUG-RS KingHost
Meetup MUG-RS KingHostMeetup MUG-RS KingHost
Meetup MUG-RS KingHost
 
Java mais ágil que nunca no desenvolvimento Web
Java mais ágil que nunca no desenvolvimento WebJava mais ágil que nunca no desenvolvimento Web
Java mais ágil que nunca no desenvolvimento Web
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDB
 
ORM: Sendo produtivo com NHibernate
ORM: Sendo produtivo com NHibernateORM: Sendo produtivo com NHibernate
ORM: Sendo produtivo com NHibernate
 
Apresentação Java Web Si Ufc Quixadá
Apresentação Java Web Si Ufc QuixadáApresentação Java Web Si Ufc Quixadá
Apresentação Java Web Si Ufc Quixadá
 
[CLPE] Design patterns com c#
[CLPE] Design patterns com c#[CLPE] Design patterns com c#
[CLPE] Design patterns com c#
 
Python MongoDB no MongoSP
Python MongoDB no MongoSPPython MongoDB no MongoSP
Python MongoDB no MongoSP
 
Fazendo uma aplicação cliente/servidor (e algumas dicas...)
Fazendo uma aplicação cliente/servidor (e algumas dicas...)Fazendo uma aplicação cliente/servidor (e algumas dicas...)
Fazendo uma aplicação cliente/servidor (e algumas dicas...)
 
MondoDB
MondoDBMondoDB
MondoDB
 
MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014
 
Linguagem C 09 Ponteiros
Linguagem C 09 PonteirosLinguagem C 09 Ponteiros
Linguagem C 09 Ponteiros
 
MongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documentoMongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documento
 
Edição de conteúdo web usando Javascript de ponta a ponta
Edição de conteúdo web usando Javascript de ponta a pontaEdição de conteúdo web usando Javascript de ponta a ponta
Edição de conteúdo web usando Javascript de ponta a ponta
 
TDC 2011 - Ext JS 4
TDC 2011 - Ext JS 4TDC 2011 - Ext JS 4
TDC 2011 - Ext JS 4
 
Introdução ao nosql (mini curso)
Introdução ao nosql (mini curso)Introdução ao nosql (mini curso)
Introdução ao nosql (mini curso)
 
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
 
C++ Standard Template Library
C++ Standard Template LibraryC++ Standard Template Library
C++ Standard Template Library
 
NoSQL: onde, como e por quê? Cassandra e MongoDB
NoSQL: onde, como e por quê? Cassandra e MongoDBNoSQL: onde, como e por quê? Cassandra e MongoDB
NoSQL: onde, como e por quê? Cassandra e MongoDB
 

Introdução MongoDB

  • 1. Introdução ao Rodrigo Hjort [email_address]
  • 2.  
  • 3.  
  • 4. “ MongoDB (from &quot;humongous&quot;) is a scalable, high-performance, open source, powerful, document-oriented database written in C++. ”
  • 5. O modelo de dados Relacional (Tabular) Orientado a Documentos
  • 7. Modelo Orientado a Documentos
  • 8. Um documento JSON { _id : ObjectId(&quot;5ebf5e0fec5fab7db2b9b40e&quot;), title : &quot;Introdução ao MongoDB&quot;, slug : &quot;introducao-ao-mongodb&quot;, body : &quot;Este é o texto do post...&quot;, published : true, created : &quot;Jun 28 2011 13:48:22 GMT-0400 (AMT)&quot;, updated : &quot;Jun 28 2011 17:01:15 GMT-0400 (AMT)&quot;, comments : [ { author : &quot;Xunda&quot;, email : &quot;xunda@dominio.com&quot;, body : &quot;Caramba!&quot;, created : &quot;Jun 28 2011 15:01:30 GMT-0300 (BRT)&quot; } ] , tags : [ &quot;databases&quot;, &quot;MongoDB&quot;, &quot;nosql&quot; ] } Array Object ID Embedded Document
  • 9. Tipos de Dados null regexp array string code float date boolean binary integer
  • 11. Embed vs Reference Embedded DBRef
  • 12. Insert, Update, Delete INSERT INTO usuarios (nome, idade, ativo) VALUES ('xunda', 32, true) > db.usuarios.insert( {nome: “ xunda ” , idade: 32, ativo: true}) UPDATE usuarios SET idade = 28 WHERE nome = 'xunda' > db.usuarios.update({nome: “ xunda ” }, {nome: “ xunda ” , idade: 28, ativo: true}) DELETE FROM usuarios WHERE nome = “ xunda ” > db.usuarios.remove({nome: “ xunda ” }) DELETE FROM usuarios > db.usuarios.remove()
  • 13. Modificadores Atômicos UPDATE posts SET hits = hits + 1 WHERE id = 999 > db.posts.update( { _id : new ObjectId(&quot;4c041e...30c093&quot;) }, { $inc : { &quot;hits&quot; : 1 }} ) UPDATE posts SET hits = 0 > db.posts.update({}, { $set : { &quot;hits&quot; : 0 }}) > db.posts.update({}, { $unset : { &quot;hits&quot; : 1 }}) > db.posts.update({title: &quot;A blog post&quot;}, {$push : {comments: { name: &quot;joe&quot;, email: &quot;joe@domain.com&quot;, content: &quot;nice post.&quot;} }})
  • 14. Linguagem de Consulta SELECT * FROM usuarios > db.usuarios.find() SELECT nome FROM usuarios > db.usuarios.find({}, { “ nome ” : 1}) SELECT * FROM usuarios WHERE idade = 29 > db.usuarios.find({ “ idade ” : 29}) SELECT * FROM usuarios WHERE idade = 29 AND ativo = true > db.usuarios.find({ “ idade ” : 29, “ ativo ” : true}) SELECT * FROM usuarios WHERE idade >= 18 AND idade <= 30 > db.usuarios.find({ “ idade ” : { “ $gte ” : 18, “ $lte ” : 30}}) SELECT * FROM usuarios WHERE nome LIKE “ %admin% ” > db.usuarios.find({ “ nome ” : /admin/i})
  • 15. Linguagem de Consulta SELECT * FROM usuarios ORDER BY nome > db.usuarios.find().sort({ “ nome ” : 1}) SELECT * FROM usuarios ORDER BY idade DESC, nome > db.usuarios.find().sort({ “ idade ” : -1, “ nome ” : 1}) SELECT * FROM usuarios LIMIT 3 > db.usuarios.find().limit(3) SELECT * FROM usuarios OFFSET 5 > db.usuarios.find().skip(5) SELECT * FROM usuarios LIMIT 3 OFFSET 5 > db.usuarios.find().limit(3).skip(5) SELECT * FROM usuarios ORDER BY nome LIMIT 3 > db.usuarios.find().sort({ “ nome ” : 1}).limit(3)
  • 16. Indexação ensureIndex() explain() hint() índice geoespacial Yes!!!
  • 17. Agregação e Map/Reduce count() group() distinct() Map/Reduce
  • 18. Capped Collections natural sort tailable cursors tail -f fila circular
  • 20. Server-Side Scripting db.eval() system.js JavaScript
  • 29. Rodrigo Hjort [email_address] http://agajorte.blogspot.com &quot;If I had asked people what they wanted, they would have said faster horses.&quot; – Henry Ford

Notes de l'éditeur

  1. Grande ruptura – IMS x RDBMS (invenção do modelo relacional)
  2. A segunda ruptura: RDBMS x NoSQL
  3. MongoDB is a powerful, flexible, and scalable data store. It combines the ability to scale out with many of the most useful features of relational databases, such as secondary indexes, range queries, and sorting. MongoDB is also incredibly featureful: it has tons of useful features such as built-in support for MapReduce-style aggregation and geospatial indexes. 1. (Slang.) humongous extraordinarily large.
  4. MongoDB basic concepts: • A document is the basic unit of data, roughly equivalent to a row in a RDBMS • Similarly, a collection can be thought of as the schema-free equivalent of a table • A single instance of MongoDB can host multiple independent databases , each of which can have its own collections and permissions Document : an ordered set of keys with associated values (i.e., map, hash, or dictionary)
  5. With Mongo, you do less &amp;quot;normalization&amp;quot; than you would perform designing a relational schema because there are no server-side joins. Generally, you will want one database collection for each of your top level objects.
  6. JSON-style documents with dynamic schemas offer simplicity and power.
  7. MongoDB supports a wide range of data types as values in documents: null, boolean, integer, float, string, date, regexp, code, binary, array. Documents in MongoDB can be thought of as &amp;quot;JSON-like&amp;quot; in that they are conceptually similar to objects in JavaScript .
  8. BSON (Binary JSON) is a lightweight binary format capable of representing any MongoDB document as a string of bytes . The database understands BSON, and BSON is the format in which documents are saved to disk. BSON is a binary-encoded serialization of JSON-like documents. BSON contains extensions that allow representation of data types that are not part of the JSON spec (e.g. Date and BinData). BSON characteristics: Lightweight, Traversable, and Efficient.
  9. The key question in Mongo schema design is &amp;quot;does this object merit its own collection , or rather should it embed in objects in other collections?&amp;quot; In relational databases, each sub-item of interest typically becomes a separate table (unless denormalizing for performance). In Mongo, this is not recommended - embedding objects is much more efficient. A DBRef is an embedded document , just like any other embedded document in MongoDB. A DBRef, however, has specific keys that must be present.
  10. An upsert is a special type of update. If no document is found that matches the update criteria, a new document will be created by combining the criteria and update documents. If a matching document is found, it will be updated normally.
  11. MongoDB supports atomic, in-place updates as well as more traditional updates for replacing an entire document. update() replaces the document matching criteria entirely with the new object. If you only want to modify some fields, you should use the atomic modifiers . Fast In-Place Updates: atomic modifiers for contention-free performance .
  12. Rich, document-based queries.
  13. Database indexes are similar to a book ’ s index : instead of looking through the whole book, the database takes a shortcut and just looks in the index, allowing it to do queries orders of magnitude faster. Once it finds the entry in the index, it can jump right to the location of the desired document. Index on any attribute, just like you&apos;re used to. MongoDB provides a special type of index for coordinate plane queries, called a geospatial index .
  14. Everything described with count, distinct, and group can be done with MapReduce , and more. It is a method of aggregation that can be easily parallelized across multiple servers. It splits up a problem, sends chunks of it to different machines, and lets each machine solve its part of the problem. When all of the machines are finished, they merge all of the pieces of the solution back into a full solution.
  15. A capped collection is created in advance and is fixed in size. They behave like circular queues : if we&apos;re out of space, the oldest documents will be deleted, and the new one will take its place. This means that capped collections automatically age-out the oldest documents as new documents are inserted.
  16. GridFS is a mechanism for storing large binary files in MongoDB. No need for a separate file storage architecture. Getting failover and scale-out for file storage is easy as MongoDB has replication and autosharding.
  17. JavaScript can be executed on the server using the db.eval function. It can also be stored in the database and is used in some database commands. MongoDB has a special collection for each database called system.js , which can store JavaScript variables.
  18. Replication &amp; High Availability : mirror across LANs and WANs for scale and peace of mind. Master-slave replication is the most general replication mode supported by MongoDB. This mode is very flexible and can be used for backup , failover , read scaling , and more. MongoDB allows developers to enforce guarantees about how up-to-date replication is ( “ w ” param). It will block until at least N servers have replicated the last write operation.
  19. A replica set is basically a master-slave cluster with automatic failover . The biggest difference between a master-slave cluster and a replica set is that a replica set does not have a single master: one is elected by the cluster and may change to another node if the current master goes down. However, they look very similar: a replica set always has a single master node (called a primary ) and one or more slaves (called secondaries ).
  20. Sharding is the process of splitting data up and storing different portions of the data on different machines. Sharding is MongoDB ’ s approach to scaling out . Sharding allows you to add more machines to handle increasing load and data size without affecting your application. Scale horizontally without compromising functionality.
  21. MongoDB supports autosharding , which eliminates some of the administrative headaches of manual sharding. The cluster handles splitting up data and rebalancing automatically . You can start with a nonsharded setup and convert it to a sharded one, if and when you need. Sharding involves 3 components working together: - shard : a container that holds a subset of a collection ’ s data - mongos : routes requests and aggregates responses - config server : store the configuration of the cluster (which data is on which shard)
  22. From the application ’ s point of view, a sharded setup looks just like a nonsharded setup. There is no need to change application code when you need to scale. To set up sharding with no points of failure , you ’ ll need the following: • Multiple config servers • Multiple mongos servers • Replica sets for each shard • w set correctly
  23. MongoDB: The Definitive Guide Kristina Chodorow and Mike Dirolf The Definitive Guide to MongoDB: The NoSQL Database for Cloud and Desktop Computing Peter Membrey Scaling MongoDB Kristina Chodorow MongoDB in Action Kyle Banker MongoDB for Web Development Mitch Pirtle
  24. Production Deployments: http://www.mongodb.org/display/DOCS/Production+Deployments
  25. Pros: &amp;quot;...the best features of key/values stores, document databases and relational databases in one.&amp;quot; - John Nunemaker (RailsTips.org) Fast, scalable, highly available Cons: no joins single master approach