desenvolvendo serviços escaláveis e de alta performance com mysql

96
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

Upload: mysql-brasil

Post on 16-Jul-2015

247 views

Category:

Technology


1 download

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. 8

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. 47

NewSQL

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. 77

Qual API devo usar?

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. 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…

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 98

Perguntas?

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 99

@MySQLBR

meetup.com/MySQL-BR

facebook.com/MySQLBR

Obrigado!