mysql + java - manuel contreras

47
<Insert Picture Here> MySQL + Java – Nova vida a Sakila & Duke com a Oracle [email protected] - Contas Corporativas, MySQL Amércia Latina [email protected] Especialista Técnico, MySQL América Latina [email protected] Contas Estratégicas, MySQL América Latina MySQL OTN Day Brasil 7 Dezembro 2011 3:00 pm Sheraton WTC Sao Paulo, Brasil

Upload: mysql-brasil

Post on 18-Dec-2014

1.653 views

Category:

Technology


3 download

DESCRIPTION

Como utilizar MySQL com Java eficientemente. Slides da apresentação de Manuel Contreras durante o OTN MySQL Community Forum 2011 em São Paulo.

TRANSCRIPT

Page 1: MySQL + Java - Manuel Contreras

<Insert Picture Here>

MySQL + Java – Nova vida a Sakila & Duke com a Oracle

[email protected] - Contas Corporativas, MySQL Amércia [email protected] – Especialista Técnico, MySQL América [email protected] – Contas Estratégicas, MySQL América Latina

MySQL OTN DayBrasil 7 Dezembro 20113:00 pmSheraton WTCSao Paulo, Brasil

Page 2: MySQL + Java - Manuel Contreras

MySQL+Java: Nova vida a Sakila & Duke com a Oracle

MySQL na América Latina ( En Español )[email protected]@[email protected]

MySQL na América Latina ( En Português )[email protected]@[email protected]@Oracle.com

@mysql_espanol

@mysql_br

Page 3: MySQL + Java - Manuel Contreras

OTN MySQL User Forum – Brasil ~ Introdução

México e Brasil - rivais no futebol ?

Page 4: MySQL + Java - Manuel Contreras

OTN MySQL User Forum – Brasil ~ Introdução

Não....

México e Brasil são sempre amigos!

Page 5: MySQL + Java - Manuel Contreras

¿Por que usar Software Open Source (OSS)?

Modelo de distribuição de Software

- Versão Community

- Versão Enterprise

Subscrição

- Subscrição anual com suporte técnico

- No vendor locking

- Melhor TCO

Comunidades desenvolvem, testam e sugerem melhorias ao software

- foruns, bug report lists, e participação de desenvolvedores para melhoras do produto.

Open Source Software Enterprise

Page 6: MySQL + Java - Manuel Contreras
Page 7: MySQL + Java - Manuel Contreras

Oracle: nova vida a Duke & Sakila

- Em 1995 Sun microsystems cria Java uma linguagem de programação multiplataforma, 100% orientada a objetos.

- Em 1995, MySQL AB, cria um gerenciador de BD relacional, open source, o qual é amplamente adotado pelas comunidades do LAMP stack software.

- Em 2008, Sun microsystems Inc, adquire MySQL AB – um investimento de Bilhão de dólares pelo OSS.

- Em 2010, Oracle Inc adquire a Sun microsystems, a proposta: oferecer soluções desde o disco até as aplicações, fortalecendo sua oferta open source com Java e MySQL.

- Dezembro de 2010, Oracle libera MySQL 5.5, considerado pela comunidade como o melhor release de MySQL em sua historia.

- Julho de 2011, Java 7.0 é liberado, nova versão com melhorias no JVM hotspot e o melhor desempenho para servidores Java.

Open source software com suporte Enterprise

Page 8: MySQL + Java - Manuel Contreras

JavaA plataforma de desenvolvimento

Page 9: MySQL + Java - Manuel Contreras

Introdução | Java

Java Java - Simples, fácil de usar

- 100% orientado a objetos, API classes

- Administração automática de memória

- Independente da plataforma

- Orientado a um contenedor JRE ( JVM )– Máquina virtual Java que administra multi-threading,

segurança, memória, class loader, gerenciamento de exceções ( erros em tempo de execução )

- Oracle Glassfish Application Server é a implementação de referência para Java EE

- 9 milhões de desenvolvedores no mundo

- Java é gerenciado pela Java Community Process

A linguagem de programação independente da plataforma

http://www.oracle.com/technetwork/java/javase/jdk7-relnotes-418459.html

Page 10: MySQL + Java - Manuel Contreras

Java 7.0 | O novo

Java 7.0, Java 7.0, incorpora melhoras orientadas para aumentar o desempenho de aplicações rodando em servidores com grande capacidade em RAM, e CPU multi-cores.

– Gerenciamento de memória mais eficiente Gerenciamento de memória mais eficiente - Memória é dividida em vários Heap - First Gargabe collector: divide a memória em vários

heap memory, aumentando o desempenho em seu acesso

