SlideShare uma empresa Scribd logo
1 de 47
Tudo o que você precisa saber

Christiano Anderson
christiano@christiano.me
http://christiano.me
Twitter: @dump
Mongo?
●

Sim, em muitos idiomas pode ser um termo
pejorativo, mas a origem vem de:

Humongous
“Gigantesco”
História
●

Foi criado pelos fundadores da Doubleclick;

●

10gen foi fundada em 2007;

●

A ideia inicial era fazer um produto semelhante ao
Google App Engine;
Alta curva de crescimento

Contribuições ao core do MongoDB
Inúmeras contribuições
●

Em pouco tempo, muitos projetos novos:
–

MongoEngine;

–

Mongoose;

–

Pymongo;

–

MongoKit;

–

MongoMapper ….
Grandes players utilizando
●

Foursquare;

●

Github;

●

EA Games;

●

Entre diversos outros
–

No Brasil:
●
●
●

EasyTaxi;
Globo.com;
IG;
Um pouco de conceitos...
●

●

●

NoSQL: O termo foi criado por Carlo Strozzi e Eric
Evans como referência a um tipo de armazenamento
de dados;
Nunca, mas nunca está relacionado a ódio ao
modelo SQL, pelo contrário, podem até trabalhar em
conjunto;
O termo NoREL e Não Relacional também é
bastante utilizado
Por que usar NoSQL?
●

Novos paradigmas (nem tão novos assim);

●

Funcionalidades;

●

Escalabilidade;

●

Performance;

●

Não ficar preso a modelagem;
Volume de dados
●

Grande volume é relativo, o que você considera
grande?
–

Dados que crescem exponencialmente;

–

Agregam muitos valores dinamicamente;

–

Não precisam de modelagem;
Considere uso de MongoDB se...
●

Está usando muito cache em sua aplicação;

●

Os dados estão crescendo de forma exponencial;

●

Precisa de processamento em tempo real;

●

Gosta de desenvolvimento ágil;

●

Sua aplicação é “beta perpétua”;

●

Tem dificuldade para trabalhar com modelo relacional;

●

Usa muito “join” na sua aplicação relacional;
Iniciando com MongoDB
●

●

●

Sua distribuição GNU/Linux deve possuir pacotes
prontos;
No site da MongoDB, possível baixar binários para
outros sistemas operacionais;
A instalação é bem simples, a configuração padrão
do MongoDB já atende quase todos os cenários;
Pode substituir o banco relacional?
●

●

●

Até pode, mas é uma questão de arquitetura e
escolhas;
Uma aplicação pode usar MongoDB e banco
relacional;
Tudo vai depender da sua arquitetura;
Suporte a linguagens de programação
●

●

Praticamente todas as linguagens de programação
possuem suporte (driver) para MongoDB;
A lógica é bem parecida, o MongoDB tenta manter o
máximo de padrão;
Recursos animais!
●

Busca textual (Full Text Search);

●

Aggregation framework;

●

Índices espaciais (geográficos);

●

Sharding;

●

Replica Set;
Busca textual
●

Possui suporte a português do Brasil;

●

Stemming;

●

Stopwords;
Stemming
●

Se a frase abaixo estiver indexada como FTS:
“Enquanto houver vontade de lutar, haverá
esperança de vencer”

●

Se houver uma busca pela palavra “vencendo”, a
mesma será exibida no resultado de busca.
Interface em JavaScript
●

O MongoShell é baseado em JavaScript, oferece
toda flexibilidade para gerenciar o banco de dados e
executar operações administrativas
Nomenclaturas
Banco Relacional

MongoDB

Base de dados

-->

Base de Dados

Tabela

-->

Coleção

Registro

-->

Documento

Índice

-->

Índice

Join

-->

Documento embarcado

Foreign key

-->

Referência
Modelo de documento
{'nome':'Christiano',
'sobrenome':'Anderson',
'email':'anderson@nodeware.com.br',
'nota': 10}
Realizando operações via MongoShell
●

●

O MongoDB é implícito, não existe necessidade de
criar toda estrutura do banco de dados antes;
O MongoShell é uma ótima forma de aprendizado!
MongoShell
anderson@endor:~$ mongo
MongoDB shell version: 2.4.6
connecting to: test
> a = 10
10
> b = 30
30
>a<b
true
>b<a
false
Vamos lá...
anderson@endor:~$ mongo
MongoDB shell version: 2.4.6
connecting to: test
> use latinoware
switched to db latinoware
>

Nesse ponto, o banco
ainda está vazio.
Inserindo um registro
anderson@endor:~$ mongo
MongoDB shell version: 2.4.6
connecting to: test
> use latinoware
switched to db latinoware
> db.alunos.insert({
... 'nome':'Pedro',
... 'turma':'Python',
... 'nota': 10})
>

Nesse ponto, o banco foi criado
e o documento foi inserido, já
está persistido em disco
Verificando o registro
ObjectId é único para
cada documento

