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
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos - Adamo Tonete
1. SQL e NoSQL trabalhando juntos: uma comparação para obter o
melhor de ambos
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. Sobre mim
● Adamo Tonete
○ MongoDB Support Engineer @Percona
DBA Easy Taxi
/adamotonete
5. O que é MongoDB
● Document Oriented Database
● NoSQL
● Open source
● Banco de Dados NoSQL mais popular atualmente
● Alta performance
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
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. 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. 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
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. 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. 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. 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
18. ACID
● O que é ACID
○ Atomicidade
○ Consistência
○ Isolamento
○ Durabilidade
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. ● 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. 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. CAP theorem - MongoDB
A
PC
● Consistência
● Disponibilidade
● Tolerancia a Particionamento
Todos receberão a mesma resposta
independente do nó.
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. CAP theorem - MongoDB
A
PC
Relacional
MySQL
Postgres
Cassandra
Riaki
MongoDB
Redis
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. 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. ● 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
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. ● 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
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. ● Database terms and concept mapping
Similaridades
MySQL MongoDB
Database Database
Table Collection
Row Document
Column Key
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
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
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. ● 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. ● 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
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. 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
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?
AG
RDBMS -> can be thought of in terms of "strongly typed" vs "loosely typed" in Mongo
all data is represented in terms of tuples, grouped into relations
popularity doesn't mean it's better or worse, but it gives a good idea on adoption (maturity, "battle" tested, etc) and potentially more sources of information from which to learn from
SEs give flexibility, but also add more complexity
there are many options to choose from, so it can be
AG
Atomicidade
Consistencia
Isolamento
Durabilidade
AT
(we are going to discuss CAP it later)
Document
Key Value
Time series
Graphs database
Strict schema
*** Distribiut
AT
AT
AT/AG
Explain that there are technologies on MySQL that can support writes in many nodes, but they have their disadvantages:
multimaster replication and PXC
AG
AG
Lemme now shoiou.
What a document looks like in mongodb.
AT
transactions should function as a single, indivisible unit of workthe database should always move from one consistent state to the nextthe results of a transaction are (usually) invisible to other transactions until the transaction is finishedonce committed, a transaction's changes are permanent
AGUSTINwe can use START TRANSACTION or BEGIN if autocommit=ON and we want multi-statement transactions
interesting to mention that the manual talks about "losing up to one second worth of transactions"... but how many transactions can that be?
AGUSTIN
3 minutes - Adamo
CAP theorem was proposed by Eric Allen in 2000
2 out of 3 guarantess
One must be sacrificed
Availability replication of datas acrross machines
Consistences
Avaiability Partition Tolerance = Cassandra
Consistence Partition Tolerance = MongoDB
Consistence Availability = Normal Databases
Ca doesn't have resilience
https://www.youtube.com/watch?v=k1dtA14EYrk
3 minutes - Adamo
CAP theorem was proposed by Eric Allen in 2000
2 out of 3 guarantess
One must be sacrificed
Availability replication of datas acrross machines
Consistences
Avaiability Partition Tolerance = Cassandra
Consistence Partition Tolerance = MongoDB
Consistence Availability = Normal Databases
Ca doesn't have resilience
https://www.youtube.com/watch?v=k1dtA14EYrk
3 minutes - Adamo
CAP theorem was proposed by Eric Allen in 2000
2 out of 3 guarantess
One must be sacrificed
Availability replication of datas acrross machines
Consistences
Avaiability Partition Tolerance = Cassandra
Consistence Partition Tolerance = MongoDB
Consistence Availability = Normal Databases
Ca doesn't have resilience
https://www.youtube.com/watch?v=k1dtA14EYrk
3 minutes - Adamo
CAP theorem was proposed by Eric Allen in 2000
2 out of 3 guarantess
One must be sacrificed
Availability replication of datas acrross machines
Consistences
Avaiability Partition Tolerance = Cassandra
Consistence Partition Tolerance = MongoDB
Consistence Availability = Normal Databases
Ca doesn't have resilience
https://www.youtube.com/watch?v=k1dtA14EYrk
3 minutes - Adamo
CAP theorem was proposed by Eric Allen in 2000
2 out of 3 guarantess
One must be sacrificed
Availability replication of datas acrross machines
Consistences
Avaiability Partition Tolerance = Cassandra
Consistence Partition Tolerance = MongoDB
Consistence Availability = Normal Databases
Ca doesn't have resilience
https://www.youtube.com/watch?v=k1dtA14EYrk
Agustin
InnoDB columns -> 1,000
InnoDB row length -> "slightly less" than half a page (by default a page is 16Kb)
talk about query optimizer a bit
AT
30 seconds to 1 minute
Talk about query optimizer
How the indexes behaves when there are different data types
AT
X
For most of the cases mongodb will prefer scale out, which is not the same for mysql
X
X
Machine costs
If we want to scale MongoDB, we can simple add more machines
For MySQL this is not always true
Compare mongodb and MySQL ways to scale out and UP
AT
Several other databases concepts/tools like backups, restore, export import
AT
AG/AT
User roles only on MySQL 8.0+
AG
30 seconds to 1 minute
AG
AG
AG
AT
Standard for nosql databases
AT
AT
AT
AG
X
X
MYSQL vs MongoDB - AG/AT
Come with examples here like
A bank will never use mongodb as the main financial database
Mention that our customers use both
Some for web and some for financial stuff like opensky for example