– Nova funcionalidade em API de JDBC, para Nova funcionalidade em API de JDBC, para conectividade a bases de dadosconectividade a bases de dados

RowSet, Statement e Connection implementam a RowSet, Statement e Connection implementam a interface Closeable, AutoCloseable interface Closeable, AutoCloseable

Java 7.0 – potencializa o desempenho de Java nos Servidores

Page 11: MySQL + Java - Manuel Contreras

JDBC | Java Database Connectivity

Mecanismos para estabelecer conexões a MySQL Server, com Java:

- DriverManager ( Class Loader Java )- DriverManager ( Class Loader Java )– O método mais simples, mas não é recomendado

para ambientes de produção

- Pool Connection / Data Source - Pool Connection / Data Source – Requer um servidor de aplicativos, mas é altamente

recomendado para ambientes de produção

- Persistence Framework- Persistence Framework– Hibernate, Spring, Memcached & Java ( MySQL 5.6 )Hibernate, Spring, Memcached & Java ( MySQL 5.6 )

Práticas Recomendadas para Java Developers

Page 12: MySQL + Java - Manuel Contreras

JDBC | Java Database Connectivity

Pool Connection / DataSourcePool Connection / DataSource- Um conjunto de conexões, sempre está disponível no pool

- Método: getConnection() em Java, obtém uma conexão disponível do pool, sem delay para abrir fisicamente uma conexão- Método closeConnection() em Java, não fecha a conexão, somente

a devolve ao pool, para que outro Thread possa reutilizá-la

Práticas Recomendadas para Java Developers

Java Application - Connection1

- Connection2- Connection3- ConnectionN...

Java Pool Connection ( DataSource)

Page 13: MySQL + Java - Manuel Contreras

JDBC | Java Database ConnectivityPráticas Recomendadas para Java Developers

Java Application - Connection1

- Connection2- Connection3- ConnectionN...

Java Pool Connection ( DataSource)

Java EE 6 Application ServerReference Implementation

Page 14: MySQL + Java - Manuel Contreras

JDBC | DataSource Glassfish

http://blogs.oracle.com/psterk/entry/criating_and_configuring_a_mysql

Page 15: MySQL + Java - Manuel Contreras

JDBC | Java Database ConnectivityPráticas Recomendadas para Java Developers

- Connection1- Connection2- Connection3- ConnectionN...

Java Pool Connection ( DataSource)

Java EE 6 Application ServerReference Implementation

-O Java EE Application Server, gerencia conexões.

- Automaticamente fecha conexões no estado Idle.

Conexões abertas sob demanda, conforme requerido pela aplicação

- Ele é facilmente configurado pelo administrador do servidor de aplicações Java EE.

Page 16: MySQL + Java - Manuel Contreras

MySQLvisão geral

Page 17: MySQL + Java - Manuel Contreras

MySQL - números interessantes

• 155 million

• 212 days

• 127 billion

• 24.9 trillion

Você sabe o que são esses números?

Page 18: MySQL + Java - Manuel Contreras

MySQL - números interessantes

• 155 million

• 212 days

• 127 billion

• 24.9 trillion

Você sabe o que são esses números?

Page 19: MySQL + Java - Manuel Contreras

MySQL - números interessantes

• 155 million

• 127 billion

number of tweats per day, 1700 per second6,939/s Japanese New YearMySQL is core architecture for twitter

• 212 daysuptime of random MySQL server at twitter

• 24.9 trillion

number of queries executed on single server

innodb_rows_read, 1.36M per second

source: Jeremy Cole, Twitter DBA, MySQL UC 2011

Page 20: MySQL + Java - Manuel Contreras

… qual versão do MySQL rodar?

… servidores down?

… os sistemas escalarão?

… política de segurança, muda?

… problemas de performance?

… onde, quando, como “tunar”?

… queries lentas, custosas?

… problemas de replicação?

… produtividade de desenv./QA?

… posso recuperar?

Questões difíceis

Por que é melhor usar MySQL Enterprise...

Page 21: MySQL + Java - Manuel Contreras

Mais segura, escalável banco de dados MySQL, Backup Online, Desenvolvimento / Ferramentas de monitoração, apoiados pela Oracle Lifetime Suporte Premier

Oracle Premier Support

Oracle Product Certifications/Integrations

MySQL Enterprise High Availability

MySQL Enterprise Security

MySQL Enterprise Scalability

MySQL Enterprise Backup

MySQL Enterprise Monitor/Query Analyzer

MySQL Workbench

MySQL Enterprise Edition

Page 22: MySQL + Java - Manuel Contreras

MySQL Master

relaybinlog

MySQL Slave

data

index &binlogs

databinlog