> db.alunos.findOne()
{
"_id" : ObjectId("525ecd6585512f4130afd2c4"),
"nome" : "Pedro",
"turma" : "Python",
"nota" : 10
}
Inserindo outro registro
> db.alunos.insert({
... nome: 'Carolina',
... sobrenome: 'Ferreira',
... sexo: 'feminino',
... idade: 29,
... email: 'carol@yahoo.com',
... materias: ['MongoDB','Riak','Java'],
... notas: {'MongoDB': 10, 'Riak': 8, 'Java': 9}
... })
>
Listando apenas o registro da Carolina
> db.alunos.find({'nome':'Carolina'}).pretty()
{
"_id" : ObjectId("522f25248434c181910716ec"),
"nome" : "Carolina",
"sobrenome" : "Ferreira",
"sexo" : "feminino",
"idade" : 29,
"email" : "carol@yahoo.com",
"materias" : [
"MongoDB",
"Riak",
"Java"
],
"notas" : {
"MongoDB" : 10,
"Riak" : 8,
"Java" : 9
}
}
>
Só mais um registro...
> db.alunos.insert({
... nome: 'Juliana',
... sobrenome: 'Silva',
... sexo: 'feminino',
... idade: 21,
... materias: ['Riak','Python']
... })

> db.alunos.count()
3
Listando apenas quem é do sexo
feminino
> db.alunos.find({sexo:'feminino'})
{ "_id" : ObjectId("5230ee7ec3141857756a81a8"), "nome" : "Carolina",
"sobrenome" : "Ferreira", "sexo" : "feminino", "idade" : 29, "email" :
"carol@yahoo.com", "materias" : [ "MongoDB", "Riak", "Java" ],
"notas" : { "MongoDB" : 10, "Riak" : 8, "Java" : 9 } }
{ "_id" : ObjectId("5230eec6c3141857756a81a9"), "nome" : "Juliana",
"sobrenome" : "Silva", "sexo" : "feminino", "idade" : 21, "materias" :
[ "Riak", "Python" ] }
Listando apenas quem tem MongoDB
na matéria
> db.alunos.find({materias:'MongoDB'})
{ "_id" : ObjectId("522f25248434c181910716ec"), "nome" : "Carolina",
"sobrenome" : "Ferreira", "sexo" : "feminino", "idade" : 29, "email" :
"carol@yahoo.com", "materias" : [ "MongoDB", "Riak", "Java" ],
"notas" : { "MongoDB" : 10, "Riak" : 8, "Java" : 9 } }
>
Listando quem tem menos de 30 anos
>

db.alunos.find({idade: {$lt: 30} })

{ "_id" : ObjectId("522f25248434c181910716ec"), "nome" : "Carolina", "sobrenome" : "Ferreira", "sexo" :
"feminino", "idade" : 29, "email" : "carol@yahoo.com", "materias" : [ "MongoDB", "Riak", "Java" ],
"notas" : { "MongoDB" : 10, "Riak" : 8, "Java" : 9 } }
{ "_id" : ObjectId("522f264c8434c181910716ed"), "nome" : "Juliana", "sobrenome" : "Silva", "sexo" :
"feminino", "idade" : 21, "materias" : [ "Riak", "Python" ] }
>
Alguns operadores de consulta
Operador

$gt
$gte
$lt
$lte

Descrição

Maior que

Maior ou igual que

Menor que

Menor ou igual que
Atualização de registro
Padrão de pesquisa

> db.alunos.update({'nome':'Carolina'},
{$set: {'sobrenome':'Ferreira Martins'}})

Operador de alteração
Resultado
> db.alunos.find({'nome':'Carolina'}).pretty()
{
"_id" : ObjectId("522f2b998434c181910716ee"),
"email" : "carol@yahoo.com",
"idade" : 29,
"materias" : [
"MongoDB",
"Riak",
"Java"
],
"nome" : "Carolina",
"notas" : {
"MongoDB" : 10,
"Riak" : 8,
"Java" : 9
},
"sexo" : "feminino",
"sobrenome" : "Ferreira Martins"
}
>
O que acontece se fizer isso?

> db.alunos.update({'nome':'Carolina'}, {'sobrenome':'Ferreira
Martins'})
Removendo registros

db.alunos.remove({'sobrenome':'Ferreira Martins'})
Listando só o nome dos alunos
> db.alunos.find({},{'nome':true,
{ "nome" : "Pedro" }
{ "nome" : "Juliana" }
{ "nome" : "Carolina" }

'_id': false})
Ordenação
> db.alunos.find({}, {'nome': true, '_id': false}).sort({nome: 1})
{ "nome" : "Carolina" }
{ "nome" : "Juliana" }
{ "nome" : "Pedro" }
Comparativo SQL
SQL

MongoDB

INSERT INTO USERS VALUES(1,1)

db.users.insert({a:1, b:1})

SELECT a,b FROM users

db.users.find({}, {a: 1, b: 1})

SELECT * FROM users

db.users.find()

SELECT * FROM users WHERE age=33

db.users.find({age: 33})

SELECT * FROm users WHERE name =

db.users.find({name:”pedro”})

“pedro”
Comparativo SQL
SQL
SELECT * FROM users WHERE age=33
ORDER BY name

MongoDB
db.users.find({‘age’:33}).sort({na
me:1})

SELECT * FROM users WHERE age < 33

db.users.find({‘age’:{$lt:33}})})

