desenvolvendo serviços escaláveis e de alta performance com mysql
TRANSCRIPT
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 1
Airton Lastori [email protected]
mar-2015
Desenvolvendo Serviços Escaláveis e de Alta Performance com MySQL
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 2
2
Apresentador
Airton Lastori
Consultor MySQL, Oracle
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 3
MySQL Central @ Oracle Open World 2014 Alguns cases apresentados...
[slides] oracle.com/openworld/mysql
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 4
Agenda
Alta Performance com MySQL
Arquitetura e Topologias
Métodos de Acesso e API’s
Instalação e Exemplos
Aprenda Mais
Perguntas?
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 5
Agenda
Alta Performance com MySQL
Arquitetura e Topologias
Métodos de Acesso e API’s
Instalação e Exemplos
Aprenda Mais
Perguntas?
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 6
Alta Performance Por que há demanda?
Suporte à “Big Data” e IoT
Velocidade de escrita
Escalabilidade horizontal
Disponível 24x7
Facilidade de uso
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 7 Fonte: http://db-engines.com/en/ranking_trend (dezembro/14)
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 9
Resposta tecnológica: NoSQL
Fonte: 451 Group, 2012
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 10
Resposta tecnológica: NoSQL
Usos comuns: usado como cache para
armazenamento de dados requisitados
frequentemente, especialmente em
aplicações web.
Pontos Fortes: escalabilidade,
armazenamento e busca de dados muito
rápidos; dados não estruturados e
parcialmente estruturados.
Pontos Fracos: usualmente todos os dados
tem que caber em memória rápida; falta de
recursos para Queries complexas.
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 11
Uso Tradicional do Memcached 2 níveis de hashing
Memcache
httpd memcached
memcached
memcached chave memcache
PHP/Perl/Java
friends:12389
Usa chave
para
encontrar o
dado (valor)
VALUE friends:12389 0 31\r\n 101, 11009, 11150, 55881, 77798 \r\n
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 12
Não encontra valor no cache: sincronização 1/2 aplicação é responsável por buscar no Banco de Dados
Memcache
httpd memcached
memcached
memcached
PHP/Perl/Java Não há valor
para chave
informada
MySQL
Slave
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 13
Não encontra valor no cache: sincronização 2/2 aplicação é responsável por sincronizar
Memcache
httpd memcached
memcached
memcached
PHP/Perl/Java
Armazenar
valor com
chave/valor
informados
Processo similar ocorre quando há escrita
no MySQL Master: aplicação precisa
sincronizar com cache.
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 14
Spoiler!
MySQL já tem integração nativa com Memcached
Não perca tempo com a lógica de sincronização!
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 15
Resposta tecnológica: NoSQL
Usos comuns: aplicações web ou
outras que requerem melhor
performance e escalabilidade sem que
seja necessários definir esquemas
relacionais.
Pontos Fortes: armazenamento
persistente com recursos de
escalabilidade tais como sharding
nativo; melhor suporte a Queries que
apenas chave-valor.
Pontos Fracos: falta de recursos para
Queries complexas.
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 16
Resposta tecnológica: NoSQL
Usos comuns: aplicações
científicas ou de tradução direta do
paradigma orientado a objetos.
Pontos Fortes: performance e
mapeamento natural de objetos.
Pontos Fracos: falta de recursos
para realizar Queries complexas.
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 17
Resposta tecnológica: NoSQL
Usos comuns: log em tempo-real para
aplicações web ou financeiras.
Pontos Fortes: throughput muito alto
para Big Data (de Terabytes a
Petabytes); suporte excelente a
particionamento e acesso aleatório de
leitura-escrita.
Pontos Fracos: APIs de baixo-nível,
falta de recursos para realizar Queries
complexas, alta latência na resposta de
Queries.
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 18
Requisitos NoSQL O que a solução deve cumprir?
Alta Performance alto throughput leitura/escrita
Escalabilidade massiva auto-sharding
Facilidade de uso acesso simples (APIs)
manutenção simples
modelo de dados flexível, fácil de
evoluir
Alta Disponibilidade tolerância a falhas
Performance
Escalabilidade
Facilidade de Uso
Disponibilidade ~24x7
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 19
Scale Out
• Adicionar mais servidores para
aumentar performance
• MySQL adota esta abordagem
em sistemas altamente
escaláveis em hardware
commodity (Intel / AMD)
Scale Up
• Trocar por hardware mais
poderoso, adicionar memória,
CPU
• Outras soluções normalmente
usam hardware proprietário
(SMP)
Escalabilidade: horizontal vs vertical
É possível combinar as duas abordagens
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 20
2008
até 4 CPU
MySQL 5.0
MySQL AB
até 16 CPU
MySQL 5.1
Sun
até 32 CPU
MySQL 5.5
Oracle
até 48 CPU
MySQL 5.6
Evolução da escalabilidade do MySQL
2009 2010 2013
Use InnoDB para usufruir melhor de hardwares modernos.
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 21
MySQL 5.5.28
MySQL 5.6.7
MySQL 5.6 SysBench Benchmarks
234% Ganho de Performance
0
2.000
4.000
6.000
8.000
10.000
12.000
14.000
16.000
18.000
32 64 128 256 512
Tra
nsacti
on
s p
er
Seco
nd
Connections
MySQL 5.6 vs. 5.5 - Read Only (Linux)
Oracle Linux 6
Intel(R) Xeon(R) E7540 x86_64
MySQL leveraging:
- 48 of 96 available CPU threads
- 2 GHz, 512GB RAM
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 22
MySQL 5.5.28
MySQL 5.6.7
MySQL 5.6 SysBench Benchmarks
151% Ganho Performance
0
2.000
4.000
6.000
8.000
10.000
12.000
32 64 128 256 512
Tra
nsacti
on
s p
er
Seco
nd
Connections
MySQL 5.6 vs. 5.5 - Read Write (Linux)
Oracle Linux 6
Intel(R) Xeon(R) E7540 x86_64
MySQL leveraging:
- 48 of 96 available CPU threads
- 2 GHz, 512GB RAM
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 23
60x Melhor Escalabilidade comThread Pool
MySQL 5.6.11
Oracle Linux 6.3, Unbreakable Kernel 2.6.32
4 sockets, 24 cores, 48 Threads
Intel(R) Xeon(R) E7540 2GHz CPUs
512GB DDR3 RAM
Thread Pool habilitado/desabilitado
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 24
18x Melhor Escalabilidade com Thread Pool
Thread Pool habilitado/desabilitado
MySQL 5.6.11
Oracle Linux 6.3, Unbreakable Kernel 2.6.32
4 sockets, 24 cores, 48 Threads
Intel(R) Xeon(R) E7540 2GHz CPUs
512GB DDR3 RAM
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 25
Escalabilidade horizontal
Replicação MySQL
Particionamento Funcional
Data Sharding
3 Abordagens para
escalar o MySQL
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 26
Escalabilidade horizontal
• método mais simples e mais comum
• indicado para aplicações de LEITURA intensiva
• problemas com cache duplicado em aplicações com datasets grandes
Replicação MySQL
• dividir a carga em múltiplos nós, com responsabilidades distintas
• os nós podem ter redundância via replicação para alta-disponibilidade
• normalmente não é transparente para a aplicação e também recorre ao scale up para cada database funcional, o que impõe limites
Particionamento Funcional
• método de maior sucesso para escalar aplicações MySQL de grande porte hoje
• dados compartilhados em tabelas/caches globais, SOA
• difícil de adaptar aplicações legadas
Data Sharding
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 27
Aplicação
Replicação MySQL: como escalar 1/2
Master Slave
• Divisão de leituras e escritas (R/W Split)
• Modelo assíncrono (padrão)
• Modelo semi-síncrono (a partir da versão 5.5)
Escritas & Leituras Leituras
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 28
Replicação MySQL: como escalar 2/2
Leituras Leituras
• Escreva para 1 Master
• Leia de vários Slaves, adicione mais quando necessário
• Perfeito para aplicações de leitura intensiva
Aplicação
Replicação MySQL
Load Balancer
Master Slave Slave
Escritas & Leituras
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 29
Benefício-chave
• O MySQL permite economias
significativas com custos de
hardware, adicionando novos
servidores commodity de
acordo com o necessário e de
maneira incremental
Por que MySQL? • Capacidade de escalar
conforme necessidade e de
maneira incremental
• Baixos custos e flexibilidade
Wikipedia
mysql.com/customers
Caso de sucesso
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 30
Escalabilidade horizontal
• método mais simples e mais comum
• indicado para aplicações de LEITURA intensiva
• problemas com cache duplicado em aplicações com datasets grandes
Replicação MySQL
• dividir a carga em múltiplos nós, com responsabilidades distintas
• os nós podem ter redundância via replicação para alta-disponibilidade
• normalmente não é transparente para a aplicação e também recorre ao scale up para cada database funcional, o que impõe limites
Particionamento Funcional
• método de maior sucesso para escalar aplicações MySQL de grande porte hoje
• dados compartilhados em tabelas/caches globais, SOA
• difícil de adaptar aplicações legadas
Data Sharding
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 31
Data Node 1
Data Node 2
Data Node 3
Data Node 4
Table T1
P2
P3
P4
P1
Escalabilidade horizontal: Data Sharding
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 32
Data Node 1
Data Node 2
F1
Data Node 3
Data Node 4
Table T1
P2
P3
P4
P1
Escalabilidade horizontal: Data Sharding
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 33
Data Node 1
Data Node 2
F1
F1
Data Node 3
Data Node 4
Table T1
P2
P3
P4
P1
Escalabilidade horizontal: Data Sharding
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 34
Data Node 1
Data Node 2
F1
F3 F1
Data Node 3
Data Node 4
Table T1
P2
P3
P4
P1
Escalabilidade horizontal: Data Sharding
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 35
Data Node 1
Data Node 2
F1 F3
F3 F1
Data Node 3
Data Node 4
Table T1
P2
P3
P4
P1
Escalabilidade horizontal: Data Sharding
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 36
Data Node 1
Data Node 2
F1 F3
F3 F1
Data Node 3
Data Node 4
F2
Table T1
P2
P3
P4
P1
Escalabilidade horizontal: Data Sharding
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 37
Data Node 1
Data Node 2
F1 F3
F3 F1
Data Node 3
Data Node 4
F2
F2
Table T1
P2
P3
P4
P1
Escalabilidade horizontal: Data Sharding
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 38
Data Node 1
Data Node 2
F1 F3
F3 F1
Data Node 3
Data Node 4
F2
F4 F2
Table T1
P2
P3
P4
P1
Escalabilidade horizontal: Data Sharding
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 39
Data Node 1
Data Node 2
F1 F3
F3 F1
Data Node 3
Data Node 4
F2 F4
F4 F2
Table T1
P2
P3
P4
P1
Escalabilidade horizontal: Data Sharding
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 40
Data Node 1
Data Node 2
F3
F1
Data Node 3
Data Node 4
F2 F4
F4 F2
Node Group 1
Table T1
P2
P3
P4
P1
F1
F3
Escalabilidade horizontal: Data Sharding
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 41
Data Node 1
Data Node 2
F1 F3
F3 F1
Data Node 3
Data Node 4
F2 F4
F4 F2
Node Group 1
Node Group 2
Table T1
P2
P3
P4
P1
Escalabilidade horizontal: Data Sharding
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 42
Data Node 1
Data Node 2
F1 F3
F3 F1
Data Node 3
Data Node 4
F2 F4
F4 F2
Node Group 1
Node Group 2
Table T1
P2
P3
P4
P1
Escalabilidade horizontal: Data Sharding
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 43
Data Node 1
Data Node 2
F1 F3
F3 F1
Data Node 3
Data Node 4
F2 F4
F4 F2
Node Group 1
Node Group 2
Table T1
P2
P3
P4
P1
Escalabilidade horizontal: Data Sharding
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 44
Benefícios-chave
• Propriedades ACID
• Solução comprovada por muitas
empresas ao longo de anos
• Por que MySQL? • Escalabilidade virtualmente infinita:
hoje com 20 milhões de usuários, 1
bilhão de Notes e 2 bilhões de
arquivos (fotos, documentos etc)
• Flexibilidade para crescer de
maneira incremental e com baixos
custos
Caso de sucesso
Evernote
blog.evernote.com/tech/2012/02/23/whysql
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 45
Ainda há espaço para SGBDs relacionais
Usos comuns: análise de dados
históricos, data warehousing,
business intelligence.
Pontos Fortes: suporte a Queries
rápidas especialmente em datasets
grandes e compressão.
Pontos Fracos: não adequado
para transações, importações e
exportações rápidas; utilização de
computação pesada.
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 46
Ainda há espaço para SGBDs relacionais
Usos comuns: processamento de
transações, aplicações interativas
transacionais
Pontos Fortes: formas facilitadas de
manipular registros; consistência;
tecnologia comprovadamente robusta.
Pontos Fracos: problemas de
escalabilidade, especialmente para
Queries contra grande volume de
dados (dezenas de Terabytes).
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 48
Requisitos NewSQL Relacional + NoSQL
Não há solução única para
todas situações. Não há
bala de prata.
Combine e supere
expectativas!
Performance
Escalabilidade
Facilidade de Uso
Disponibilidade ~24x7
SQL/Joins
Transações ACID
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 49
Enterprise Management
Services and Utilities
Backup & Recovery
Monitor
Workbench
Utilities
Connection Pool, SQL Interface, Parser, Optimizer, Caches
Clients & Connectors Native C API, JDBC, ODBC, .Net, PHP, Ruby, Python, VB, Perl mysqld
Clients and Apps
Arquitetura plugável do MySQL
Storage Engines
InnoDB, MyISAM, Memory, Archive, Cluster (NDB API), etc…
Filesystems, Files & Logs
Data, Index, Logs…
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 50
Memcached com
Persistência no InnoDB Método transparente para persistir
os dados em memória volátil
Memcached plug-in no mysqld ,
mapeado à API nativa do InnoDB
Shared process para baixa latência
Acesso chave-valor ao
InnoDB
Via Memcached API
Usa clients Memcached existentes
Sem SQL parsing
Acesso SQL e NotOnlySQL
Operações chave-valor mas
também queries SQL, JOINs, FKs,
etc.
SQL (MySQL Client)
InnoDB Storage Engine
MySQL Server Memcached plugin
Application
NoSQL (Memcached Prot.)
mysqld
Memcached + InnoDB MySQL 5.6
Mais Flexibilidade e Simplicidade
http://dev.mysql.com/doc/refman/5.6/en/innodb-memcached.html
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 51
MySQL Cluster
• Arquitetura shared-nothing in-memory parallel
• Modelo relacional ACID, SQL
Carrier Grade Database
• 99.999% de disponibilidade
• Self-healing, failover abaixo de 1 segundo Alta Disponibilidade
• Performance em tempo real para altas cargas
• Latência baixa e preditiva Alta Performance
• Elasticidade, crescimento incremental
• Escalabilidade linear, distribuition aware Escalabilidade
• Open Source, hardware commodity
• APIs NoSQL (C++, Java, Memcached, Node.js) Open Source
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 52
Alguns usuários MySQL Cluster
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 54
Performance do MySQL Cluster
8 Servidores Intel Commodity
– 2 x 6-core processors 2.93GHz
– x5670 processors (24 threads)
– 48GB RAM
Rede Infiniband
flexAsynch benchmark (NDB API)
0
200
400
600
800
1.000
1.200
2 4 8
Millio
ns
Number of Data Nodes
SELECT Queries per Minute
0
50
100
150
4 8
Millio
ns
Number of Data Nodes
UPDATE Queries per Minute
Performance a
Escalabilidade
Facilidade de Uso
Disponibilidade ~24x7
SQL/Joins
Transações ACID
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 55
MySQL Cluster 7.2: 1.2 Billion UPDATEs por Minuto
NoSQL C++ API, flexaSynch benchmark
30 x Intel E5-2600 Intel Servers, 2 socket, 64GB
ACID Transactions, with Synchronous Replication
http://www.mysql.com/why-mysql/white-papers/mysql-cluster-benchmarks-1-billion-writes-per-minute/
0
5
10
15
20
25
2 4 6 8 10 12 14 16 18 20 22 24 26 28 30
Mil
lio
ns o
f U
PD
AT
Es p
er
Seco
nd
MySQL Cluster Data Nodes
5
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 56
MySQL Cluster 7.3: Connection Thread Scalability
DBT2 Benchmark
– Single MySQL Server
– Single Data Node
– 128 client connections
8.5x
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 57
MySQL Cluster 7.2 Join Performance
Web-Based Content Management System
– JOINs 11-tables, 33.5k rows
– Returns 2k rows, 19 columns per row
0
10
20
30
40
50
60
70
80
90
100
MySQL Cluster 7.1 MySQL Cluster 7.2
Query Execution Time Seconds
87.23
seconds
1.26
seconds
70x
Faster
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 58
Agenda
Alta Performance com MySQL
Arquitetura e Topologias
Métodos de Acesso e API’s
Instalação e Exemplos
Aprenda Mais
Perguntas?
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 59
Cluster Data Nodes
NDB NDB
Connection Pool, SQL Interface, Parser, Optimizer, Caches
Enterprise Management
Services and Utilities
Backup & Recovery
Monitor
Workbench
Utilities
Clients & Connectors Native C API, JDBC, ODBC, .Net, PHP, Ruby, Python, VB, Perl
Arquitetura MySQL com NDB Cluster
Storage Engines
InnoDB, MyISAM, Memory, Archive, Cluster (NDB API), etc…
Filesystems, Files & Logs
Data, Index, Logs…
mysqld
Clients and Apps
ndbd
mgm_ndbd
Management
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 60
MySQL Cluster Data Nodes
Data Layer
Clients
Management
Arquitetura MySQL Cluster Performance a
Escalabilidade
Facilidade de Uso ?
Disponibilidade ~24x7
SQL/Joins ?
Transações ACID ? Application Layer
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 61
MySQL Cluster Data Nodes
Data Layer
Clients
Application Layer
Management
Arquitetura MySQL Cluster Performance a
Escalabilidade
Facilidade de Uso a
Disponibilidade ~24x7
SQL/Joins a
Transações ACID a
NDB
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 62
MySQL Cluster Data Nodes
Data Layer
Clients
Application Layer
Management
Arquitetura MySQL Cluster Performance a
Escalabilidade ?
Facilidade de Uso a
Disponibilidade ~24x7
SQL/Joins a
Transações ACID a
Table T1
P2
P3
P4
P1 P1
P3
P2
P4
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 63
MySQL Cluster Data Nodes
Data Layer
Clients
Application Layer
Management
Arquitetura MySQL Cluster Performance a
Escalabilidade a
Facilidade de Uso a
Disponibilidade ~24x7 ?
SQL/Joins a
Transações ACID a
P1
P3
P2
P4 Management
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 64
MySQL Cluster Data Nodes
Data Layer
Clients
Application Layer
Management
Arquitetura MySQL Cluster Performance a
Escalabilidade a
Facilidade de Uso a
Disponibilidade ~24x7 a
SQL/Joins a
Transações ACID a
P1
P3
P2
P4
Management
P3
P1
P4
P2
E mais:
• Permite mudanças no
schema sem interrupção de
leituras ou escritas
• Permite adicionar colunas
e índices online
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 65
On-line Operations
Scale the cluster
– Add all nodes
– Remove MySQL Server nodes
Repartition tables
Upgrade / patch servers & OS
Upgrade / patch MySQL Cluster
Back-Up
Evolve the schema on-line, in real-time
Performance a
Escalabilidade a
Facilidade de Uso a
Disponibilidade ~24x7 a
SQL/Joins a
Transações ACID a
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 66
Cluster 1
Synchronous
replication
Cluster 2
InnoDB InnoDB InnoDB
Asynchronous
replication
Flexibilidade da Topologia Replicação
Replicação síncrona entre os grupos de nós para HA
Geo-Replicação assíncrona entre nós remotos
NDB para redundância
geográfica
Replicação assíncrona entre Storage Engines
diferentes para aplicações
especializadas como geração
de relatórios
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 67
Agenda
Alta Performance com MySQL
Arquitetura e Topologias
Métodos de Acesso e API’s
Instalação e Exemplos
Aprenda Mais
Perguntas?
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 68
Os mesmos dados
acessados
simultaneamente
através de interfaces
SQL e NoSQL
APIs de Acesso aos Dados
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 69
APIs Java: ClusterJ e JPA
ClusterJ API de persistência Domain
Object Model (DataMapper)
JPA API de persistência padronizada
pelo OpenJPA
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 70
ClusterJ ou JPA?
ClusterJ Fácil de usar, parecida com Hibernate /
JPA / JDO
– Domain Object Model DataMapper pattern
– Dados são representados por Objetos de Domínio
– Objetos de Domínio não contém lógica de negócio (camada
separada)
– Objetos de Domínio são mapeados para tabelas no MySQL
Altíssima Performance
Construído sobre interface nativa Java
– JNI adapter (ndbjtie)
– Parte integral do MySQL Cluster
– Mapeamento direto do MySQL Cluster API (NDB API) para
Java
Limitação: não suporta relacionamentos
– Olhe na API JPA / JDO para estes padrões de modelagem
JPA A interface JPA interface é compatível
com o padrão Java Persistent API
– Implementada como um plugin OpenJPA
Performance mais alta que o JDBC puro
Construída sobre ClusterJ e JDBC
– Usa ClusterJ onde possível e reverte para JDBC para
algumas operações
Adoção mais natural para profissionais
Java
Facilita adoção do Cluster em aplicações
web e aplicações legadas
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 71
API Memcached Baseado em chave-valor
API simples e bastante popular entre
desenvolvedores
hash table com persistência em disco
e alta performance
Extensão do Memcached adiciona persistência em disco sem
perda de performance
evita rotinas de invalidação do cache,
sincronismo manual
Simplicidade e Flexibilidade evita camadas adicionais na infra-
estrutura
acesso ao dado via tabelas relacionais
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 72
Evolução rápida da
aplicação:
Novos tipos de dados
adicionados
constantemente
Não requer tempo para
estender o schema ou
parada do servidor
Não requer conhecimento
de modelagem relacional
Escalabilidade incremental
Memcached é Schemaless
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 73
<town:maidenhead,SL6>
key value
<town:maidenhead,SL6>
key value
Key Value
town:maidenhead SL6
generic table
Application view
SQL view
Cluster & Memcached Schemaless
set maidenhead 0 0 3
SL6
STORED
get maidenhead
VALUE maidenhead 0 3
SL6
END
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 74
<town:maidenhead,SL6>
prefix key value
<town:maidenhead,SL6>
key value
Prefix Table Key-
col
Val-col policy
town: map.zip town code cluster
Config tables
town ... code ...
maidenhead ... SL6 ...
map.zip
Application view
SQL view
Cluster & Memcached Schema configurável
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 75
Flexibilidade da Topologia API Memcached
• Várias opções de implantação
• Múltiplos Clusters
• Pode manter Memcached server, se preferir
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 76
Node.js NoSQL API MySQL Cluster 7.3 Acesso JavaScript nativo ao
MySQL Cluster
JavaScript do início ao fim: browser >
app > database
Leituras e escritas de objetos JavaScript
direto no MySQL Cluster
Elimina transformações SQL
Implementado como um módulo
para node.js
Integra completamente a API/library
Cluster com a aplicação web
Alta performance para aplicações e
dados distribuídos
V8 JavaScript Engine
MySQL Cluster Node.js Module
MySQL Cluster Data Nodes
Clients
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 78
Agenda
Alta Performance com MySQL
Arquitetura e Topologias
Métodos de Acesso e API’s
Instalação e Exemplos
Aprenda Mais
Perguntas?
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 79
Auto-Installer MySQL Cluster 7.3
Rápida configuração
Auto-discovery
Otimização de acordo com a
carga prevista
Melhores práticas de
implantação
MySQL Cluster 7.3 e 7.4
Especifique a carga
Auto-Discover
Defina a Topologia Deploy
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 80
MySQL Cluster Auto-Install
Simples de instalar e provisionar clusters multi-node
Complementa MySQL Cluster Manager no gerenciamento de cliclo de vida
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 81
1. Download MCM/Cluster package: edelivery.oracle.com:
2. Unzip
3. Execute o agent (usuário diferente de root), defina, crie e inicialize o Cluster com um comando!
$> bin\mcmd –bootstrap
MySQL Cluster Manager Para testes em uma única máquina
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 82
ClusterJ: como usar
• Defina Table para Java Mapping
• Defina Connection para o Cluster
• Crie Session
• Comandos: Create, Update, Delete, Find by primary
key
• Query (SELECT)
• O que achou da PERFORMANCE?
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 83
ClusterJ Gera Classes @PersistenceCapable(table="employee")
public interface Employee {
long getId();
void setId(int id);
@Column(name="full_name")
String getName();
void setName(String value);
int getSalary();
void setSalary(int value);
Integer getAge();
void setAge(Integer value);
}
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 84
ClusterJ Base Class public class Employee
extends DynamicObject {
public String table() {
return "employee";
long getId() {
return (Long)get(0);
}
void setId(long value) {
set(0, value);
}
...
// other fields and behavior
}
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 85
Exemplo: ClusterJ 1/3 Session session;
void getSession() {
session = sessionFactory.getSession();
}
Employee createEmployee(long id, String name,
int salary, int age) {
Employee employee =
session.newInstance(Employee.class);
employee.setId(id);
employee.setName(name);
employee.setSalary(salary);
employee.setAge(age);
session.persist(employee);
return employee;
}
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 86
Exemplo: ClusterJ 2/3
Employee findEmployee(long id) {
Employee employee =
session.find(Employee.class, id);
return employee;
}
void updateSalary(long id, int salary) {
Employee employee = findEmployee(id);
employee.setSalary(salary);
session.updatePersistent(employee);
}
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 87
Exemplo: ClusterJ 3/3 Query
QueryDomainType qemp =
builder.createQueryDefinition(Employee.class) ;
Predicate geAge = qemp.get("age")
.greaterEqual(qemp.param("ageFloor"));
Predicate leSalary = qemp.get("salary")
.lessEqual(qemp.param("salaryCap"));
qemp.where(geAge.and(leSalary));
Query query = session.createQuery(qemp) ;
query.setOrdering(Query.DESCENDING, "age");
query.setParameter("ageFloor",33);
query.setParameter("salaryCap", 44000);
List<Employee> results = query.getResultList() ;
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 88
Mais Exemplos ClusterJ e ClusterJPA
Whitepaper:
MySQL Cluster Connector for Java
August 2012
mysql.com/why-mysql/white-papers
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 89
Exemplos Memcached API
Ondemand Webinar:
NoSQL Memcached API for MySQL Cluster
22 August 2012
mysql.com/news-and-events/on-demand-webinars/display-od-723.html
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 90
Exemplos JavaScript / Node.js API
Blog:
Tutorial Getting Started with the NoSQL JavaScript / Node.js API for
MySQL Cluster
10 June 2012
blogs.oracle.com/MySQL/entry/tutorial_getting_started_with_the
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 91
Agenda
Alta Performance com MySQL
Arquitetura e Topologias
Métodos de Acesso e API’s
Instalação e Exemplos
Aprenda Mais
Perguntas?
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 92
Mais sobre como começar com MySQL Cluster
Whitepaper:
MySQL Cluster Evaluation Guide
February 2015
mysql.com/why-mysql/white-papers
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 93
Comece hoje
Auto-Install Cluster MySQL Cluster 7.4
Download dev.mysql.com/download
s/cluster/
Developer Zone dev.mysql.com
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 96
Sumário
As aplicações Web demandam mais dos bancos de dados
nos dias de hoje.
São exigidos mais performance, escalabilidade horizontal,
APIs e padões de acesso simples e poderosos.
O MySQL cumpre estes requisitos e ainda mantém os
benefícios de um SGBD relacional.
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 97
@MySQLBR meetup.com/MySQL-BR facebook.com/MySQLBR
pt.planet.mysql.com
Estes slides e mais novidades…