SQL e NoSQL trabalhando juntos: uma comparação para obter o
melhor de ambos
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
Sobre mim
● Adamo Tonete
○ MongoDB Support Engineer @Percona
DBA Easy Taxi
/adamotonete
MongoDB e MySQL
O que é MongoDB
● Document Oriented Database
● NoSQL
● Open source
● Banco de Dados NoSQL mais popular atualmente
● Alta performance
● 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
Conceitos de NoSQL e Relacional
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.
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
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
Principais diferenças entre MongoDB e MySQL
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)
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.
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
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
Normalização
{
"_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
ACID
● O que é ACID
○ Atomicidade
○ Consistência
○ Isolamento
○ Durabilidade
● 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
● 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
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
CAP theorem - MongoDB
A
PC
● Consistência
● Disponibilidade
● Tolerancia a Particionamento
Todos receberão a mesma resposta
independente do nó.
● Consistência
● Disponibilidade
● Tolerancia a Particionamento
O sistema sempre responde os requests
CAP theorem - MongoDB
A
PC
CAP theorem - MongoDB
A
PC
● Consistência
● Disponibilidade
● Tolerância a Particionamento
Sistema pode se recuperar de um erro
de rede ou máquina
CAP theorem - MongoDB
A
PC
Relacional
MySQL
Postgres
Cassandra
Riaki
MongoDB
Redis
● 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
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.
● 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
● Replica-sets
● Cluster e shards
● Master Slave
Comparando Topologias
● 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
● 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
Similaridades entre MongoDB e MySQL
● Mas esses bancos de dados não são completamente diferentes
● Eles compartilham
○ Segurança
○ Indexes
○ Multi usuário/multi threaded
○ Concorrência
Similaridades
● Database terms and concept mapping
Similaridades
MySQL MongoDB
Database Database
Table Collection
Row Document
Column Key
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
Query Language
● 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
Query Language - MySQL
Query Language - MySQL
Query Language - MongoDB
● NoSQL
● CQL
● Graph
● Javascript
"NoSQL" Query Language
Segurança
● 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
● 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
● 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
Comparando Performance
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
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
Qual é melhor?
● 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?
Q&A
Q&A

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

  • 1.
    SQL e NoSQLtrabalhando juntos: uma comparação para obter o melhor de ambos
  • 2.
    Agenda ● Definição deMongoDB 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 ● AdamoTonete ○ MongoDB Support Engineer @Percona DBA Easy Taxi /adamotonete
  • 4.
  • 5.
    O que éMongoDB ● Document Oriented Database ● NoSQL ● Open source ● Banco de Dados NoSQL mais popular atualmente ● Alta performance
  • 6.
    ● Relational DatabaseManagement 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.
    Conceitos de NoSQLe Relacional
  • 8.
    Conceito de Bancode Dados Um gerenciador de banco de dados é organizado da seguinte maneira ● Dados ● Schema ● Tabelas ● Query Language ● Relatórios ● Views ● Other elements.
  • 9.
    Conceito de Bancode 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 Bancosde 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.
  • 12.
    Diferenças entre MongoDBe 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 MySQLsã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 MySQLsã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 sugereboas 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.
  • 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.
    ACID ● O queé ACID ○ Atomicidade ○ Consistência ○ Isolamento ○ Durabilidade
  • 19.
    ● Como oACID é 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ó.
  • 23.
    ● Consistência ● Disponibilidade ●Tolerancia a Particionamento O sistema sempre responde os requests CAP theorem - MongoDB A PC
  • 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 contemtabelas 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 consultandodados ● 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ãoutiliza-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.
    ● Replica-sets ● Clustere shards ● Master Slave Comparando Topologias
  • 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: ○ Utilizasharding 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.
  • 33.
    ● Mas essesbancos de dados não são completamente diferentes ● Eles compartilham ○ Segurança ○ Indexes ○ Multi usuário/multi threaded ○ Concorrência Similaridades
  • 34.
    ● Database termsand concept mapping Similaridades MySQL MongoDB Database Database Table Collection Row Document Column Key
  • 35.
    Security: ● Diferentes níveisde 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.
  • 37.
    ● Vamos compararbrevemente 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.
  • 39.
  • 40.
  • 41.
    ● NoSQL ● CQL ●Graph ● Javascript "NoSQL" Query Language
  • 42.
  • 43.
    ● Ambos osbancos 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émcontrole 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émroles 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.
  • 47.
    Não existe comocomparar 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 parauma 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.
  • 50.
    ● Não existeuma 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.
  • 52.

Notas do Editor

  • #2 AT
  • #3 AG give brief summary on each point
  • #4 AT/AG
  • #6 AT
  • #7 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
  • #9 AG
  • #10 Atomicidade Consistencia Isolamento Durabilidade
  • #11 AT (we are going to discuss CAP it later) Document Key Value Time series Graphs database Strict schema
  • #13 *** Distribiut AT
  • #14 AT
  • #15 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
  • #16 AG
  • #17 AG
  • #18 Lemme now shoiou. What a document looks like in mongodb. AT
  • #19 transactions should function as a single, indivisible unit of work the database should always move from one consistent state to the next the results of a transaction are (usually) invisible to other transactions until the transaction is finished once committed, a transaction's changes are permanent
  • #20 AGUSTIN we 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?
  • #21 AGUSTIN
  • #22 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
  • #23 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
  • #24 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
  • #25 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
  • #26 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
  • #27 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
  • #28 AT 30 seconds to 1 minute Talk about query optimizer How the indexes behaves when there are different data types
  • #29 AT
  • #30 X
  • #31  For most of the cases mongodb will prefer scale out, which is not the same for mysql X
  • #32 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
  • #34 AT Several other databases concepts/tools like backups, restore, export import
  • #35 AT
  • #36 AG/AT User roles only on MySQL 8.0+
  • #38 AG 30 seconds to 1 minute
  • #39 AG
  • #40 AG
  • #41 AG
  • #42 AT
  • #43 Standard for nosql databases AT
  • #45 AT
  • #46 AT
  • #47 AG
  • #49 X
  • #50 X
  • #52 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
  • #54 5 minutes