CREATE INDEX myindexname ON

db.users.ensureIndex({name:1})

user(name)
SELECT * FROM users WHERE a = 1
AND b = ‘q’
SELECT * FROM users LIMIT 10 SKIP 20

db.users.find({a:1, b:’q’})
db.users.find().limit(10).skip(20)
Como descobrir documentos que não
possuem determinada chave
> db.alunos.find({'email': {$exists: false} })
Adicionando chave em todos os
documentos
Query

> db.alunos.update({ },
O que adicionar

{ $set: { 'aprovado': true } },
{ multi: true })
Grava a alteração em todos
Os registros que atendem
Ao critério
Criando apontamentos
(relacionamentos)
> db.alunos.find().pretty()
{ "_id" : "pedro", "nome" : "Pedro", "email" : "pedro@teste.com" }
{ "_id" : "carol", "nome" : "Carol", "email" : "carol@teste.com" }
{ "_id" : "july", "nome" : "Juliana", "email" : "july@teste.com" }

> db.biblioteca.find().pretty()
{ "_id" : "0001", "titulo" : "Aprenda MongoDB" }
{ "_id" : "0002", "titulo" : "Aprenda Python" }
{ "_id" : "0003", "titulo" : "Aprenda Shell" }
Primeiro cenário
> db.alunos.update({'_id':'pedro'},{$set:{'biblioteca_id':
['0001','0002']}})
> db.alunos.find({'_id':'pedro'}).pretty()
{
"_id" : "pedro",
"biblioteca_id" : [
"0001",
"0002"
],
"email" : "pedro@teste.com",
"nome" : "Pedro"
}
Segundo cenário
> db.biblioteca.update({'_id':'0001'},
{$set:{'aluguel':
{'aluno_id':'pedro','data':'2013-09-09'}}})
> db.biblioteca.find({'_id':'0001'}).pretty()
{
"_id" : "0001",
"aluguel" : {
"aluno_id" : "pedro",
"data" : "2013-09-09"
},
"titulo" : "Aprenda MongoDB"
}
Terceiro cenário
●

Criar uma collection de referência, exemplo:
“aluguel_livros” e relacionar o _id do aluno com _id
do livro, assim como qualquer outra informação
adicional
Conclusão
●

●

É um novo paradigma, evite pensar de forma
relacional, senão o projeto ficará engessado;
Pode parecer estranho no começo, mas a prática
mostra que esse modelo funciona muito bem e é
muito produtivo;
Perguntas!
●

Obrigado!!! Se não deu tempo de responder sua
pergunta, me chame nas redes sociais ou pelos
corredores da Latinoware! :-)
http://christiano.me
Twitter: @dump
Email: christiano@christiano.me

Mais conteúdo relacionado

Destaque

No sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodbNo sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodbfabio perrella
 
BANCO DE DADOS MONGODB VS BANCO DE DADOS SQL SERVER 2008
BANCO DE DADOS MONGODB VS BANCO DE DADOS SQL SERVER 2008BANCO DE DADOS MONGODB VS BANCO DE DADOS SQL SERVER 2008
BANCO DE DADOS MONGODB VS BANCO DE DADOS SQL SERVER 2008CharlesAlfenasmg
 
Munindo sua startup com MongoDB
Munindo sua startup com MongoDBMunindo sua startup com MongoDB
Munindo sua startup com MongoDBJordan Kobellarz
 
MongoDB - Performance e Escalabilidade para aplicações web
MongoDB - Performance e Escalabilidade para aplicações webMongoDB - Performance e Escalabilidade para aplicações web
MongoDB - Performance e Escalabilidade para aplicações webRafael Nunes
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBAri Stopassola Junior
 
Conhecendo Apache Cassandra @Movile
Conhecendo Apache Cassandra  @MovileConhecendo Apache Cassandra  @Movile
Conhecendo Apache Cassandra @MovileEiti Kimura
 
Mais um comparativo MongoDB - Fernando Boaglio - abril.2014
Mais um comparativo MongoDB - Fernando Boaglio - abril.2014Mais um comparativo MongoDB - Fernando Boaglio - abril.2014
Mais um comparativo MongoDB - Fernando Boaglio - abril.2014Fernando Boaglio
 
Apresentação cassandra
Apresentação cassandraApresentação cassandra
Apresentação cassandraRichiely Paiva
 
Homologação requisitos para validar sistemas erp
Homologação   requisitos para validar sistemas erpHomologação   requisitos para validar sistemas erp
Homologação requisitos para validar sistemas erpSérgio Caldeira
 
Socialite, the Open Source Status Feed Part 2: Managing the Social Graph
Socialite, the Open Source Status Feed Part 2: Managing the Social GraphSocialite, the Open Source Status Feed Part 2: Managing the Social Graph
Socialite, the Open Source Status Feed Part 2: Managing the Social GraphMongoDB
 
MongoDB: Prós, Contras e Showcases.
MongoDB: Prós, Contras e Showcases.MongoDB: Prós, Contras e Showcases.
MongoDB: Prós, Contras e Showcases.Leonardo Quevedo
 
