NoSQLOrientado à documentos
Apresentação• NoSQL• Problemas que levaram a utilização do NoSQL• Quando utilizar NoSQL?• Tipos• Orientação à documentos• MapReduce• JSON• CouchDB• MongoDB
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
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
NoSQL• Problemas que motivaram a utilização do
NoSQL
• BigDatao Volume o Variedadeo Velocidade dos Dados
• Modelo relacional perde desempenho quando utiliza BigData
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.
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.
NoSQL• Quando utilizar NoSQL?
o Escalabilidadeo Flexibilidadeo Manipulação de quantidade massiva de dadoso Bom desempenhoo Facilidade para consultas
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.
NoSQL
Orientação à documentos
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.
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
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).
Orientação à documentos
• Formato JSON
Orientação à documentos
• Vantagens
o Ganha Flexibilidade, disponibilidade, linguagem de consulta simples e performance.
• Desvantagem
o Perde em consistência.
Orientação à documentos
• Ferramentas mais utilizadas
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).
CouchDB• Linha de comando
o RESTful API
• Interface do Futon
o Cria documentos no formato JSON
CouchDB• RESTful API
o Leitura do banco de dados
o Escreve: GET http://localhost:5984/
o Retorna: {"couchdb":"Welcome","version":"1.0.1"}
CouchDB• RESTful API
o Criando ou atualizando o banco de dados
o Escreve: PUT http://localhost:5984/database
o Retorna: {"ok":true}
CouchDB• RESTful API
o Deletando o banco de dados
o Escreve: DELETE http://localhost:5984/database
o Retorna: {"ok":true}
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"}
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":"Gog\u00f3"}
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"}
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"}
CouchDB• MapReduce
o function(doc) { if (doc.city == "Fortaleza")emit(doc.title,doc.month+"/"+doc.year);
}
CouchDB• Map
CouchDB• View
CouchDB• View
CouchDB• Reduce
o function(keys, values) {return values;}
CouchDB• Reduce
CouchDB• View
MongoDB• Apresentação da ferramenta
o Código abertoo Alta performance (desempenho)o Sem esquemaso Orientado à documentoso Escrito em C++o Multiplataformao É formado por um conjunto de Aplicativos JSON
MongoDB• Criação
o Início 2007
o 1ª versão em 2009
o Versão atual: MongoDB 2.4 Released
MongoDB• Funcionamento
o JSON – estilo de documento com esquemas dinâmicos para oferecer simplicidade e poder.
o Suporte de índice completoo Auto-Sharding - escala horizontalmente sem
comprometer a funcionalidade.o Consultas Ricas, baseada em documentoso MapReduce - Agregação flexível e processamento de
dados.o GridFS - Armazenar arquivos de qualquer tamanho sem
complicação.
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.
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”.
MongoDB• Comparando expressões
o Create
MongoDB• Comparando expressões
o Delete
MongoDB• Comparando expressões
o Update
MongoDB• Comparando expressões
o Insert
MongoDB• Comparando expressões
o Select
MongoDB• Comparando expressões
o Select
MongoDB• Comparando expressões
o Select
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.
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áticoo Possibilidade de escalar escritas com Sharding
• OBS.: Em alguns momentos específicos o cartola obteve quase 30 mil sessões simultâneas.
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.
Duvidas?
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//>.
Top Related