MongoDB Schema Design - Latinoware 2014

Embed Size (px)

DESCRIPTION

MongoDB Schema Design - Latinoware 2014

Citation preview

  • 1. Schema DesignLatinoware 2014Christiano [email protected]: @dumpBlog: http://christiano.me

2. Agenda Apresentao Modelo de documento MongoDB Tipos de dados Arquitetura Boas prticas 3. Quem sou? Especialista em Big Data e NoSQL na Propus; Desenvolvedor Python; Trabalha desde o incio da internet comercialdo Brasil; Fundador do MUG-SP; 4. MongoDB Orientao a documentos; ndices simples e compostos; Suporte a ndices: Full Text Search; Geogrfico; 5. Alguns conceitos Base de dados; Coleo; Documento; 6. Alguns conceitos Uma base de dados possui vrias colees; Uma coleo possui vrios documentos; Comparando com banco de dados relacional,podemos dizer que: Coleo = 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 ouUm documento embarcado 10. Desnormalizao 11. Exemplo de dadoNome: Christiano AndersonTwitter: dumpCidade: So PauloEstado: SP 12. Banco Relacional 13. select * from cadastro;InformaoNormalizada, relacionaCom a tabela de cidadeQue relaciona com atabela de UF 14. E no MongoDB?{"_id" : ObjectId("541f64d092a2ee25fedaa654"),"nome" : "Christiano","twitter" : "dump","cidade" : "So Paulo","uf" : "SP"}Os dados so desnormalizados 15. E colees de referncia?No h necessidade de criar uma coleo dereferncia para Estados e outra para Cidades 16. Pode ser inconsistente? Sim, pode ocorrer inconsistncias; O controle deve ser feito via cdigo; 17. Schema DesignO grande segredo da modelagemEst no schema design 18. Schema Design O arquiteto precisa entender como asinformaes sero inseridas e consultadas nosistema; O sucesso est em extrair o maior nmero deinformaes em uma nica consulta 19. Uma aplicao de BlogVoc j viu a quantidade de tabelas existentes noWordPress? 20. Schema do WordpressFonte: http://codex.wordpress.org/Database_Description/3.3 21. Posts e ComentriosVamos pegar a parte principalde uma aplicao de blog:PostsComentrios 22. Posts e Comentrios 23. Posts e comentriosExemplo clssico deUm para muitosUm post = Vrios comentrios 24. Pensando no Relacional Tabela de Post possui a FK de cada post Tabela de Comentrio possui FK ligando acada post A cada acesso no Post, necessrio fazer umaconsulta na tabela de Comentrios para buscartodos 25. E no MongoDB? 26. No MongoDBUma das tcnicas deixar postse comentrios na mesma coleo 27. {"_id" : ObjectId("541f6a9092a2ee25fedaa655"),"titulo" : "Aqui o ttulo","tags" : ["teste","exemplo","mongodb"],"conteudo" : "Aqui vem o Lorem Ipsum bsico","comentarios" : [{"usuario" : "Usuario Troll","email" : "[email protected]","comentario" : "Vim aqui s trollar"},{"usuario" : "Usuario Srio","email" : "[email protected]","comentario" : "Parabns pelo post"}]}PostOs comentrios ficamembarcados nomesmo documentoque o post 28. Uma nica query retorna o postE todos seus comentrios 29. Outro exemplo de schema design:Coleo: livrariaColeo: alunosOs alunos podem retirar um oumais livros da livraria.Como melhor fazer esseControle com MongoDB? 30. Coleo de alunos> db.alunos.find(){ "_id" : 1, "nome" : "Pedrinho", "sala" : "200" }{ "_id" : 2, "nome" : "Zezinho", "sala" : "404" }{ "_id" : 3, "nome" : "Luizinho", "sala" : "500" } 31. Coleo 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 cenrioLuizinho quer alugar o livro A Ilha PerdidaCriar uma chave aluguelna coleo de livros 33. Alterao 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")}}Ligao com o id doaluno, Luizinho 34. Query de atualizaodb.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")}} 36. Srie temporaltimestamp memoria_usada2013-10-10T23:06:37.000Z 10000002013-10-10T23:06:38.000Z 20000002013-10-10T23:06:39.000Z 2332200 37. A principal pergunta:Como voc vai buscar esses dados?Vai agregar por horas? 38. Documentos nicos{timestamp: ISODate("2013-10-10T23:06:37.000Z"),type: memory_used,value: 1000000},{timestamp: ISODate("2013-10-10T23:06:38.000Z"),type: memory_used,value: 2000000},{timestamp: ISODate("2013-10-10T23:06:39.000Z"),type: memory_used,value: 2322000} 39. Agregado por minuto{timestamp_minute: ISODate("2013-10-10T23:06:00.000Z"),type: memory_used,values: {0: 999999,37: 1000000,38: 1500000,59: 2000000}} 40. Agregado por hora{timestamp_hour: ISODate("2013-10-10T23:00:00.000Z"),type: memory_used,values: {0: 999999,1: 1000000,,3598: 1500000,3599: 2000000}} 41. Melhor schemaA pergunta a mesma: buscar o maior nmerode informaes com uma ou poucas queries 42. Melhor schema Eficincia na gravao Eficincia na leitura No existe mgica, necessrio entender ofuncionamento da aplicao Bom schema, bom cdigo = sucesso garantido ndices e agregadores podem ser necessrios. 43. Obrigado!Christiano AndersonTwitter: dump