DataStax: Rigorous Cassandra Data Modeling for the Relational Data Architect
DataStax: Rigorous Cassandra Data Modeling for the Relational Data ArchitectDataStax: Rigorous Cassandra Data Modeling for the Relational Data Architect
DataStax: Rigorous Cassandra Data Modeling for the Relational Data ArchitectDataStax Academy
 
A mágica por trás dos aplicativos ( Api com o Laravel )
A mágica por trás dos aplicativos ( Api com o Laravel )A mágica por trás dos aplicativos ( Api com o Laravel )
A mágica por trás dos aplicativos ( Api com o Laravel )Michael Douglas
 
Lessons Learned from Building a Multi-Tenant Saas Content Management System o...
Lessons Learned from Building a Multi-Tenant Saas Content Management System o...Lessons Learned from Building a Multi-Tenant Saas Content Management System o...
Lessons Learned from Building a Multi-Tenant Saas Content Management System o...MongoDB
 
Big Data - O que é o hadoop, map reduce, hdfs e hive
Big Data - O que é o hadoop, map reduce, hdfs e hiveBig Data - O que é o hadoop, map reduce, hdfs e hive
Big Data - O que é o hadoop, map reduce, hdfs e hiveFlavio Fonte, PMP, ITIL
 
Webinar: Back to Basics: Thinking in Documents
Webinar: Back to Basics: Thinking in DocumentsWebinar: Back to Basics: Thinking in Documents
Webinar: Back to Basics: Thinking in DocumentsMongoDB
 

Destaque (20)

#1 Introdução ao MongoDB
#1   Introdução ao MongoDB#1   Introdução ao MongoDB
#1 Introdução ao MongoDB
 
No sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodbNo sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodb
 
BANCO DE DADOS MONGODB VS BANCO DE DADOS SQL SERVER 2008
BANCO DE DADOS MONGODB VS BANCO DE DADOS SQL SERVER 2008BANCO DE DADOS MONGODB VS BANCO DE DADOS SQL SERVER 2008
BANCO DE DADOS MONGODB VS BANCO DE DADOS SQL SERVER 2008
 
MongoDB na Campus Party
MongoDB na Campus PartyMongoDB na Campus Party
MongoDB na Campus Party
 
Munindo sua startup com MongoDB
Munindo sua startup com MongoDBMunindo sua startup com MongoDB
Munindo sua startup com MongoDB
 
MongoDB - Performance e Escalabilidade para aplicações web
MongoDB - Performance e Escalabilidade para aplicações webMongoDB - Performance e Escalabilidade para aplicações web
MongoDB - Performance e Escalabilidade para aplicações web
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDB
 
MongoDB
MongoDBMongoDB
MongoDB
 
Conhecendo Apache Cassandra @Movile
Conhecendo Apache Cassandra  @MovileConhecendo Apache Cassandra  @Movile
Conhecendo Apache Cassandra @Movile
 
Mais um comparativo MongoDB - Fernando Boaglio - abril.2014
Mais um comparativo MongoDB - Fernando Boaglio - abril.2014Mais um comparativo MongoDB - Fernando Boaglio - abril.2014
Mais um comparativo MongoDB - Fernando Boaglio - abril.2014
 
Apresentação cassandra
Apresentação cassandraApresentação cassandra
Apresentação cassandra
 
Homologação requisitos para validar sistemas erp
Homologação   requisitos para validar sistemas erpHomologação   requisitos para validar sistemas erp
Homologação requisitos para validar sistemas erp
 
Socialite, the Open Source Status Feed Part 2: Managing the Social Graph
Socialite, the Open Source Status Feed Part 2: Managing the Social GraphSocialite, the Open Source Status Feed Part 2: Managing the Social Graph
Socialite, the Open Source Status Feed Part 2: Managing the Social Graph
 
MongoDB: Prós, Contras e Showcases.
MongoDB: Prós, Contras e Showcases.MongoDB: Prós, Contras e Showcases.
MongoDB: Prós, Contras e Showcases.
 
DataStax: Rigorous Cassandra Data Modeling for the Relational Data Architect
DataStax: Rigorous Cassandra Data Modeling for the Relational Data ArchitectDataStax: Rigorous Cassandra Data Modeling for the Relational Data Architect
DataStax: Rigorous Cassandra Data Modeling for the Relational Data Architect
 
Modelos de base de dados
Modelos de base de dadosModelos de base de dados
Modelos de base de dados
 
A mágica por trás dos aplicativos ( Api com o Laravel )
A mágica por trás dos aplicativos ( Api com o Laravel )A mágica por trás dos aplicativos ( Api com o Laravel )
A mágica por trás dos aplicativos ( Api com o Laravel )
 
Lessons Learned from Building a Multi-Tenant Saas Content Management System o...
Lessons Learned from Building a Multi-Tenant Saas Content Management System o...Lessons Learned from Building a Multi-Tenant Saas Content Management System o...
Lessons Learned from Building a Multi-Tenant Saas Content Management System o...
 
Big Data - O que é o hadoop, map reduce, hdfs e hive
Big Data - O que é o hadoop, map reduce, hdfs e hiveBig Data - O que é o hadoop, map reduce, hdfs e hive
Big Data - O que é o hadoop, map reduce, hdfs e hive
 
