Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos - Adamo Tonete

44 visualizaciones

Publicado el

Neste bate papo vamos discutir quais as vantagens de cada banco de dados no mundo real. Quando devemos utilizar o NoSQL ao invés do SQL ou vice-versa comparando os principais bancos de dados open source de cada segmento, o MongoDB e o MySQL

Publicado en: Tecnología
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos - Adamo Tonete

  1. 1. SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos
  2. 2. Agenda ● Definição de MongoDB e MySQL ● Conceitos de bancos relacionais e não relacionais ● Principais diferenças entre o MySQL e o MongoDB ● Similaridades ● Query Language; ● Comparação de performance ● Segurança; ● Melhores use cases ● Q&A
  3. 3. Sobre mim ● Adamo Tonete ○ MongoDB Support Engineer @Percona DBA Easy Taxi /adamotonete
  4. 4. MongoDB e MySQL
  5. 5. O que é MongoDB ● Document Oriented Database ● NoSQL ● Open source ● Banco de Dados NoSQL mais popular atualmente ● Alta performance
  6. 6. ● Relational Database Management System ● Segundo banco de dados mais popular de acordo com DBEngines ● Feito para ser utilizado com diferentes storage engines ● Suporta diferentes topologias de replicação O que é MySQL
  7. 7. Conceitos de NoSQL e Relacional
  8. 8. Conceito de Banco de Dados Um gerenciador de banco de dados é organizado da seguinte maneira ● Dados ● Schema ● Tabelas ● Query Language ● Relatórios ● Views ● Other elements.
  9. 9. Conceito de Banco de Dados Relacionais ● Foram escritos na época de 1970 ● Linhas e atributos definem relações entre tabelas ● Dados Normalizados ● SQL Language ● Procedures ● Triggers ● Foreign keys ● Transações - ACID
  10. 10. Conceitos de Bancos de Dados não relacionais ● Primeiros NoSQL surgiram no começo dos anos 2000s; ● Conceito de não relacional, sem tabelas ou relações entre elas; ● Não utiliza padrão T-SQL ● Criado para encaixar-se melhor com linguagens mais novas ● De fácil desenvolvimento
  11. 11. Principais diferenças entre MongoDB e MySQL
  12. 12. Diferenças entre MongoDB e MySQL ● Algumas das features que vamos comparar ○ Normalização ○ Transações ○ Linguagem de consulta ○ Forma de salvar dados no disco (storage engine) ○ Diferenças de indexes ○ Modo de escalar e distribuir o banco de dados (HA)
  13. 13. MongoDB e MySQL são diferentes? ● NoSQL e SQL não são inimigos ○ Eles são complementos um dos outros ● Enquanto o MongoDB é um banco de dados relativamente novo O MySQL já é um banco de dados relacional consolidado no mercado. ● Para alguns use-cases MongoDB como principal Banco de dados não é a melhor coisa a se fazer. ● No entanto, o MongoDB pode oferecer uma facilidade muito grande para startups e metodologias ágeis.
  14. 14. MongoDB e MySQL são diferentes? ● Comparando distribuição de dados ○ MongoDB é projetado para manipular altas cargas de dados ○ MySQL pode ser shardeado utilizando alguns add-ons ○ MySQL foi a princípio desenvolvido para funcionar numa máquina apenas
  15. 15. Normalização ● MongoDB sugere boas práticas para salvar seus dados mas não o força a fazer isso. ● MySQL por outro lado força um schema pré-definido onde na maioria dos bancos é utilizado a 3 forma normal para evitar duplicação de dados. Normalização
  16. 16. Normalização
  17. 17. { "_id" : ObjectId("507f1f77bcf86cd799439011"), "studentID" : 100, "firstName" : "Jonathan", "middleName" : "Eli", "lastName" : "Tobin", "classes" : [ { "courseID" : "PHY101", "grade" : "B", "courseName" : "Physics 101", "credits" : 3 }, { "courseID" : "BUS101", "grade" : "B+", "courseName" : "Business 101", "credits" : 3 } ] Normalização
  18. 18. ACID ● O que é ACID ○ Atomicidade ○ Consistência ○ Isolamento ○ Durabilidade
  19. 19. ● Como o ACID é representado no MySQL. ○ Atomicidade ■ Se autocommit=ON (default), todo comando é salvo imediatamente ■ Se não, COMMIT or ROLLBACK deve ser usado explicitamente ○ Consistencia ■ Utiliza doublewrite e crash recovery ○ Isolation ■ Diferente níveis de isolamento, RC, RU ○ Durabilidade ■ Existem várias configurações, sendo as principais innodb_flush_log_at_trx_commit and sync_binlog ACID
  20. 20. ● Como ACID é representada no MongoDB? ○ Atomicidade ■ Documento é atômico ○ Consistência ■ primário = garantida ■ secondários = depende do write Concern ○ Isolamento ■ Não é 100% podendo forçar com $snapshot ○ Durabilidade ■ configurável w:majority and/or j:true ACID
  21. 21. CAP theorem - MongoDB ● Teorema CAP foi proposto por Eric Allen em 2000 ● Um sistema distribuído não pode ter 3 garantias ao mesmo tempo. Uma deve ser sacrificado
  22. 22. CAP theorem - MongoDB A PC ● Consistência ● Disponibilidade ● Tolerancia a Particionamento Todos receberão a mesma resposta independente do nó.
  23. 23. ● Consistência ● Disponibilidade ● Tolerancia a Particionamento O sistema sempre responde os requests CAP theorem - MongoDB A PC
  24. 24. CAP theorem - MongoDB A PC ● Consistência ● Disponibilidade ● Tolerância a Particionamento Sistema pode se recuperar de um erro de rede ou máquina
  25. 25. CAP theorem - MongoDB A PC Relacional MySQL Postgres Cassandra Riaki MongoDB Redis
  26. 26. ● MySql contem tabelas pré definidas. ● Cada coluna pode ter um e somente um tipo de dados pre definido. ● Limites de tamanos de linhas/colunas ○ Colunas máximas numa tabela: 4096 ● SQL é uma linguagem declarativa ● Diversos conectores ○ https://www.mysql.com/products/connector/ Salvando e consultando dados
  27. 27. Salvando e consultando dados ● Diferentemente do MySQL o MongoDB não tem um schema pre-definido. ● Os documentos podem ter diferentes valores para as mesmas colunas {x : 1, y : ['test']} e {x : 'percona', y : ISODate('2018-01-01')} São validos.
  28. 28. ● MongoDB não utiliza-se de normalização, ao contrario de boas praticas do MySQL ● Todos os documentos devem conter o máximo de informação possível pois não há joins. ● Tamanho máximo de um documento é de 16MB Salvando e consultando dados
  29. 29. ● Replica-sets ● Cluster e shards ● Master Slave Comparando Topologias
  30. 30. ● O que é escalabilidade? ○ "Habilidade de adicionar mais recursos" ● Scale up (a.k.a.: verticalmente) ○ Melhorar hardware (máquina maior) ● Scale out (a.k.a.: horizontalmente) ○ Add mais instâncias Escalabilidade
  31. 31. ● MongoDB: ○ Utiliza sharding para escalar escritas ○ Utiliza secundários para escalar leituras ● MySQL: ○ Pode utilizar particionamento e "sharding" para escalar escritas (mas não tão fácil quanto o mongodb) ○ Utiliza escravos (secundários) para escalar leituras Scalability
  32. 32. Similaridades entre MongoDB e MySQL
  33. 33. ● Mas esses bancos de dados não são completamente diferentes ● Eles compartilham ○ Segurança ○ Indexes ○ Multi usuário/multi threaded ○ Concorrência Similaridades
  34. 34. ● Database terms and concept mapping Similaridades MySQL MongoDB Database Database Table Collection Row Document Column Key
  35. 35. Security: ● Diferentes níveis de segurança ● Roles Diferentes storage engines ● Ambos MongoDB e MySQL compartilham a ideia de storage plugável ● Os storages para MongoDB são: WiredTiger, MMAPv1, InMemory, RocksDB ● MySQL são: InnoDB, MyISAM, MyRocks, Memory, and many more Similaridades
  36. 36. Query Language
  37. 37. ● Vamos comparar brevemente os padrões de linguagem entre o MongoDB e o SQL, ○ Criar banco de dados ○ Criar tabela ○ Fazer um insert ○ Fazer um select ○ Como executar update ou delete ○ Joins (SQL) / $lookup mongodb Query Language
  38. 38. Query Language - MySQL
  39. 39. Query Language - MySQL
  40. 40. Query Language - MongoDB
  41. 41. ● NoSQL ● CQL ● Graph ● Javascript "NoSQL" Query Language
  42. 42. Segurança
  43. 43. ● Ambos os bancos de dados contém controle de usuário e de roles e bibliotecas para integração com LDAP, certificados. ● Percona Server for MongoDB e Percona Server for MySQL oferecem melhorias como auditoria em sua versão free. Segurança
  44. 44. ● MongoDB contém controle por roles desde a versão 2.4 ● Atualmente não é possível limitar acesso a campos de forma fácil. ● Plugin de auditoria (enterprise) Segurança - MongoDB
  45. 45. ● MySQL contém roles a partir da versão 8.0 ● Pode-se setar permissões a nível de banco de dados e colunas ● Podemos controlar actions em tabelas por meio de grants de: ○ CREATE ○ SELECT ○ INSERT ○ UPDATE ○ ... ● MySQL enterprise contém ○ LDAP authentication ○ Encryption ○ Audit Segurança - MySQL
  46. 46. Comparando Performance
  47. 47. Não existe como comparar a performance de ambos diretamente. Cada banco de dados tem sua particularidade Documentos são mais fáceis de trafegar, não existe o custo de um join. Lookups demoram uma eternidade em MongoDB. MySQL por outro lado faz joins com maestria e anos de experiência. Estamos comparando prego e parafuso aqui Performance
  48. 48. Conceitos genéricos para uma boa performance. ● Manter índices corretamente; ● Particionar ou excluir dados antigos para manter o banco de dados pequeno; ● Leia somente o necessário; ● Utilize discos rápidos quando nem todo o banco de dados cabe na RAM; ● Mais núcleos favorece queries em paralelo Performance
  49. 49. Qual é melhor?
  50. 50. ● Não existe uma resposta correta, apesar do MongoDB ser mais difundido em startups e empresas que utilizam metodologia ágeis MySQL - E relacionais - são muito fortes quando transações são requeridas https://www.percona.com/about-percona/customers https://www.percona.com/about-percona/case-studies Então qual é melhor?
  51. 51. Q&A
  52. 52. Q&A

×