Universidade Estadual do Maranhão. Participante ativo das comunidades de desenvolvimento locais. Comunicador científico e atualmente desenvolvedor no Núcleo de Tecnologias para Educação da Uema. Github: @lucassouzavieira Twitter: @lucassouzavs Speaker Deck: @lucassouzavieira
Tabelas com colunas fixas ▹ Todas as linhas contém as mesmas colunas ▸ O banco só armazena atributos previamente definidos/permitidos pelo Schema. ▸ Exemplos: MySQL, PostgreSQL, Oracle Database, SQL Server
É importante normalizar os dados para fazer uso adequado do banco de dados relacional ▸ A falta de normalização pode causar problemas com a integridade dos dados e também dificultar sua recuperação através de consultas SQL. ▸ Desnormalização só é tolerada em favor de desempenho
checar nossos dados ▹ A nível de Schema (Colunas e Tipos de dados) ▹ Referências (Chaves-estrangeiras) ▹ Constraints definidas pelo usuário (Unique, Not Null, Auto Increment, Default Value, entre outras)
banco de dados com foco em: ▹ Serem não-relacionais ▹ Distribuídos ▹ Open-source ▹ Escaláveis horizontalmente ▸ Não pretendem ser substitutos absolutos para bancos de dados relacionais
de banco de dados há mais de 30 anos, mas enfrentam alguns problemas: ◦ Dificuldade para escalar ◦ Dificuldade para lidar com grandes volumes de dados ◦ Incompatibilidade de impedância Os bancos NoSQL surgiram em resposta à esses problemas dos bancos relacionais.
▸ 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 de chaves para que você possa recuperá-las. ▸ Alguns bancos dessa categoria trabalham com o conceito de banco em memória. Exemplos: Riak, Redis, Memcached Chave-valor
único registro são atômicas. ▸ Exemplo com dois clientes acessando o mesmo dado em paralelo. NoSQL & ACID READ userA.friends [ userB, userC] READ userB.profile => Ok ! DELETE userB.* => Ok !
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
à particionamento. ▸ Dados entram em conflito normalmente. ▸ Sua aplicação pode ter que tratar em algum momento dados conflitantes. Consistência Eventual
dados devem ser modelados de maneira que uma entidade lógica deva ser vista como um único registro. ▸ Necessário pensar quais operações serão executadas com mais frequência: Leitura/Escrita. ▸ Essa abordagem permite ler/escrever atômicamente as entidades. ▸ Equivale a desnormalizar um banco relacional. Consequências para a Modelagem
de dados para a construção de uma aplicação, aproveitando as vantagens de cada modelo para resolver parte do problema. Exemplo: Aplicação de E-commerce: ▸ Sistema de Recomendação: Grafos (Neo4J) ▸ Sessões de Usuário: Chave-calor (Riak). ▸ Produtos, Clientes, Vendas: Documentos (MongoDB) ▸ Data-warehouse: Relacional (PostgreSQL)
de dados e focam em ser no mínimo tão eficientes em desempenho quanto bancos NoSQL especializados. Reduzem os custos de manutenção e curva de aprendizado.
em C++ ▸ Lançado em 2011 ▸ Extensível através de JavaScript (Foxx Framework, Services) ▸ Cerca de 1.4 milhões de downloads ▸ Mais de 180 casos de uso 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/