Webinar: Back to Basics: Thinking in Documents
Webinar: Back to Basics: Thinking in DocumentsWebinar: Back to Basics: Thinking in Documents
Webinar: Back to Basics: Thinking in Documents
 

Semelhante a MongoDB - Tudo o que você precisa saber

MongoDB - Tudo que você precisa saber - FGSL 2014
MongoDB - Tudo que você precisa saber - FGSL 2014MongoDB - Tudo que você precisa saber - FGSL 2014
MongoDB - Tudo que você precisa saber - FGSL 2014Christiano Anderson
 
MongoDB - Tudo o que você precisa saber - FISL16
MongoDB - Tudo o que você precisa saber - FISL16MongoDB - Tudo o que você precisa saber - FISL16
MongoDB - Tudo o que você precisa saber - FISL16Christiano Anderson
 
MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014Christiano Anderson
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Christiano Anderson
 
Desenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDBDesenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDBiMasters
 
Minicurso Introdução ao mongoDB SCTI
Minicurso Introdução ao mongoDB SCTIMinicurso Introdução ao mongoDB SCTI
Minicurso Introdução ao mongoDB SCTIBruna Pereira
 
GraphQL - APIs mais robustas e flexíveis
GraphQL - APIs mais robustas e flexíveisGraphQL - APIs mais robustas e flexíveis
GraphQL - APIs mais robustas e flexíveisBruno Lemos
 
MongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documentoMongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documentoJulio Monteiro
 
Aumentando a produtividade com Android Libs
Aumentando a produtividade com Android LibsAumentando a produtividade com Android Libs
Aumentando a produtividade com Android LibsNelson Glauber Leal
 
Utilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesUtilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesChristiano Anderson
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - ApresentaçãoTerra / Neo
 
Mongodb praquer-usar-uaijugcloudday2014
Mongodb praquer-usar-uaijugcloudday2014Mongodb praquer-usar-uaijugcloudday2014
Mongodb praquer-usar-uaijugcloudday2014Rogerio Fontes
 
MongoDB, Banco de Dados orientado a documento
MongoDB, Banco de Dados orientado a documentoMongoDB, Banco de Dados orientado a documento
MongoDB, Banco de Dados orientado a documentoThiago Avelino
 

Semelhante a MongoDB - Tudo o que você precisa saber (20)

MongoDB - Tudo que você precisa saber - FGSL 2014
MongoDB - Tudo que você precisa saber - FGSL 2014MongoDB - Tudo que você precisa saber - FGSL 2014
MongoDB - Tudo que você precisa saber - FGSL 2014
 
MongoDB - Tudo o que você precisa saber - FISL16
MongoDB - Tudo o que você precisa saber - FISL16MongoDB - Tudo o que você precisa saber - FISL16
MongoDB - Tudo o que você precisa saber - FISL16
 
MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7
 
Python e MongoDB - Ensol
Python e MongoDB - EnsolPython e MongoDB - Ensol
Python e MongoDB - Ensol
 
Meetup MUG-RS KingHost
Meetup MUG-RS KingHostMeetup MUG-RS KingHost
Meetup MUG-RS KingHost
 
Desenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDBDesenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDB
 
Palestra nosql
Palestra nosqlPalestra nosql
Palestra nosql
 
Minicurso Introdução ao mongoDB SCTI
Minicurso Introdução ao mongoDB SCTIMinicurso Introdução ao mongoDB SCTI
Minicurso Introdução ao mongoDB SCTI
 
GraphQL - APIs mais robustas e flexíveis
GraphQL - APIs mais robustas e flexíveisGraphQL - APIs mais robustas e flexíveis
GraphQL - APIs mais robustas e flexíveis
 
Python MongoDB no MongoSP
Python MongoDB no MongoSPPython MongoDB no MongoSP
Python MongoDB no MongoSP
 
MongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documentoMongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documento
 
Minicurso mongo db
Minicurso mongo dbMinicurso mongo db
Minicurso mongo db
 
Aumentando a produtividade com Android Libs
Aumentando a produtividade com Android LibsAumentando a produtividade com Android Libs
Aumentando a produtividade com Android Libs
 
Utilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesUtilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentes
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - Apresentação
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
Mongodb praquer-usar-uaijugcloudday2014
Mongodb praquer-usar-uaijugcloudday2014Mongodb praquer-usar-uaijugcloudday2014
Mongodb praquer-usar-uaijugcloudday2014
 
MongoDB, Banco de Dados orientado a documento
MongoDB, Banco de Dados orientado a documentoMongoDB, Banco de Dados orientado a documento
MongoDB, Banco de Dados orientado a documento
 
Mongo db slides
Mongo db slidesMongo db slides
Mongo db slides
 

Mais de Christiano Anderson

Mapeando a Terra com soluções livres e GeoDjango
Mapeando a Terra com soluções livres e GeoDjangoMapeando a Terra com soluções livres e GeoDjango
Mapeando a Terra com soluções livres e GeoDjangoChristiano Anderson
 
