em Engenharia da Computação pela UEMA. Desenvolvedor Web no Núcleo de Tecnologias para a Educação da UEMA. Redes Sociais: ◦ Github: https://github.com/lucassouzavieira ◦ Twitter: https://twitter.com/lucassouzavs ◦ Linkedin: https://www.linkedin.com/in/lucassouzavieira/ ◦ Speaker Deck: https://speakerdeck.com/lucassouzavieira
a maior parte dos bancos que utilizam SQL • Implementação ◦ Tabelas com colunas fixas. ◦ Todas as linhas tem as mesmas colunas • O banco só armazena atributos previamente definidos/permitidos pelo schema
checar os nossos dados ◦ A nível de Schema ( Colunas e Tipos de dados ) ◦ Referências ( Chaves-estrangeiras, integridade referencial ) ◦ E outras podem ser definidas pelo usuário ( Constraints )
uso adequado do banco de dados relacional • A falta de normalização pode causar problemas com a integridade dos dados e pode também dificultar sua recuperação através de consultas SQL. • Desnormalização só é tolerada em favor de desempenho
de Programação. • Alternativa: campos BLOB • ALTER TABLE ◦ Queda de performance / Database lock. ◦ Reajuste de registros ◦ O código da aplicação precisa se manter “ciente” sobre o schema do banco
tarefa difícil: ◦ Transações e Joins são custosas para o banco. ◦ Falta de suporte nativo para escalabilidade ou particionamento. ◦ Muitas vezes o particionamento é implementado na própria aplicação.
dados, focados principalmente em: • Serem não relacionais • Distribuídos • Open Source • Escaláveis horizontalmente O que não são ? ( Ou não pretendem ser) • Substitutos absolutos para os bancos de dados relacionais
resposta à esses problemas dos bancos relacionais. Os bancos relacionais tem sido a principal tecnologia de banco de dados há mais de 30 anos. No entanto, enfrentam alguns problemas: • Dificuldade para escalar • Dificuldade para lidar com grandes volumes de dados • Incompatibilidade de Impedância
valor • Para o banco, o “value” não tem estrutura: Você pode armazenar qualquer coisa. • O valor só pode ser recuperado pela chave. Nem todos os bancos oferecem uma listagem das chaves para que você possa recuperá-las. ( Embora alguns bancos permitam índices secundários para recuperação dos dados ). • Alguns bancos dessa categoria trabalham com o conceito de banco em memória. • Exemplos: Riak, Redis, Memcached
coluna e timestamp • Colunas são agrupadas em Super Colunas. • Família de colunas: ◦ Colunas de uma mesma família são armazenadas no mesmo sistema de arquivos. • Exemplos: Apache Cassandra, HBase
operação que afeta um único registro é atômica. Em operações que afetam mais de um registro o banco pode não garantir a atomicidade, consistência e isolação.
a escrita mais recente ou retorna um erro. Cada requisição recebe uma resposta O sistema continua a operar apesar do número arbitrário de mensagens perdidas entre os nós da rede
pela disponibilidade e tolerância a particionamento. • Dados entram em conflito normalmente. • Sua aplicação pode ter que tratar em algum momento dados conflitantes.
não garante a consistência, então os dados devem ser modelados de maneira que uma entidade lógica deva ser salva como um único registro. Exemplo: Usuário, Produto • Necessário pensar em quais operações serão executadas com mais frequência no banco: Leitura, Escrita. • Essa abordagem permite escrever/ler a entidade atomicamente • Equivale a desnormalizar um banco relacional
duplicados no banco de dados. • Exemplo: agregar os dados de um ou mais autores no próprio registro de determinado livro. • Isto também facilita a consulta, já que ao recuperar o livro os dados do autor estão embutidos.
podem ser problemáticas, pois há cópias distribuídas pelo banco e todas elas precisam ser atualizadas. • As próprias cópias podem se tornar inconsistentes
documento para outros documentos. • O banco não garante a consistência da referência • Em geral usado para relações muitos-para-muitos entre os dados • Exemplo de Uso: Comentários em um artigo feitos por usuários de uma aplicação.
◦ Quando os dados incorporados muito raramente (ou nunca) sofrem atualizações. ◦ Cache ◦ Quando o tempo de vida da incorporação é curto • Em outros caso, deve-se considerar usar a linkagem
poliglota é a possibilidade de se aplicar diversos modelos de dados para a construção de uma aplicação. Pode-se buscar vantagens em cada modelo para a resolução de uma parte do problema e aplicá-la. • Exemplo: ◦ Aplicação de E-commerce: ▪ Sistema de Recomendação: Grafos (Neo4J) ▪ Sessões de usuário: Chave-valor (Riak) ▪ Produtos, Clientes, Vendas: Documentos (MongoDB) ▪ Data-warehouse: Relacional (PostgreSQL)
modelos de dados • Focam em ser no mínimo tão eficientes em desempenho quanto os bancos NoSQL especializados nos modelos que aborda. • Reduzem os custos de aprendizagem e manutenção. • Exemplos: ArangoDB, CosmosDB, CouchBase, CrateDB
em uma única instância e uma só linguagem de consulta (AQL) • Escrito em C++ • Extensível através de JavaScript ( Foxx framework, Services ) • Lançamento: 2011 • Atualmente com cerca de 1.4 milhões de downloads • Mais de 180 casos de uso do banco em produção Companhia: • ArangoDB GmbH - 2014 • Equipe: ~30 pessoas • Sede: Colonia, Alemanha
• Oferecem: ◦ Suporte profissional com preço reduzido ◦ Ajudam a desenvolver seu produto rapidamente ◦ Resposta rápida a problemas críticos • ArangoDB GmbH recebeu entre 2016 e 2017 mais de € 6 milhões em investimentos. • Informações: ◦ https://www.arangodb.com/startup-accelerator-program/
https://highlyscalable.wordpress.com/2012/03/01/nosql-data-modeling-techniques/ • https://martinfowler.com/nosql.html Referências Livro • NoSQL Essencial - Pramod J. Sadalage, Martin Fowler.