Modelando aplicação em documento
Thiago Avelino@avelino0
O que é MongoDB?
•Banco de dados não relacional;
•Orientado a documentos;
•Alta Performance;
•Escalavel;
•Schema Aberto
•Open Source
Quem utiliza?•Github;
•Foursquare;
•bit.ly;
•Zynga;
•T Dispatch;
•Apontador;
•Globo.com;
•Entre outros...
Onde usar?
•web 2.0
•Migrations
•Flexibilidade
•Cache
Drivers•C, C++
•Erlang
•Java
•JavaScript
•Python
•Ruby
• Relação completa em: http://www.mongodb.org/display/DOCS/Drivers
Modelo de documento
{‘nome’: ‘Thiago Avelino’,‘empresa’: ‘Mochii’,‘pais’: ‘Londres’}
Modelo de documento{‘nome’: ‘Thiago Avelino’,‘empresa’: ‘Mochii’,‘pais’: ‘Londres’}
Sim é um JSON.Fácil de trabalhar com esse modelo de dados na maioria das linguagens
de programação
MigrationsÉ possóvel fazer mudança dinamica em um
documento
Migrations
{‘nome’: ‘Thiago Avelino’,‘empresa’: ‘Mochii’,‘local’: ‘Londres’}
É possóvel fazer mudança dinamica em um documento
Migrations
{‘nome’: ‘Thiago Avelino’,‘empresa’: ‘Mochii’,‘local’: ‘Londres’}
É possóvel fazer mudança dinamica em um documento
Migrations
{‘nome’: ‘Thiago Avelino’,‘empresa’: ‘Mochii’,‘local’: ‘Londres’}
É possóvel fazer mudança dinamica em um documento
{‘nome’: ‘Thiago Avelino’,‘cargo’: ‘engenheiro de software’,‘empresa’: ‘Mochii’,‘local’: ‘Londres’}
Migrations
{‘nome’: ‘Thiago Avelino’,‘empresa’: ‘Mochii’,‘local’: ‘Londres’}
É possóvel fazer mudança dinamica em um documento
{‘nome’: ‘Thiago Avelino’,‘cargo’: ‘engenheiro de software’,‘empresa’: ‘Mochii’,‘local’: ‘Londres’}
Adicionado mais um campo sem mexer em modelagem
Agregadoresdb.cadastro.insert({‘local’: ‘Berlin’})db.cadastro.insert({‘local’: ‘Londres’})db.cadastro.insert({‘local’: ‘Brasil’})db.cadastro.insert({‘local’: ‘Berlin’})
Agregadoresdb.cadastro.insert({‘local’: ‘Berlin’})db.cadastro.insert({‘local’: ‘Londres’})db.cadastro.insert({‘local’: ‘Brasil’})db.cadastro.insert({‘local’: ‘Berlin’})
db.cadastro.distinct(‘local’)
Agregadoresdb.cadastro.insert({‘local’: ‘Berlin’})db.cadastro.insert({‘local’: ‘Londres’})db.cadastro.insert({‘local’: ‘Brasil’})db.cadastro.insert({‘local’: ‘Berlin’})
db.cadastro.distinct(‘local’)
Agregadoresdb.cadastro.insert({‘local’: ‘Berlin’})db.cadastro.insert({‘local’: ‘Londres’})db.cadastro.insert({‘local’: ‘Brasil’})db.cadastro.insert({‘local’: ‘Berlin’})
db.cadastro.distinct(‘local’)
[‘Berlin’, ‘Londres’, ‘Brasil’]
Map/Reduce
Utilizado para criar funções dentro do MongoDB
Escrito em JavaScript
Map/ReduceExemplo
[_id, nome]Salas =
[_id, sala_id, data]
Reservas =
Descobrir o numero da reserva
https://gist.github.com/2782117
map = function () { emit(this.sala_id, [1]);}
reduce = function (sala, values) { var sum = 0; if (values) { for (var i = 0; i < values.length; i++) { sum += 1; } } return sum;}
Map/ReduceExemplo
db.reservas.mapReduce(map, reduce, {"out": "resultado"})
db.resultado.find({}){ "_id": ObjectId("4fbd6e69700f6e1266000002"),"value": 1}{ "_id": ObjectId("4fbd6e69700f6e1266000004"),"value": 2}
Índice
O Conceito é similar a bancos relacionais, exemplo MySQL
db.colecao.ensureIndex({nome: 1})
db.colecao.ensureIndex({‘endereco.cep’: 1})
Índice
db.colecao.getIndex()
Lista dos os índice criado:
ÍndiceÍndice unico
db.colecao.ensureIndex({nome: 1, sobrenome: 1}, unique: true});
db.colecao.insert({nome:'jane',sobrenome:'doe'}); // okdb.colecao.insert({nome:'jane',sobrenome:'doe'}); // dup key errordb.colecao.insert({nome:'jane',sobrenome:'smith'}); // ok
GridFS
Armazenamento de arquivos binários dentro do MongoDB (Até 4MB)
Maior controle de permissão de acesso;
http://www.mongodb.org/display/DOCS/GridFS
GridFS
Armazenamento de arquivos binários dentro do MongoDB (Até 4MB)
Maior controle de permissão de acesso;
http://www.mongodb.org/display/DOCS/GridFS
GridFS
HTTPHTTP
File system
File system
Aplicação
Aplicação
GridFS
HTTPHTTP
Aplicação
Aplicação
HTTPHTTP
Aplicação
Aplicação
GridFSGridFS
Replica Sets
Node #1
Node #1Node #2
Node #2
Aplicação
Aplicação
Replica Sets
Replica Sets
Replica Sets
Node #1
Node #1Node #2
Node #2
Aplicação
Aplicação
Replica Sets
Replica Sets
Node #3
Node #3
Replica Sets
Node #1
Node #1Node #2
Node #2
Aplicação
Aplicação
Replica Sets
Replica Sets
Node #3
Node #3
Sharding
Node #1
Node #1
Node #2
Node #2
Node #3
Node #3
a-da-d e-te-t u-zu-z
Modelar aplicação
Casos práticos
Quase tudo no mesmo documento
Casos práticos
Quase tudo no mesmo documento
4MB
Casos práticos
Dividindo aplicação em Collections
Não é fácil controlar muitas ObjID
Casos práticos
Como estamos hoje?
Cloud
Cloud
Obrigado!Perguntas?
Thiago Avelino@avelino0
www.avelino.usthiagoavelinoster@gma
il.com