2. Agenda
● Apresentação
● Modelo de documento MongoDB
● Tipos de dados
● Arquitetura
● Boas práticas
3. Quem sou?
● Especialista em Big Data e NoSQL na Propus;
● Desenvolvedor Python;
● Trabalha desde o início da internet comercial
do Brasil;
● Fundador do MUG-SP;
4. MongoDB
● Orientação a documentos;
● Índices simples e compostos;
● Suporte a índices:
– Full Text Search;
– Geográfico;
6. Alguns conceitos
● Uma base de dados possui várias coleções;
● Uma coleção possui vários documentos;
– Comparando com banco de dados relacional,
podemos dizer que:
● Coleção = Tabela;
● Documento = Registro;
7. Exemplo de documento 1
{
"_id" : ObjectId("541f30d992a2ee25fedaa652"),
"nome" : "Christiano",
"twitter" : "dump"
}
Chave Valor
8. Exemplo de documento 2
{
"_id" : ObjectId("541f30d992a2ee25fedaa652"),
"nome" : "Christiano",
"twitter" : "dump",
"linguagens" : [
"Python",
"C",
"JavaScript",
"C++"
]
}
Uma lista ou array
9. Exemplo de documento 3
{
"_id" : ObjectId("541f361892a2ee25fedaa653"),
"nome" : "Christiano",
"redes_sociais" : {
"Twitter" : "dump",
"Facebook" : "christiano.anderson",
"LinkedIn" : "christiano.anderson",
"Instagram" : "canderson9"
}
}
Uma lista de valores ou
Um documento embarcado
13. select * from cadastro;
Informação
Normalizada, relaciona
Com a tabela de cidade
Que relaciona com a
tabela de UF
14. E no MongoDB?
{
"_id" : ObjectId("541f64d092a2ee25fedaa654"),
"nome" : "Christiano",
"twitter" : "dump",
"cidade" : "São Paulo",
"uf" : "SP"
}
Os dados são desnormalizados
15. E coleções de referência?
Não há necessidade de criar uma coleção de
referência para Estados e outra para Cidades
16. Pode ser inconsistente?
● Sim, pode ocorrer inconsistências;
● O controle deve ser feito via código;
17. Schema Design
O grande segredo da modelagem
Está no “schema design”
18. Schema Design
● O arquiteto precisa entender como as
informações serão inseridas e consultadas no
sistema;
● O sucesso está em extrair o maior número de
informações em uma única consulta
19. Uma aplicação de Blog
Você já viu a quantidade de tabelas existentes no
WordPress?
20. Schema do Wordpress
Fonte: http://codex.wordpress.org/Database_Description/3.3
21. Posts e Comentários
Vamos pegar a parte principal
de uma aplicação de blog:
Posts
Comentários
23. Posts e comentários
Exemplo clássico de
“Um para muitos”
Um post = Vários comentários
24. Pensando no Relacional
● Tabela de Post possui a FK de cada post
● Tabela de Comentário possui FK ligando a
cada post
● A cada acesso no Post, é necessário fazer uma
consulta na tabela de Comentários para buscar
todos
29. Outro exemplo de schema design:
Coleção: livraria
Coleção: alunos
Os alunos podem retirar um ou
mais livros da livraria.
Como melhor fazer esse
Controle com MongoDB?
31. Coleção de Livros
> db.livros.find().pretty()
{ "_id" : 1, "titulo" : "A Ilha Perdida", "autor" : "Maria José Dupré" }
{ "_id" : 2, "titulo" : "Éramos Seis", "autor" : "Maria José Dupré" }
{ "_id" : 3, "titulo" : "Sozinha no Mundo", "autor" : "Marcos Rey" }
32. Primeiro cenário
Luizinho quer alugar o livro “A Ilha Perdida”
Criar uma chave “aluguel”
na coleção de livros
33. Alteração no documento do livro
{
"_id" : 1,
"titulo" : "A Ilha Perdida",
"autor" : "Maria José Dupré",
"aluguel" : {
"aluno_id" : 3,
"data" : ISODate("2014-09-21T00:00:00Z")
}
}
Ligação com o id do
aluno, Luizinho
34. Query de atualização
db.livros.update({'_id': 1},
{$set:{'aluguel':{'aluno_id':3,'data':ISODate('2014-09-
21')}}})
35. Ver todos os livros alugados
> db.livros.find({'aluguel':
{$exists:true}}).pretty()
{'aluguel':
"_id" : 1,
"titulo" : "A Ilha Perdida",
"autor" : "Maria José Dupré",
"aluguel" : {
"aluno_id" : 3,
"data" : ISODate("2014-09-
21T00:00:00Z")
}
}
41. Melhor schema
A pergunta é a mesma: buscar o maior número
de informações com uma ou poucas queries
42. Melhor schema
● Eficiência na gravação
● Eficiência na leitura
● Não existe mágica, é necessário entender o
funcionamento da aplicação
● Bom schema, bom código = sucesso garantido
● Índices e agregadores podem ser necessários.