9. NoSQL
•Usado em 1998 como o nome de um BD
relacional open source sem interface SQL;
•“Completamente distinto do modelo
relacional”;
•Deveria ser chamado NoREL;
•Voltou a ser usado em 2009 em um evento
sobre banco de dados open source
distribuídos.
10. NoSQL
•Vieram para suprir necessidades dos BD
tradicionais;
•Alta performance, escalabilidade, replicação,
suporte à dados estruturados e sub colunas.
13. NoSQL
•Existem vários tipos;
•São divididos pela forma usada para trabalhar
com seus dados:
•Wide column store
•Key/value store
•Graph store
•Column oriented store
•Document store
14. NoSQL
Wide column store
•Fortemente inspirados pelo BigTable do
google, suportam várias linhas e colunas além
de subcolunas.
•Outros exemplos:
•HBase (Yahoo)
•HiperTable
•Cassandra (Facebook e Digg)
15. NoSQL
Key/value store
•Mais simples, chave e valor para a chave.
•Agüenta mais carga de dados.
•São os mais escaláveis.
•Exemplos:
•MemcacheDB
•SimpleBD
•Berkeley DB
16. NoSQL
Graph store
•Mais complexo.
•Guarda objeto e não registros.
•Buscas são feitas pela navegação destes
objetos.
•Exemplos:
•Neo4J
•InfoGrid
•BigData
17. NoSQL
Column oriented store
•São relacionais.
•Tem características do NoSQL.
•Dados armazenados em colunas, não em
linhas.
•Exemplos:
•Vertica
•MonetDB
•LucidDB
18. NoSQL
Document oriented store
•Baseados em documentos XML ou JSON.
•Localização por ID único ou qualquer registro
do documento.
•Exemplos:
•CouchDB (Apache)
•MongoDB (Engine Yard)
•Riak
21. MongoDB
Orientado a Documentos
•Modelo relacional: representa mundo real (que
é n-dimensional) usando abordagem
bidimensional.
•Podemos melhorar isso com análise, mas
posteriormente um outro atributo pode ser
encontrado.
27. Eae?
•Representamos objetos do mundo real da
forma como eles são: complexos e únicos. =)
•Se precisar de novos atributos, eles serão
criados apenas onde for necessário. =)
•Desenvolvedor precisa tomar cuidado pro
banco não virar a casa da mãe Joana. =(
28. Redundância de dados over 9000
•Modelo relacional: Reduzir o máximo possível
a redundância de dados(formas normais,
relacionamentos).
•MongoDB: Sem relacionamentos, duplicação
não é um problema.
30. Redundância de dados over 9000
•Não há tabelas: há coleções de documentos.
•O documento é meu e eu guardo o que eu
quiser nele.
•Documentos devem ser auto-contidos.
•Uma única consulta retorna o documento
inteiro.
31. Então?
•Mais performance. Uma consulta retorna tudo
o que precisa a respeito do documento. =)
•Alterar todos registros relacionados a uma
unidade semântica requer tratamento um a um.
34. > show dbs
admin
bsp_development
local
> use bsp_development
switched to db bsp_development
> show collections
clientes
fornecedores
funcionarios
servicos
system.indexes
64. // inserir post
> db.posts.insert({titulo:'Analise e Projeto de Sistemas'});
> var post = db.posts.findOne({titulo:'Analise e Projeto de
Sistemas'});
// inserir comentario
> db.comentarios.insert({
nome:'Jefferson',
corpo:'Awo Boer, meu rei!',
post_id : post._id
});
> var comentario = db.comentarios.findOne({nome:'Jefferson'});
66. SELECT * FROM posts WHERE id = {#comentario.id}
> db.posts.find({_id: comentario.post_id})
{
"_id" : ObjectId("4d5955a5e0ab4d700255d83d"),
"titulo" : "Analise e Projeto de Sistemas"
}
68. // inserir post E comentarios
> db.posts.insert({
titulo: 'Analise e Projeto de Sistemas',
comentarios: [
nome: 'Jefferson', corpo: 'Haha, passei!'},
nome: 'Diego', corpo: 'Da meio ponto ai, Boer!'}
]
})
69. > var post = db.posts.find({titulo:'Analise e Projeto de Sistemas'});
> post
{
"_id" : ObjectId("4d5957e7e0ab4d700255d83f"),
"titulo" : "Analise e Projeto de Sistemas",
"comentarios" : [
{"nome" : "Jefferson", "corpo" : "Haha, passei!"},
{"nome" : "Diego", "corpo" : "Da meio ponto ai,
Boer!"}
]
}
76. > var bs = db.sites.findOne({dominio:'brassun.com.br'})
> db.usuarios.find({autorizacoes:bs._id})
// Jefferson e Lucio
> var shamanime = db.sites.findOne({dominio:'shamanime.com'})
> db.usuarios.find({autorizacoes:shamanime._id})
// Jefferson
77. > var jefferson = db.usuarios.findOne({nome:'Jefferson'})
> db.sites.find({_id:{$in: jefferson.autorizacoes}})
// shamanime.com e brassun.com.br