SlideShare uma empresa Scribd logo
1 de 17
hu•mon•gous
História


 Criado pela 10gen em 2007

 Liberado como open-source em 2008

 Foco: flexibilidade, velocidade/escalabilidade e facilidade de uso

 O nome na verdade vem do filme Blazing Saddles (1974)
MongoDB na Quatix



VideoADX

Eu Atleta
Características

 Orientado a documentos (JSON-like)

 Schema-free

 Não relacional

 Escalável com Replica Sets e/ou Auto-sharding

 Suporte a dados geoespaciais

 Journaling
Não se pode ter tudo...

 Não suporta transações

 Não existe JOIN

 Foreign Keys devem ser resolvidas pelo client

 Não é ACID

 Para consultas complexas, use MapReduce
Coleções

Armazenam os documentos

Equivalente a tabelas num banco RDBMS

Os documentos armazenados não precisam ser idênticos

Criadas no primeiro insert

Caso especial: capped collections
Documentos

Armazenados nas coleções

Equivalem a uma linha (ou registro)

Formato BSON (Binary JSON)

Normalmente identificados pelo _id

Limitados em 16Mb cada
_id: ObjectId!


 Equivalente ao id INT NOT NULL PRIMARY KEY AUTO_INCREMENT

 12-byte value (4-byte timestamp, 3-byte machine id, 2-byte pid, 3-byte counter)

 _id pode ser também um UUID (mas o ObjectId é mais eficiente)

 Para ordenar por data e inserção, basta ordenar pelo ObjectId
Operações básicas

 db.posts.find({“autor”: “Rodrigo Machado”})

 db.posts.insert({“autor”: “Rodrigo”, “titulo”: “o post”})

 db.posts.update({“_id”: ObjectId(...)}, {“autor”: “Rodrigo”, “titulo”:“Novo título”})

 db.posts.remove({“_id”: ObjectId(...)})

 db.cidades.ensureIndex({“loc”: “2d”}, {“background”: true})
Como relacionar os dados?
Normalizados?
Mais parecido com bancos de dados
tradicionais

Evita o limite de 16Mb por
documento
Incorporados?
Mais fácil para recuperar os dados

Pode esbarrar no limite de 16Mb por
documento

Melhor para casos em que o
documento “filho” sempre aparece
vinculado ao documento “pai”
Escalalabilidade & Failover
Failover: Replica Sets

 Duas ou mais réplicas

 Costuma ser utilizado junto com o
 sharding (particionamento)

 O servidor primário é eleito e
 identificado automaticamente

 MapReduce só pode ser executado no
 primário
Escalando: Sharding

Sharding feito por collection

Shard feito com base em uma
shard key

Shard key é imutável - escolha
com cuidado!

A query é enviada para todos
os servidores!
Referências
 http://mongotips.com

 http://shvetsgroup.com/blog/mongodb

 http://www.slideshare.net/kbanker/mongodb-schema-design

 http://www.mongodb.org/display/DOCS/Replica+Sets

 http://alexzeng.wordpress.com/2011/09/02/mongodb-features-replicat-sets-sharding/

 http://www.slideshare.net/mongodb/cool-features-presentation-at-mongo-seattle

 http://www.mongodb.org/display/DOCS/Use+Cases

 http://www.slideshare.net/jnunemaker/why-mongodb-is-awesome
Obrigado!
  Dúvidas?




                 Rodrigo Machado
             rcmachado@gmail.com
                      @rcmachado

Mais conteúdo relacionado

Mais procurados

Modelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBModelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBThiago Avelino
 
MongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saberMongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saberChristiano Anderson
 
Capturando a web com Scrapy
Capturando a web com ScrapyCapturando a web com Scrapy
Capturando a web com ScrapyGabriel Freitas
 
MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento Marcos Thomaz
 
Mongo DB
Mongo DBMongo DB
Mongo DBdist_bp
 
Introdução ao redis
Introdução ao redisIntrodução ao redis
Introdução ao redisDenis Silva
 
Palestra CouchDB III ENSOL
Palestra CouchDB III ENSOLPalestra CouchDB III ENSOL
Palestra CouchDB III ENSOLAllisson Azevedo
 
Mini-Curso de MongoDB
Mini-Curso de MongoDBMini-Curso de MongoDB
Mini-Curso de MongoDBBrunno Gomes
 
BigData - ElasticSearch + PHP
BigData - ElasticSearch + PHPBigData - ElasticSearch + PHP
BigData - ElasticSearch + PHPFelipe Weckx
 
Minicurso Epoca mongoDB
Minicurso Epoca mongoDBMinicurso Epoca mongoDB
Minicurso Epoca mongoDBLelyBarros
 
Document store e Mongodb
Document store e MongodbDocument store e Mongodb
Document store e MongodbAline Ferreira
 
Desenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDBDesenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDBiMasters
 