updatesselects

updates I/O Thread

SQL Thread

Replication

MySQL DatabaseInternals replicação

Page 23: MySQL + Java - Manuel Contreras

MySQL, Replicação

- Melhor tempo de resposta mediante a separação de carga, no processamento de consultas entre o master / slave

- SELECT Queries, podem ser enviados ao slave para reduzir a carga de processamento de consultas, no master

- Disponível para qualquer tipo de storage engine, incluindo replicação entre distintos tipos de storage engine

- Obter uma maior disponibilidade com um master / slave- Em caso de falhas no master, é possível utilizar o slave como backup- Respaldo de informação através dos slaves

Cl

ie

nt

s

Slaves Master

MySQL Replication

Page 24: MySQL + Java - Manuel Contreras

Estudos de Caso: MySQL – Replicação Master – Slave

Page 25: MySQL + Java - Manuel Contreras

MySQL Replicação semi-sync Novo no MySQL 5.5!

• Os dados escritos no master, também são escritos no binary log File

O thread I/O, nos slaves, usa as alterações do binlog do master e o escreve em um relay log nos slavesO thread SQL, nos slaves, lê o relay log e aplica as alterações / escritas nos slaves• Se o plugin semi-sync está instalado e

configurado, o master espera até que o thread I/O de algum slave semi-sync, tenha escrito a transação a disco, ou até que ocorra um timeout, então se retorna ao ACK na aplicação

Master

Slave

IO Thread

binlog relay

SQL Thread

Melhora a confiança no FailOverCOMMIT no nodo master é reconhecido, somente quando ao menos um dos nodos slaves tenha registrado o eventoEm caso de FailOver, não há perda de informação

http://dev.mysql.com/doc/refman/5.5/en/replication-howto.html

Page 26: MySQL + Java - Manuel Contreras

JDBC | Java Database Connectivity

JDBC – MySQL Master, Slave1, Slave2, SlaveN – Round Robin

Práticas Recomendadas para Java Developers

- Load Balancing de Leitura em servidores Slave- Servidor Master para Read & Writes- Slaves para Read Only- JDBC Connector automaticamente, seleciona um Slave da lista de Slaves

http://dev.mysql.com/doc/refman/5.5/en/connector-j-reference-replication-connection.html

Page 27: MySQL + Java - Manuel Contreras

JDBC | Java Database ConnectivityPrácticas Recomendadas para Java Developers

http://dev.mysql.com/doc/refman/5.5/en/connector-j-reference-replication-connection.html

Passo 1) Importação de Livrarias

Consulta Sepración ler e escrever operações com Java e MySQL

Page 28: MySQL + Java - Manuel Contreras

JDBC | Java Database ConnectivityPrácticas Recomendadas para Java Developers

http://dev.mysql.com/doc/refman/5.5/en/connector-j-reference-replication-connection.html

Passo 2) - Configuração de Driver para uso em RoundRobin Load Balancing

Consulta Sepración ler e escrever operações com Java e MySQL

Page 29: MySQL + Java - Manuel Contreras

JDBC | Java Database ConnectivityPrácticas Recomendadas para Java Developers

Passo 3) - configurações de conexão com o mestre e escravos

Consulta Sepración ler e escrever operações com Java e MySQL

Page 30: MySQL + Java - Manuel Contreras

JDBC | Java Database ConnectivityPráticas Recomendadas para Java Developers

Passo 4) - Insert Dados em Master ( Read Only False )

Page 31: MySQL + Java - Manuel Contreras

JDBC | Java Database ConnectivityPráticas Recomendadas para Java Developers

Passo 6) - Select Dados em um dos Slaves ( Read Only True )

Page 32: MySQL + Java - Manuel Contreras

MySQL Enterprise Monitor• Monitor de Replicação

Page 33: MySQL + Java - Manuel Contreras

• Vista única consolidada do ambiente MySQL

• Auto descobrimento de servidores MySQL, replicação e topologias

• Alertas e monitoramento adaptável e baseado en regras

• Identificação de problemas antes que ocorram

• Redução de risgo e tempo de inatividade

• Facilidade para escalamento horizontal sem requerer mais DBAs

MySQL Enterprise Monitor

Um assistente DBA Virtual para MySQL

http://mysql.com/products/enterprise/monitor.html

Page 34: MySQL + Java - Manuel Contreras
Page 35: MySQL + Java - Manuel Contreras

MySQL Enterprise Monitor• Java Connector plugin / Query Analyzer

Page 36: MySQL + Java - Manuel Contreras
Page 37: MySQL + Java - Manuel Contreras

MySQL ~ Extensões Comerciais

