Apresentação de Alex Martins e Laercio de Souza. Estudantes de Sistemas para Internet. Agradecimento as pessoas que apoiaram no desenvolvimento da apresentação. Faltou algumas referências. Mas para ficar a disposição para vocês.
2. Apresentação
• NoSQL
• Problemas que levaram a utilização do NoSQL
• Quando utilizar NoSQL?
• Tipos
• Orientação à documentos
• MapReduce
• JSON
• CouchDB
• MongoDB
3. NoSQL
• Quando surgiu
o Na criação do termo, existia ausência do SQL e o modelo
ainda centrado no relacional
o O movimento NoSQL "é completamente distinto do
modelo relacional e portanto deveria ser chamado
"NoREL" ou algo que produzisse o mesmo efeito".
Carlo Strozzi
o Termo NoSQL vira abreviação de Not Only SQL
4. NoSQL
• O que é NoSQL hoje?
o Not Only SQL (Não apenas, não somente SQL)
o NoSQL = Não Relacional
o Atualmente é uma altenativa ao modelo relacional
5. NoSQL
• Problemas que motivaram a utilização do NoSQL
• BigData
o Volume
o Variedade
o Velocidade dos Dados
• Modelo relacional perde desempenho quando
utiliza BigData
6. NoSQL
• Teorema CAP
o Consistency, Availability and Partition tolerance
o Conceitos ACID x BASE
• ACID (Atomicity, Consistency, Isolation and Durability)
• BASE (Basically Available, Soft-state, Eventually
consistency)
o Traz uma sensível diminuição no custo
computacional para a garantia de consistência
dos dados em relação à SGBDs tradicionais.
7. NoSQL
• MapReduce
o MapReduce(Framework desenvolvido pelo Google) -
Modelo de programação paralela para processamento
largamente distribuído de grandes volumes de dados.
o MAP - processo de mapear a requisição do originador.
o REDUCE - processo de agregação do resultado em algo
consolidado.
8. NoSQL
• Quando utilizar NoSQL?
o Escalabilidade
o Flexibilidade
o Manipulação de quantidade massiva de dados
o Bom desempenho
o Facilidade para consultas
9. NoSQL
• Tipos de NoSQL
o Key/Value: DynamoDb, Riak, Azure Table Storage, Berkeley
DB, etc.
o Wide column store: Hadoop, Cassanda, Hypertable,
Amazon SimpleDB, etc.
o Document store: MongoDb, CouchDB, RavenDb, etc.
o Graph store: Neo4J, Infinite Graph, InforGrid,
HyperGraphDB, etc.
12. Orientação à documentos
Definição
Segundo Anderson(Anderson, et al., 2009),
BDODs utilizam o conceito de dados e documentos
autocontidos e auto descritivos, isso implica que o
documento em si já define como ele deve ser
apresentado e o significado dos dados em cuja sua
estrutura estão armazenados.
Exemplo: Uma nota fiscal.
13. Orientação à documentos
Características
• Permite que tenha redundância e inconsistência.
• Contêm todas as informações importantes em um único
documento.
• Livre de esquemas.
• Identificadores Únicos Universais(UUID)
• Consultar os documentos através de métodos avançados de
agrupamento e filtragem: MapReduce
14. Orientação à documentos
• JSON
o É um padrão leve de intercâmbio de dados, projetado
para facilitar a leitura e escrita de estruturas, também
sendo de fácil interpretação e geração por máquinas.
o Suas estruturas são baseadas em um subconjunto da
especificação da linguagem JavaScript e permitem a
construção de estruturas de dados partindo de dois
conceitos: uma coleção de pares chave/valor e uma lista
ordenada de valores (JSON, 2008).
16. Orientação à documentos
• Vantagens
o Ganha Flexibilidade, disponibilidade, linguagem de
consulta simples e performance.
• Desvantagem
o Perde em consistência.
19. CouchDB
• Definição
o O CouchDB é um sistema distribuído, acessível através de
uma API RESTful, realiza o armazenamento versionado de
objetos que utiliza a abstração de documentos,
disponibiliza uma forma de agregar e consultar dados
através do MapReduce e replica seus dados de forma
incremental, bidirecional e multi-master, utilizando o
MVCC, um algoritmo de consenso de conflitos, onde os
dados estão sujeitos a consistência eventual em cada nó
(Anderson, et al., 2009).
20. CouchDB
• Linha de comando
o RESTful API
• Interface do Futon
o Cria documentos no formato JSON
21. CouchDB
• RESTful API
o Leitura do banco de dados
o Escreve: GET http://localhost:5984/
o Retorna: {"couchdb":"Welcome","version":"1.0.1"}
22. CouchDB
• RESTful API
o Criando ou atualizando o banco de dados
o Escreve: PUT http://localhost:5984/database
o Retorna: {"ok":true}
23. CouchDB
• RESTful API
o Deletando o banco de dados
o Escreve: DELETE http://localhost:5984/database
o Retorna: {"ok":true}
24. CouchDB
• RESTful API
o Criando o documento
o Escreve: PUT http://localhost:5984/database/doc-
d'{"nome":"Henrique","apelido":"Gogó"}‘
o Retorna: {"ok":true,"id":"doc","rev":"1-
446a0c701e94053b4c3baaa5ef3fe68c"}
25. CouchDB
• RESTful API
o Ver o documento
o Escreve: GET http://localhost:5984/database/doc
o Retorna: {"_id":"doc","_rev":"1-
446a0c701e94053b4c3baaa5ef3fe68c","no
me":"Henrique","apelido":"Gogu00f3"}
26. CouchDB
• RESTful API
o Atualizar o documento
o Escreve: PUT http://localhost:5984/database/doc
-d '{"_rev":"1-446a0c701e94053b4c3baaa5ef3fe68c",
"apelido":"Gogs"}‘
o Retorna: {"ok":true,"id":"doc","rev":"2-
191182436ca9a532ec1124aa91b5a8da"}
27. CouchDB
• RESTful API
o Deletar o documento
o Escreve: DELETE http://localhost:5984/database/doc?rev=2-
191182436ca9a532ec1124aa91b5a8da
o Retorna: {"ok":true,"id":"doc","rev":"3-
4c1033574d7d38e57fe92a1b51fc667d"}
36. MongoDB
• Apresentação da ferramenta
o Código aberto
o Alta performance (desempenho)
o Sem esquemas
o Orientado à documentos
o Escrito em C++
o Multiplataforma
o É formado por um conjunto de Aplicativos JSON
38. MongoDB
• Funcionamento
o JSON – estilo de documento com esquemas dinâmicos
para oferecer simplicidade e poder.
o Suporte de índice completo
o Auto-Sharding - escala horizontalmente sem comprometer
a funcionalidade.
o Consultas Ricas, baseada em documentos
o MapReduce - Agregação flexível e processamento de
dados.
o GridFS - Armazenar arquivos de qualquer tamanho sem
complicação.
39. MongoDB
• Analogia à BD Relacional
o O documento JSON seria o registro;
o A collection seria uma tabela;
o Os índices seriam os índices mesmo;
o O embedding e o linking seria o join.
40. MongoDB
• Algumas características interessantes do MongoDB
o É possível acrescentar dados, por meio de um update;
o Não existe um schema dentro das coleções, ou seja, as
collections podem ser dinâmicas;
o Há upserts, que podem atualizar se documento já existe,
ou cria se ele não existe;
o Você pode armazenar o seu dado da forma que ele
ocorre na “natureza”.
48. MongoDB
• Empresas que utilizam o MongoDB
o Dentre as empresas que já usam o MongoDB, destaque
para a globo.com (com o Cartola FC), SourceForge e a
FourSquare.
o Outros projetos com MongoDB na Globo.com são:
receitas.com, novo catálogo de vídeos da emissora, com
800 mil arquivos cadastrados, e o site de participações em
eventos e programas da Globo.
49. MongoDB
• Avaliação da equipe do Cartola FC
o Velocidade (2x mais rápido que o MySQL)
o Sem necessidade de um ORM (não tem abstração de tabela,
por exemplo)
o Acesso mais natural aos dados (não tem que escrever query)
o Sem schema / sem migrations (com exceções, mas em geral não
há problema de executar migration)
o Failover automático
o Possibilidade de escalar escritas com Sharding
• OBS.: Em alguns momentos específicos o cartola obteve
quase 30 mil sessões simultâneas.
50. MongoDB
• Agora pense em vídeo HD, geolocalização,
mensagens em tempo real, realidade aumentada,
imagens em tempo próximo ao real por satélite.
Pense em todos esses dados, e na velocidade que
as pessoas vão querer isso. Então, pense sobre qual
banco de dados que você deseja começar a usar
agora.
52. Referências
• Documentação. Disponível em: < http://www.mongodb.org/>.
• Creative Commons. Processamento de Dados Massivos/Projeto e implementação de aplicações Big
Data/Agregação eficiente de dados temporais. Disponível em:
http://pt.wikibooks.org/wiki/Processamento_de_Dados_Massivos/Projeto_e_implementação_de_aplica
ções_Big_Data/Agregação_eficiente_de_dados_temporais>.
• Ianni, Vinicius. Introdução aos bancos de dados NoSQL. Disponível em:
<http://www.devmedia.com.br/introducao-aos-bancos-de-dados-nosql/26044#ixzz2O7Sed5P3>.
• Ianni, Vinicius. Big Data: Algumas definições e, sim, serve também para o pequeno negócio! Disponível
em: <http://www.devmedia.com.br/space.asp?id=198225>.
• Lerner, Alberto. Introdução ao MongoDB – Direto da fonte! Disponível em:
<http://ensinar.wordpress.com/tag/mongodb/>.
• Lennon, Joe. Explore o MongoDB. Disponível em: <http://www.ibm.com/developerworks/br/library/os-
mongodb4/>.
• Nascimento, Jean3 Razões para usar MongoDB. Disponível em:
<http://imasters.com.br/artigo/18334/mongodb/3-razoes-para-usar-mongodb/>.
• Nascimento, Jean. Como utilizar selects com MongoDB. Disponível em:
<http://imasters.com.br/artigo/17308/mongodb/como-utilizar-selects-com-mongodb//>.