O documento resume as principais informações sobre MongoDB: (1) Sua origem vem da palavra "humongous"; (2) Foi criado pelos fundadores da Doubleclick e a 10gen foi fundada em 2007; (3) MongoDB pode substituir bancos relacionais em alguns casos quando há necessidade de escalabilidade e desempenho.
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
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;
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!
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
}
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
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