Introdução ao JavaScript e DOM
Introdução ao JavaScript e DOMIntrodução ao JavaScript e DOM
Introdução ao JavaScript e DOMRomualdo Andre
 
Arquitetando Soluções de Dados com PostgreSQL
Arquitetando Soluções de Dados com PostgreSQLArquitetando Soluções de Dados com PostgreSQL
Arquitetando Soluções de Dados com PostgreSQLRaul Oliveira
 
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...Miguel Gallardo
 
Conexões eficientes em banco de dados com PHP
Conexões eficientes em banco de dados com PHPConexões eficientes em banco de dados com PHP
Conexões eficientes em banco de dados com PHPIgor Lopes
 
Arquitetura de Memoria do PostgreSQL
Arquitetura de Memoria do PostgreSQLArquitetura de Memoria do PostgreSQL
Arquitetura de Memoria do PostgreSQLRaul Oliveira
 

Mais procurados (20)

Modelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBModelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDB
 
MongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saberMongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saber
 
Capturando a web com Scrapy
Capturando a web com ScrapyCapturando a web com Scrapy
Capturando a web com Scrapy
 
MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento
 
Mongo DB
Mongo DBMongo DB
Mongo DB
 
#5 CRUD no MongoDB
#5   CRUD  no MongoDB#5   CRUD  no MongoDB
#5 CRUD no MongoDB
 
Introdução ao redis
Introdução ao redisIntrodução ao redis
Introdução ao redis
 
Palestra CouchDB III ENSOL
Palestra CouchDB III ENSOLPalestra CouchDB III ENSOL
Palestra CouchDB III ENSOL
 
Mini-Curso de MongoDB
Mini-Curso de MongoDBMini-Curso de MongoDB
Mini-Curso de MongoDB
 
BigData - ElasticSearch + PHP
BigData - ElasticSearch + PHPBigData - ElasticSearch + PHP
BigData - ElasticSearch + PHP
 
Minicurso Epoca mongoDB
Minicurso Epoca mongoDBMinicurso Epoca mongoDB
Minicurso Epoca mongoDB
 
Document store e Mongodb
Document store e MongodbDocument store e Mongodb
Document store e Mongodb
 
Desenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDBDesenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDB
 
Introdução ao JavaScript e DOM
Introdução ao JavaScript e DOMIntrodução ao JavaScript e DOM
Introdução ao JavaScript e DOM
 
Treinamento Elasticsearch - Parte 2
Treinamento Elasticsearch - Parte 2Treinamento Elasticsearch - Parte 2
Treinamento Elasticsearch - Parte 2
 
Prog web 07-pdo
Prog web 07-pdoProg web 07-pdo
Prog web 07-pdo
 
Arquitetando Soluções de Dados com PostgreSQL
Arquitetando Soluções de Dados com PostgreSQLArquitetando Soluções de Dados com PostgreSQL
Arquitetando Soluções de Dados com PostgreSQL
 
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
 
Conexões eficientes em banco de dados com PHP
Conexões eficientes em banco de dados com PHPConexões eficientes em banco de dados com PHP
Conexões eficientes em banco de dados com PHP
 
Arquitetura de Memoria do PostgreSQL
Arquitetura de Memoria do PostgreSQLArquitetura de Memoria do PostgreSQL
Arquitetura de Memoria do PostgreSQL
 

Semelhante a MongoDB

Semelhante a MongoDB (20)

MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - Apresentação
 
Mongo db slides
Mongo db slidesMongo db slides
Mongo db slides
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
Palestra MongoDB
Palestra MongoDBPalestra MongoDB
Palestra MongoDB
 
MAC5855 - NoSQL
MAC5855 - NoSQLMAC5855 - NoSQL
MAC5855 - NoSQL
 
Mongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopMongo Db - PHP Day Workshop
Mongo Db - PHP Day Workshop
 
Fisl banco de dados no sql de código aberto
Fisl   banco de dados no sql de código abertoFisl   banco de dados no sql de código aberto
Fisl banco de dados no sql de código aberto
 
Workshop MongoDB
Workshop MongoDBWorkshop MongoDB
Workshop MongoDB
 
MongoDB na Campus Party
MongoDB na Campus PartyMongoDB na Campus Party
MongoDB na Campus Party
 
MongoDB - Performance e Escalabilidade para aplicações web
MongoDB - Performance e Escalabilidade para aplicações webMongoDB - Performance e Escalabilidade para aplicações web
MongoDB - Performance e Escalabilidade para aplicações web
 
MongoDB
MongoDBMongoDB
MongoDB
 
Apresentação
ApresentaçãoApresentação
Apresentação
 
Mongodb workshop cinlug
Mongodb workshop cinlugMongodb workshop cinlug
Mongodb workshop cinlug
 
Seminário Hadoop
Seminário HadoopSeminário Hadoop
Seminário Hadoop
 
