Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Introdução ao NoSQL multi-modelos com ArangoDB

Introdução ao NoSQL multi-modelos com ArangoDB

Palestra ministrada na II Semana de Tecnologia e Inovação da UNDB - São Luís

Lucas de Souza Vieira

March 22, 2018
Tweet

More Decks by Lucas de Souza Vieira

Other Decks in Programming

Transcript

  1. Olá ! Lucas Vieira Graduando em Engenharia da Computação pela

    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
  2. Características ▸ Fundamentos: modelo e álgebra relacional ▸ Implementação: ▹

    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
  3. Normalização user_id user_name user_group user_status 1 Freddie Mercury guest inactive

    2 Roger Taylor guest active 3 John Deacon admin inactive 4 Brian May guest active
  4. Normalização user_id user_name user_lastname user_group user_status 1 Freddie Mercury 1

    1 2 Roger Taylor 1 2 3 John Deacon 2 1 4 Brian May 1 2 group_id group_name 1 guest 2 admin status_id status_name 1 inactive 2 active
  5. Por quê normalizamos os dados no modelo relacional ? ▸

    Evitar duplicação de dados ▸ Diminuir o espaço de uso em disco ▸ Consistência e Integridade dos dados
  6. Por quê normalizamos os dados no modelo relacional ? ▸

    É 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
  7. Transações ▸ Bancos de dados relacionais normalmente permitem a execução

    de transações ▸ Objetivo: Manter a consistência e Integridade dos dados Lembra do clássico exemplo da transação bancária ?
  8. Consistência e Integridade ▸ Bancos relacionais oferecem muitas maneiras de

    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)
  9. Problemas dos bancos relacionais: dados dinâmicos ▸ Esquemas rígidos vs

    Linguagens de Programação ▸ Alternativa: campos BLOB ▸ ALTER TABLE: ▹ Queda de performance / Database lock ▹ Reajuste de registros
  10. Problemas dos bancos relacionais: código ▸ ORM’s: o código da

    aplicação precisa se manter “ciente” sobre o Schema do banco ▸ Incompatibilidade de Impedância.
  11. Problemas dos bancos relacionais: escalabilidade ▸ Transações e Joins são

    operações custosas para o banco. ▸ Falta de suporte nativo para escalabilidade ou particionamento (clusterização).
  12. Características gerais dos bancos NoSQL ▸ Uma nova geração de

    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
  13. Por quê ? Bancos relacionais tem sido a principal tecnologia

    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.
  14. Como ? Os bancos de dados NoSQL abrem mão de

    alguns recursos comumente encontrados em bancos relacionais em favor de disponibilidade e distributividade.
  15. Queries ▸ Variam muito de um banco para outro ▸

    Recursos comuns dos bancos relacionais não estão presentes ou funcionam de uma forma muito diferente nos bancos NoSQL.
  16. ▸ Armazena um mapeamento de uma chave para um 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 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
  17. ▸ Trabalham com documentos semi-estruturados: JSON, BSON, XML. ▸ Permitem

    consultas com base nos valores internos dos documentos. Exemplos: MongoDB, CouchDB, RethinkDB Documentos
  18. ▸ Trabalham com documentos semi-estruturados: JSON, BSON, XML. ▸ Permitem

    consultas com base nos valores internos dos documentos. Exemplos: Apache Cassandra, HBase, Big Table Família de Colunas
  19. ▸ Os dados são modelados como nós e arestas. Aspectos

    do relacionamento são salvos. Exemplos: Neo4J, InfiniteGraph Grafos
  20. ▸ Schema-less ▸ Trabalham bem com linguagens dinâmicas ▸ Mudança

    no Schema ? Você pode: ▹ Atualizar todos os dados anteriores ▹ Atualizar os dados eventualmente ▹ Nunca atualizar Modelagem
  21. ▸ Na maioria dos bancos NoSQL, operações que afetam um

    ú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 !
  22. Teorema CAP Consistência Disponibilidade Tolerância à partição Cada leitura recebe

    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
  23. ▸ Bancos NoSQL distribuídos prezam principalmente pela disponibilidade e tolerância

    à particionamento. ▸ Dados entram em conflito normalmente. ▸ Sua aplicação pode ter que tratar em algum momento dados conflitantes. Consistência Eventual
  24. ▸ Se o banco não garante a consistência, então os

    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
  25. Conceito Persistência poliglota é a possibilidade de aplicar diversos modelos

    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)
  26. Bancos de Dados Multi-modelos Trabalham com dois ou mais modelos

    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.
  27. ArangoDB ▸ Multi-modelos nativo (Chave-valor, documentos e grafos) ▸ Escrito

    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
  28. Principais recursos ▸ Documentos ▹ JOINS ▹ Transações ▸ Grafos

    ▹ Distribuídos ▹ Pattern Matching ▹ Transações ▸ Cluster ▹ Recuperação automática de falha ▹ Multi-master
  29. ArangoDB para Startups ▸ O ArangoDB também é uma startup

    ▸ 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/
  30. Alguns projetos interessantes no Github • Driver PHP para ArangoDB:

    ◦ https://github.com/lucassouzavieira/arangodb-php-driver • MongoDB: ◦ https://github.com/mongodb/mongo • ArangoDB: ◦ https://github.com/arangodb/arangodb • Redis: ◦ https://github.com/antirez/redis • Memcached: ◦ https://github.com/memcached/memcached
  31. Referências Livro: ▸ NoSQL Essencial - Pramod J. Sadalage, Martin

    Fowler. Links: • https://www.arangodb.com/2015/10/benchmark-postgresql- mongodb-arangodb/ • https://www.arangodb.com/documentation/ • https://docs.arangodb.com/3.4/AQL/index.html • http://nosql-database.org/ • https://highlyscalable.wordpress.com/2012/03/01/nosql-dat a-modeling-techniques/ • https://martinfowler.com/nosql.html