Grafos - Uma abordagem divertida - Latinoware 2014
Grafos - Uma abordagem divertida - Latinoware 2014Grafos - Uma abordagem divertida - Latinoware 2014
Grafos - Uma abordagem divertida - Latinoware 2014Christiano Anderson
 
Persistência Poliglota, Big Data e NoSQL FISL 15
Persistência Poliglota, Big Data e NoSQL FISL 15Persistência Poliglota, Big Data e NoSQL FISL 15
Persistência Poliglota, Big Data e NoSQL FISL 15Christiano Anderson
 
Geo Django - Fórum Goiano de Software Livre - 10 FGSL e 1 ERI
Geo Django - Fórum Goiano de Software Livre - 10 FGSL e 1 ERIGeo Django - Fórum Goiano de Software Livre - 10 FGSL e 1 ERI
Geo Django - Fórum Goiano de Software Livre - 10 FGSL e 1 ERIChristiano Anderson
 

Mais de Christiano Anderson (11)

certificadoTDC2016Floripa
certificadoTDC2016FloripacertificadoTDC2016Floripa
certificadoTDC2016Floripa
 
Mapeando a Terra com soluções livres e GeoDjango
Mapeando a Terra com soluções livres e GeoDjangoMapeando a Terra com soluções livres e GeoDjango
Mapeando a Terra com soluções livres e GeoDjango
 
Grafos - Uma abordagem divertida - Latinoware 2014
Grafos - Uma abordagem divertida - Latinoware 2014Grafos - Uma abordagem divertida - Latinoware 2014
Grafos - Uma abordagem divertida - Latinoware 2014
 
Big Data Latinoware 2014
Big Data Latinoware 2014Big Data Latinoware 2014
Big Data Latinoware 2014
 
Big Data - Conceitos Básicos
Big Data - Conceitos BásicosBig Data - Conceitos Básicos
Big Data - Conceitos Básicos
 
Persistência Poliglota, Big Data e NoSQL FISL 15
Persistência Poliglota, Big Data e NoSQL FISL 15Persistência Poliglota, Big Data e NoSQL FISL 15
Persistência Poliglota, Big Data e NoSQL FISL 15
 
Geo Django - Fórum Goiano de Software Livre - 10 FGSL e 1 ERI
Geo Django - Fórum Goiano de Software Livre - 10 FGSL e 1 ERIGeo Django - Fórum Goiano de Software Livre - 10 FGSL e 1 ERI
Geo Django - Fórum Goiano de Software Livre - 10 FGSL e 1 ERI
 
Django - Muito além do básico
Django - Muito além do básicoDjango - Muito além do básico
Django - Muito além do básico
 
GeoDjango
GeoDjangoGeoDjango
GeoDjango
 
Scrum
ScrumScrum
Scrum
 
Python and MongoDB
Python and MongoDBPython and MongoDB
Python and MongoDB
 

