O documento resume as principais características do MongoDB, um banco de dados NoSQL orientado a documentos. Ele descreve como o MongoDB armazena dados em coleções e documentos semelhantes a JSON, oferecendo esquema flexível e alta escalabilidade com replicação e particionamento. Também destaca que o MongoDB não suporta transações e que relacionamentos devem ser mapeados usando IDs.
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
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
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!
capped collections são coleções de tamanho fixo, útil para casos de log, por exemplo.\n
\n
\n
\n
\n
\n
\n
\n
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