Modelando aplicação em documento - MongoDB

Post on 25-May-2015

4.230 views 3 download

Transcript of Modelando aplicação em documento - MongoDB

Modelando aplicação em documento

Thiago Avelino@avelino0

www.avelino.usthiagoavelinoster@gmail.com

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

Suporte Comercial

http://www.10gen.com/support

Marcello Baquero - marcello@10gen.com

Obrigado!Perguntas?

Thiago Avelino@avelino0

www.avelino.usthiagoavelinoster@gma

il.com