MongoDB - Tudo o que você precisa saber

  • 1. Tudo o que você precisa saber Christiano Anderson christiano@christiano.me http://christiano.me Twitter: @dump
  • 2. Mongo? ● Sim, em muitos idiomas pode ser um termo pejorativo, mas a origem vem de: Humongous “Gigantesco”
  • 3. História ● Foi criado pelos fundadores da Doubleclick; ● 10gen foi fundada em 2007; ● A ideia inicial era fazer um produto semelhante ao Google App Engine;
  • 4. Alta curva de crescimento Contribuições ao core do MongoDB
  • 5. Inúmeras contribuições ● Em pouco tempo, muitos projetos novos: – MongoEngine; – Mongoose; – Pymongo; – MongoKit; – MongoMapper ….
  • 6. Grandes players utilizando ● Foursquare; ● Github; ● EA Games; ● Entre diversos outros – No Brasil: ● ● ● EasyTaxi; Globo.com; IG;
  • 7. Um pouco de conceitos... ● ● ● NoSQL: O termo foi criado por Carlo Strozzi e Eric Evans como referência a um tipo de armazenamento de dados; Nunca, mas nunca está relacionado a ódio ao modelo SQL, pelo contrário, podem até trabalhar em conjunto; O termo NoREL e Não Relacional também é bastante utilizado
  • 8. Por que usar NoSQL? ● Novos paradigmas (nem tão novos assim); ● Funcionalidades; ● Escalabilidade; ● Performance; ● Não ficar preso a modelagem;
  • 9. Volume de dados ● Grande volume é relativo, o que você considera grande? – Dados que crescem exponencialmente; – Agregam muitos valores dinamicamente; – Não precisam de modelagem;
  • 10. Considere uso de MongoDB se... ● Está usando muito cache em sua aplicação; ● Os dados estão crescendo de forma exponencial; ● Precisa de processamento em tempo real; ● Gosta de desenvolvimento ágil; ● Sua aplicação é “beta perpétua”; ● Tem dificuldade para trabalhar com modelo relacional; ● Usa muito “join” na sua aplicação relacional;
  • 11. Iniciando com MongoDB ● ● ● Sua distribuição GNU/Linux deve possuir pacotes prontos; No site da MongoDB, possível baixar binários para outros sistemas operacionais; A instalação é bem simples, a configuração padrão do MongoDB já atende quase todos os cenários;
  • 12. Pode substituir o banco relacional? ● ● ● Até pode, mas é uma questão de arquitetura e escolhas; Uma aplicação pode usar MongoDB e banco relacional; Tudo vai depender da sua arquitetura;
  • 13. Suporte a linguagens de programação ● ● Praticamente todas as linguagens de programação possuem suporte (driver) para MongoDB; A lógica é bem parecida, o MongoDB tenta manter o máximo de padrão;
  • 14. Recursos animais! ● Busca textual (Full Text Search); ● Aggregation framework; ● Índices espaciais (geográficos); ● Sharding; ● Replica Set;
  • 15. Busca textual ● Possui suporte a português do Brasil; ● Stemming; ● Stopwords;
  • 16. Stemming ● Se a frase abaixo estiver indexada como FTS: “Enquanto houver vontade de lutar, haverá esperança de vencer” ● Se houver uma busca pela palavra “vencendo”, a mesma será exibida no resultado de busca.
  • 17. Interface em JavaScript ● O MongoShell é baseado em JavaScript, oferece toda flexibilidade para gerenciar o banco de dados e executar operações administrativas
  • 18. Nomenclaturas Banco Relacional MongoDB Base de dados --> Base de Dados Tabela --> Coleção Registro --> Documento Índice --> Índice Join --> Documento embarcado Foreign key --> Referência
  • 20. Realizando operações via MongoShell ● ● O MongoDB é implícito, não existe necessidade de criar toda estrutura do banco de dados antes; O MongoShell é uma ótima forma de aprendizado!
  • 21. MongoShell anderson@endor:~$ mongo MongoDB shell version: 2.4.6 connecting to: test > a = 10 10 > b = 30 30 >a<b true >b<a false
  • 22. Vamos lá... anderson@endor:~$ mongo MongoDB shell version: 2.4.6 connecting to: test > use latinoware switched to db latinoware > Nesse ponto, o banco ainda está vazio.
  • 23. Inserindo um registro anderson@endor:~$ mongo MongoDB shell version: 2.4.6 connecting to: test > use latinoware switched to db latinoware > db.alunos.insert({ ... 'nome':'Pedro', ... 'turma':'Python', ... 'nota': 10}) > Nesse ponto, o banco foi criado e o documento foi inserido, já está persistido em disco
  • 24. Verificando o registro ObjectId é único para cada documento > db.alunos.findOne() { "_id" : ObjectId("525ecd6585512f4130afd2c4"), "nome" : "Pedro", "turma" : "Python", "nota" : 10 }
  • 25. Inserindo outro registro > db.alunos.insert({ ... nome: 'Carolina', ... sobrenome: 'Ferreira', ... sexo: 'feminino', ... idade: 29, ... email: 'carol@yahoo.com', ... materias: ['MongoDB','Riak','Java'], ... notas: {'MongoDB': 10, 'Riak': 8, 'Java': 9} ... }) >
  • 26. Listando apenas o registro da Carolina > db.alunos.find({'nome':'Carolina'}).pretty() { "_id" : ObjectId("522f25248434c181910716ec"), "nome" : "Carolina", "sobrenome" : "Ferreira", "sexo" : "feminino", "idade" : 29, "email" : "carol@yahoo.com", "materias" : [ "MongoDB", "Riak", "Java" ], "notas" : { "MongoDB" : 10, "Riak" : 8, "Java" : 9 } } >
  • 27. Só mais um registro... > db.alunos.insert({ ... nome: 'Juliana', ... sobrenome: 'Silva', ... sexo: 'feminino', ... idade: 21, ... materias: ['Riak','Python'] ... }) > db.alunos.count() 3
  • 28. Listando apenas quem é do sexo feminino > db.alunos.find({sexo:'feminino'}) { "_id" : ObjectId("5230ee7ec3141857756a81a8"), "nome" : "Carolina", "sobrenome" : "Ferreira", "sexo" : "feminino", "idade" : 29, "email" : "carol@yahoo.com", "materias" : [ "MongoDB", "Riak", "Java" ], "notas" : { "MongoDB" : 10, "Riak" : 8, "Java" : 9 } } { "_id" : ObjectId("5230eec6c3141857756a81a9"), "nome" : "Juliana", "sobrenome" : "Silva", "sexo" : "feminino", "idade" : 21, "materias" : [ "Riak", "Python" ] }
  • 29. Listando apenas quem tem MongoDB na matéria > db.alunos.find({materias:'MongoDB'}) { "_id" : ObjectId("522f25248434c181910716ec"), "nome" : "Carolina", "sobrenome" : "Ferreira", "sexo" : "feminino", "idade" : 29, "email" : "carol@yahoo.com", "materias" : [ "MongoDB", "Riak", "Java" ], "notas" : { "MongoDB" : 10, "Riak" : 8, "Java" : 9 } } >
  • 30. Listando quem tem menos de 30 anos > db.alunos.find({idade: {$lt: 30} }) { "_id" : ObjectId("522f25248434c181910716ec"), "nome" : "Carolina", "sobrenome" : "Ferreira", "sexo" : "feminino", "idade" : 29, "email" : "carol@yahoo.com", "materias" : [ "MongoDB", "Riak", "Java" ], "notas" : { "MongoDB" : 10, "Riak" : 8, "Java" : 9 } } { "_id" : ObjectId("522f264c8434c181910716ed"), "nome" : "Juliana", "sobrenome" : "Silva", "sexo" : "feminino", "idade" : 21, "materias" : [ "Riak", "Python" ] } >
  • 31. Alguns operadores de consulta Operador $gt $gte $lt $lte Descrição Maior que Maior ou igual que Menor que Menor ou igual que
  • 32. Atualização de registro Padrão de pesquisa > db.alunos.update({'nome':'Carolina'}, {$set: {'sobrenome':'Ferreira Martins'}}) Operador de alteração
  • 33. Resultado > db.alunos.find({'nome':'Carolina'}).pretty() { "_id" : ObjectId("522f2b998434c181910716ee"), "email" : "carol@yahoo.com", "idade" : 29, "materias" : [ "MongoDB", "Riak", "Java" ], "nome" : "Carolina", "notas" : { "MongoDB" : 10, "Riak" : 8, "Java" : 9 }, "sexo" : "feminino", "sobrenome" : "Ferreira Martins" } >
  • 34. O que acontece se fizer isso? > db.alunos.update({'nome':'Carolina'}, {'sobrenome':'Ferreira Martins'})
  • 36. Listando só o nome dos alunos > db.alunos.find({},{'nome':true, { "nome" : "Pedro" } { "nome" : "Juliana" } { "nome" : "Carolina" } '_id': false})
  • 37. Ordenação > db.alunos.find({}, {'nome': true, '_id': false}).sort({nome: 1}) { "nome" : "Carolina" } { "nome" : "Juliana" } { "nome" : "Pedro" }
  • 38. Comparativo SQL SQL MongoDB INSERT INTO USERS VALUES(1,1) db.users.insert({a:1, b:1}) SELECT a,b FROM users db.users.find({}, {a: 1, b: 1}) SELECT * FROM users db.users.find() SELECT * FROM users WHERE age=33 db.users.find({age: 33}) SELECT * FROm users WHERE name = db.users.find({name:”pedro”}) “pedro”
  • 39. Comparativo SQL SQL SELECT * FROM users WHERE age=33 ORDER BY name MongoDB db.users.find({‘age’:33}).sort({na me:1}) SELECT * FROM users WHERE age < 33 db.users.find({‘age’:{$lt:33}})}) CREATE INDEX myindexname ON db.users.ensureIndex({name:1}) user(name) SELECT * FROM users WHERE a = 1 AND b = ‘q’ SELECT * FROM users LIMIT 10 SKIP 20 db.users.find({a:1, b:’q’}) db.users.find().limit(10).skip(20)
  • 40. Como descobrir documentos que não possuem determinada chave > db.alunos.find({'email': {$exists: false} })
  • 41. Adicionando chave em todos os documentos Query > db.alunos.update({ }, O que adicionar { $set: { 'aprovado': true } }, { multi: true }) Grava a alteração em todos Os registros que atendem Ao critério
  • 42. Criando apontamentos (relacionamentos) > db.alunos.find().pretty() { "_id" : "pedro", "nome" : "Pedro", "email" : "pedro@teste.com" } { "_id" : "carol", "nome" : "Carol", "email" : "carol@teste.com" } { "_id" : "july", "nome" : "Juliana", "email" : "july@teste.com" } > db.biblioteca.find().pretty() { "_id" : "0001", "titulo" : "Aprenda MongoDB" } { "_id" : "0002", "titulo" : "Aprenda Python" } { "_id" : "0003", "titulo" : "Aprenda Shell" }
  • 43. Primeiro cenário > db.alunos.update({'_id':'pedro'},{$set:{'biblioteca_id': ['0001','0002']}}) > db.alunos.find({'_id':'pedro'}).pretty() { "_id" : "pedro", "biblioteca_id" : [ "0001", "0002" ], "email" : "pedro@teste.com", "nome" : "Pedro" }
  • 44. Segundo cenário > db.biblioteca.update({'_id':'0001'}, {$set:{'aluguel': {'aluno_id':'pedro','data':'2013-09-09'}}}) > db.biblioteca.find({'_id':'0001'}).pretty() { "_id" : "0001", "aluguel" : { "aluno_id" : "pedro", "data" : "2013-09-09" }, "titulo" : "Aprenda MongoDB" }
  • 45. Terceiro cenário ● Criar uma collection de referência, exemplo: “aluguel_livros” e relacionar o _id do aluno com _id do livro, assim como qualquer outra informação adicional
  • 46. Conclusão ● ● É um novo paradigma, evite pensar de forma relacional, senão o projeto ficará engessado; Pode parecer estranho no começo, mas a prática mostra que esse modelo funciona muito bem e é muito produtivo;
  • 47. Perguntas! ● Obrigado!!! Se não deu tempo de responder sua pergunta, me chame nas redes sociais ou pelos corredores da Latinoware! :-) http://christiano.me Twitter: @dump Email: christiano@christiano.me

Notas do Editor

  1. {}