No sql std
No sql stdNo sql std
No sql std
 
Entenda como as grandes empresas utilizam múltiplas abordagens de armazenamen...
Entenda como as grandes empresas utilizam múltiplas abordagens de armazenamen...Entenda como as grandes empresas utilizam múltiplas abordagens de armazenamen...
Entenda como as grandes empresas utilizam múltiplas abordagens de armazenamen...
 
Discos & Cia em PostgreSQL
Discos & Cia em PostgreSQLDiscos & Cia em PostgreSQL
Discos & Cia em PostgreSQL
 
PHPMongoDB
PHPMongoDBPHPMongoDB
PHPMongoDB
 
NoSQL Livre
NoSQL LivreNoSQL Livre
NoSQL Livre
 
HANA XS Data Services - SAP Inside Track Joinville 2015 - Fábio Pagoti
HANA XS Data Services - SAP Inside Track Joinville 2015 - Fábio PagotiHANA XS Data Services - SAP Inside Track Joinville 2015 - Fábio Pagoti
HANA XS Data Services - SAP Inside Track Joinville 2015 - Fábio Pagoti
 

MongoDB

  • 2. História Criado pela 10gen em 2007 Liberado como open-source em 2008 Foco: flexibilidade, velocidade/escalabilidade e facilidade de uso O nome na verdade vem do filme Blazing Saddles (1974)
  • 4. Características Orientado a documentos (JSON-like) Schema-free Não relacional Escalável com Replica Sets e/ou Auto-sharding Suporte a dados geoespaciais Journaling
  • 5. Não se pode ter tudo... Não suporta transações Não existe JOIN Foreign Keys devem ser resolvidas pelo client Não é ACID Para consultas complexas, use MapReduce
  • 6. Coleções Armazenam os documentos Equivalente a tabelas num banco RDBMS Os documentos armazenados não precisam ser idênticos Criadas no primeiro insert Caso especial: capped collections
  • 7. Documentos Armazenados nas coleções Equivalem a uma linha (ou registro) Formato BSON (Binary JSON) Normalmente identificados pelo _id Limitados em 16Mb cada
  • 8. _id: ObjectId! Equivalente ao id INT NOT NULL PRIMARY KEY AUTO_INCREMENT 12-byte value (4-byte timestamp, 3-byte machine id, 2-byte pid, 3-byte counter) _id pode ser também um UUID (mas o ObjectId é mais eficiente) Para ordenar por data e inserção, basta ordenar pelo ObjectId
  • 9. Operações básicas db.posts.find({“autor”: “Rodrigo Machado”}) db.posts.insert({“autor”: “Rodrigo”, “titulo”: “o post”}) db.posts.update({“_id”: ObjectId(...)}, {“autor”: “Rodrigo”, “titulo”:“Novo título”}) db.posts.remove({“_id”: ObjectId(...)}) db.cidades.ensureIndex({“loc”: “2d”}, {“background”: true})
  • 11. Normalizados? Mais parecido com bancos de dados tradicionais Evita o limite de 16Mb por documento
  • 12. Incorporados? Mais fácil para recuperar os dados Pode esbarrar no limite de 16Mb por documento Melhor para casos em que o documento “filho” sempre aparece vinculado ao documento “pai”
  • 14. Failover: Replica Sets Duas ou mais réplicas Costuma ser utilizado junto com o sharding (particionamento) O servidor primário é eleito e identificado automaticamente MapReduce só pode ser executado no primário
  • 15. Escalando: Sharding Sharding feito por collection Shard feito com base em uma shard key Shard key é imutável - escolha com cuidado! A query é enviada para todos os servidores!
  • 16. Referências http://mongotips.com http://shvetsgroup.com/blog/mongodb http://www.slideshare.net/kbanker/mongodb-schema-design http://www.mongodb.org/display/DOCS/Replica+Sets http://alexzeng.wordpress.com/2011/09/02/mongodb-features-replicat-sets-sharding/ http://www.slideshare.net/mongodb/cool-features-presentation-at-mongo-seattle http://www.mongodb.org/display/DOCS/Use+Cases http://www.slideshare.net/jnunemaker/why-mongodb-is-awesome
  • 17. Obrigado! Dúvidas? Rodrigo Machado rcmachado@gmail.com @rcmachado

Notas do Editor

  1. \n
  2. 10gen - startup dos fundadores da DoubleClick\n
  3. \n
  4. \n
  5. ACID (atomicity, consistency, isolation, durability)\n
  6. capped collections são coleções de tamanho fixo, útil para casos de log, por exemplo.\n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. o árbitro não precisa ser uma máquina dedicada, ele serve apenas para a eleição do nó primário\n\ncomo o mapreduce precisa escrever no banco, ele só pode utilizar o primário\n
  15. \n
  16. mostrar o try.mongodb.org\n
  17. \n