✔MySQL Enterprise Backup✔ Incremental, Compression, Point in Time Recovery

✔MySQL High Availability✔ Oracle OVM MySQL Template & Windows Failover

Clustering

✔Enterprise Security✔ Plug-In: MySQL External Authentication

✔Enterprise Scalability✔Plug-In: MySQL Thread Pool

✔Enterprise Monitor, Workbench, Technical Support✔ Virtual MySQL Tunning assistant & 24x7 support

Page 38: MySQL + Java - Manuel Contreras

Gestão Padrão do Thread Pool

Clientes Internos

Gestão Padrão doThread Pool

Conexões / Declarações

atribuídas aos Threads durante sua existência

Execução das Conexões das Threads

Clientes Externos

• Conexões são atribuídas a 1 thread durante a existência da Conexão.

• A mesma thread é usada para todas as declarações de execução (single threaded)

Page 39: MySQL + Java - Manuel Contreras

Com o Thread Pool Habilitado

Clientes Internos

Clientes Externos

Thread Pool

Grupo Thread 1

Threads 1 - 4096

Grupo Thread 2

Threads 4097 - 8193

Grupo Thread N

Threads 8194 - N

Grupo Thread 1

Grupo Thread 2

Grupo Thread N

• Pool contém um número de Grupo de Threads(default = 16), cada um gerencia até 4096 threads reusáveis

• Cada conexão é atribuída ao grupo de thread via round robin

mantém a performance em altas cargas de usuários/conexões

Execução das Conexões das Threads

Page 40: MySQL + Java - Manuel Contreras

MySQL Enterprise EditionComThread Pool

MySQL Community ServerSem Thread Pool

Comparativo com/sem Thread Pool

20x Melhor Escalabilidade comThread Pool

MySQL 5.5.16Oracle Linux 6.1, Unbreakable Kernel 2.6.322 sockets, 24 cores, 2 X 12-coreIntel(R) Xeon(R) X5670 2.93GHz CPUs72GB DDR3 RAM2 X LSI SCSI Disk (MR9261-8i) (597GB)

Page 41: MySQL + Java - Manuel Contreras

MySQL Enterprise Backup

• Anteriormente “InnoDB Hot Backup”

• Online, non-locking backup & recovery • Tables, Indexes

• Server, database, ou object-level

• Backups Lógico e Físico

• Backups Completos ou Incrementais

• Point-in-time recovery• Backups Comprimidos• Também oferece backup e recuperação para MyISAM

• Multi-plataforma (Windows, Linux, Unix)

• Certificado para Oracle Secure Backup (SBT 2.0)

Page 42: MySQL + Java - Manuel Contreras

Backups

Backups são até 3.5x mais rápidos do que mysqldump

Page 43: MySQL + Java - Manuel Contreras

Restores

Restore é até 16x mais rápido do que mysqldump - mysqldump performance não é linear (mais tables/indexes impacta na performance)- MySQL Enterprise performance é quase linear

Page 44: MySQL + Java - Manuel Contreras

Compressão do Backup

O tamanho do Backup é reduzido de 65% até 93%

Page 45: MySQL + Java - Manuel Contreras

MySQL Workbench

http://www.mysql.com/products/workbench/

Page 46: MySQL + Java - Manuel Contreras

… qual versão do MySQL rodar?

… servidores down?

… os sistemas escalarão?

… política de segurança, muda?

… problemas de performance?

… onde, quando, como “tunar”?

… queries lentas, custosas?

… problemas de replicação?

… produtividade de desenv./QA?

… posso recuperar?

Questões Difíceis, Soluções Reais

• MySQL Enterprise Scalability• MySQL Enterprise Monitor, Advisors, Query Analyzer• MySQL Consultative Support

• MySQL Enterprise Monitor, Query Analyzer

• MySQL Enterprise Monitor, Advisors, Query Analyzer• MySQL Consultative Support

• MySQL Enterprise Monitor, Replication Monitor• Oracle Premier 7x24 Support

• MySQL Enterprise Scalability• MySQL Enterprise Monitor, Advisors, Query Analyzer• MySQL Consultative Support

• Oracle Premier 7x24 Support • MySQL Enterprise Monitor, Advisors• MySQL Enterprise High Availability

• MySQL External Authentication• MySQL Enterprise Monitor, Security Advisor

• MySQL Workbench SE• MySQL Enterprise Monitor, Query Analyzer

• Oracle Premier 7x24 Support

• MySQL Enterprise Backup

Page 47: MySQL + Java - Manuel Contreras

Obrigado / Gracias!MySQL na América Latina ( En Español )

[email protected]@[email protected]

@mysql_espanol@mysql_br@mysql ( Official English )