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

MongoDB

  • 1.
  • 2.
    História Criado pela10gen 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)
  • 3.
  • 4.
    Características Orientado adocumentos (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 podeter 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 Equivalentea 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 Equivalema uma linha (ou registro) Formato BSON (Binary JSON) Normalmente identificados pelo _id Limitados em 16Mb cada
  • 8.
    _id: ObjectId! Equivalenteao 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})
  • 10.
  • 11.
    Normalizados? Mais parecido combancos de dados tradicionais Evita o limite de 16Mb por documento
  • 12.
    Incorporados? Mais fácil pararecuperar os dados Pode esbarrar no limite de 16Mb por documento Melhor para casos em que o documento “filho” sempre aparece vinculado ao documento “pai”
  • 13.
  • 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 feitopor 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

  • #2 \n
  • #3 10gen - startup dos fundadores da DoubleClick\n
  • #4 \n
  • #5 \n
  • #6 ACID (atomicity, consistency, isolation, durability)\n
  • #7 capped collections são coleções de tamanho fixo, útil para casos de log, por exemplo.\n
  • #8 \n
  • #9 \n
  • #10 \n
  • #11 \n
  • #12 \n
  • #13 \n
  • #14 \n
  • #15 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
  • #16 \n
  • #17 mostrar o try.mongodb.org\n
  • #18 \n