Esta palestra foi apresentada em 31/08/2016 no evento 7Masters sobre MongoDB. Ela apresenta uma comparação de escalabilidade sobre o ponto de vista de particionamento de bancos SQL e NoSQL
2. LANÇAMENTO: Livro de MongoDB
Livro digial (EPUB) e impresso
129 páginas, 9 capítulos
Para quem não conhece NADA de MongoDB
~ R$ 15,00 (digital) e R$ 46,03 (impresso)
Clube de autores:
http://migre.me/uMvkM
Amazon:
http://amzn.to/2bYKP5E
Ajudem a divulgar nas redes sociais!
3. Escalabilidade e particionamento
Comparação de escalabilidade: foco no
particionamento
Particionamento:
Não colocar todos os ovos em uma única cesta! (evitar ponto de falha)
Ganhar desempenho com técnica dividir e conquistar (design de algoritmos)
Assunto complexo que precisa de muita
discussão. Referências:
4. Particionamento e distribuição
Particionamento horizontal x vertical
Bancos SQL possuem diversos recursos: regras de particionamento
(HASH, lista, intervalo), operações de partição, backup/restore,
associação com tablespaces, filegroups e arquivos de dados
Bancos NoSQL associam particionamento com distribuição de dados!
5. Particionamento com SQL
SQL Server:
Partition function, partition schema
Operações de partição (Slipt, Merge, etc)
Cluster, replicação e alta disponibilidade por objeto/banco
Oracle:
Cláusula PARTITION BY em CREATE/ALTER TABLE
Lista, Hash e intervalo
Subpartições
Cluster, replicação e alta disponibilidade por objeto e banco
MySQL:
Depende do engine utilizado
Lista, Hash e intervalo
Opção de indicar pasta do S.O. para guardar partições
Cláusula PARTITION() do SELECT
Cluster, replicação e alta disponibilidade por objeto
PostgreSQL:
Implementação ad hoc com triggers, views, tabelas e constraints
Cluster, replicação e alta disponibilidade por objeto
6. Particionamento com NoSQL
Bancos NoSQL implementam particionamento junto com distribuição de dados para
escalabilidade e performance (tipicamente na núvem)
Em geral é preciso implementar separadamente replicação por banco/instância para
garantir tolerância a falhas
MongoDB:
Sharding (shard key e shard index)
Distribuição automática de documentos entre nós
Servidores mongod, mongos e servidor de configuração
Complementar com replicação para tolerância a falhas
Cassandra:
Termo cluster é utilizado para particionamento e distribuição
Particionamento aleatório (round robin) e ordenado
Faz um hash por linha (algoritmo MD5) e distribui entre nós
É preciso complementar Cassandra com replicação para tolerância a falhas
7. Comparação de particionamento
Banco de dados
Tipo de
particionamento
Flexibilidade
Dificuldade de
implementação
Ambiente
distribuído
SQL Server 2016 Intervalo Baixa Média Não
Oracle 12c Intervalo, Lista, HASH Média Alta Não
MySQL 5.7
Intervalo, Lista, HASH, Hash
linear
Média Alta Não
PostgreSQL 9.5 Todos Alta Alta Não
MongoDB 3.0 HASH Baixa Média Sim
Cassandra 2.0.7 Intervalo e HASH Média Baixa Sim
8. Conclusão
Particionamento é importante para escalabilidade
Bancos SQL possuem particionamento separado de alta
disponibilidade, distribuição de dados e recursos para
performance
Bancos NoSQL associam particionamento com distribuição de
dados e precisão de replicação para alta disponibilidade
Implementação requer mudança em objetos (SQL) e
configuração de servidores (NoSQL)
Dificuldade varia de acordo com requisitos e implementação
do banco
É possível implementar alta disponibilidade, balanceamento
de carga (performance) e tolerância a falhas em bancos SQL
e NoSQL