Slide 1

Slide 1 text

EVOLUINDO SEU BANCO DE MANEIRA INCREMENTAL Rafael Ponte TechDay - 2018 Migrations for Java

Slide 2

Slide 2 text

EM 2005 EU SÓ QUERIA SABER DE FRAMEWORKS

Slide 3

Slide 3 text

ANALISTA DE SISTEMAS NA EQUIPE

Slide 4

Slide 4 text

I — HIBERNATE

Slide 5

Slide 5 text

I — HIBERNATE

Slide 6

Slide 6 text


 
 
 persistence.xml

Slide 7

Slide 7 text

@Entity class Issue { @Id
 private Long id; private String descricao;
 … } Nova Entidade

Slide 8

Slide 8 text

INFO [SchemaUpdate ] Running hbm2ddl schema update INFO [SchemaUpdate ] fetching database metadata INFO [SchemaUpdate ] updating schema ... INFO [TableMetadata] table not found: issue INFO [SchemaUpdate ] create table issue (id bigserial not null, descricao varchar(255)) ... INFO [SchemaUpdate ] schema update complete

Slide 9

Slide 9 text

I — HIBERNATE

Slide 10

Slide 10 text

@Entity class Issue { @Id
 private Long id; private String descricao;
 private String status = "A"; 
 … } Entidade ATUALIZADA!

Slide 11

Slide 11 text

INFO [SchemaUpdate ] Running hbm2ddl schema update INFO [SchemaUpdate ] fetching database metadata INFO [SchemaUpdate ] updating schema ... INFO [TableMetadata] table found: issue INFO [TableMetadata] columns: [id, descricao] INFO [SchemaUpdate ] alter table issue add column status varchar(255) ...
 INFO [SchemaUpdate ] schema update complete

Slide 12

Slide 12 text

I — HIBERNATE

Slide 13

Slide 13 text

@Entity class Issue { @Id
 private Long id;
 @Column(length=1000) private String descricao;
 private String status = "A"; 
 … } Entidade ATUALIZADA! <3

Slide 14

Slide 14 text

EM PRODUÇÃO java.sql.SQLException: Data truncated for column 'descricao' at row 1

Slide 15

Slide 15 text

INFO [SchemaUpdate ] Running hbm2ddl schema update INFO [SchemaUpdate ] fetching database metadata INFO [SchemaUpdate ] updating schema ... INFO [TableMetadata] table found: issue INFO [TableMetadata] columns: [id, status, descricao] INFO [TableMetadata] foreign keys: [] INFO [TableMetadata] indexes: [issue_pkey] ... ??????????? #WTF
 INFO [SchemaUpdate ] schema update complete

Slide 16

Slide 16 text

I — HIBERNATE ϟ

Slide 17

Slide 17 text

SEMPRE PODE PIORAR

Slide 18

Slide 18 text

SEMPRE PODE PIORAR MUDE O NOME DA COLUNA

Slide 19

Slide 19 text

SEMPRE PODE PIORAR MUDE O TIPO DA COLUNA

Slide 20

Slide 20 text

SEMPRE PODE PIORAR ADICIONE UMA COLUNA NOT-NULL

Slide 21

Slide 21 text

WARNING: We've seen Hibernate users trying to use SchemaUpdate to update the schema of a production database automatically. This can quickly end in disaster and won't be allowed by your DBA. “ -- Java Persistence with Hibernate

Slide 22

Slide 22 text

WARNING: We've seen Rafael Ponte trying to use SchemaUpdate to update the schema of a production database automatically. This can quickly end in disaster and won't be allowed by your DBA. “ -- Java Persistence with Hibernate

Slide 23

Slide 23 text

I — HIBERNATE ϟ

Slide 24

Slide 24 text

DO PROJETO SOMENTE NO INICIO APRENDI: GERAR SCHEMA COM HIBERNATE

Slide 25

Slide 25 text

CORRIGINDO O BANCO NA MÃO

Slide 26

Slide 26 text

CORRIGINDO O BANCO NA MÃO Mario Diniz Não tá entrando na tela...

Slide 27

Slide 27 text

CORRIGINDO O BANCO NA MÃO E o meu banco? Handerson Frota Mario Diniz Não tá entrando na tela...

Slide 28

Slide 28 text

ALGO ESTAVA ERRADO, EVOLUIR O BANCO ERA CARO

Slide 29

Slide 29 text

Migrations for Java EVOLUINDO SEU BANCO DE MANEIRA INCREMENTAL

Slide 30

Slide 30 text

@rponte

Slide 31

Slide 31 text

Como você evolui sua APP?

Slide 32

Slide 32 text

Como você evolui seu BANCO?

Slide 33

Slide 33 text

Como você evolui seu BANCO? gerencia mudanças

Slide 34

Slide 34 text

PREPARA UM HUGE_SCRIPT.SQL E APLICA MANUALMENTE?

Slide 35

Slide 35 text

DEIXA NA MÃO DO DBA?

Slide 36

Slide 36 text

DEIXA NA MÃO DO ARQUITETO? * BDUF (Big Design Up Front) *

Slide 37

Slide 37 text

CRIA SUA PRÓPRIA FERRAMENTA, CERTO? NÓS — TECNOLOGIA CASEIRA

Slide 38

Slide 38 text

OU GERA COM HIBERNATE?

Slide 39

Slide 39 text

Não importa qual solução você utilize...

Slide 40

Slide 40 text

CADA SOLUÇÃO TEM VANTAGENS E DESVANTAGENS

Slide 41

Slide 41 text

CADA SOLUÇÃO TEM SEUS PRÓS E CONTRAS

Slide 42

Slide 42 text

A COMUNIDADE RUBYONRAILS APRENDEU DESDE O COMEÇO

Slide 43

Slide 43 text

SIMPLES E EFICAZ: MIGRATIONS

Slide 44

Slide 44 text

A COMUNIDADE JAVA PARECE QUE NÃO APRENDEU AINDA COMO SE FAZ

Slide 45

Slide 45 text

Java ferramentas para todos os gostos

Slide 46

Slide 46 text

TODAS SEGUEM O MESMO CONCEITO

Slide 47

Slide 47 text

PASSOS 4 RESUMINDO EM

Slide 48

Slide 48 text

CRIE O SCRIPT COM A MUDANÇA 1 CREATE TABLE 'blog' ( 'id' INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, 'descricao' VARCHAR(255) NOT NULL PRIMARY KEY ('id') ) script.sql

Slide 49

Slide 49 text

CRIE O SCRIPT COM A MUDANÇA 1 CREATE TABLE 'blog' ( 'id' INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, 'descricao' VARCHAR(255) NOT NULL PRIMARY KEY ('id') ) create_table_blog.sql

Slide 50

Slide 50 text

CRIE O SCRIPT COM A MUDANÇA 1 CREATE TABLE 'blog' ( 'id' INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, 'descricao' VARCHAR(255) NOT NULL PRIMARY KEY ('id') ) 1_create_table_blog.sql

Slide 51

Slide 51 text

CRIE O SCRIPT COM A MUDANÇA 1 CREATE TABLE 'blog' ( 'id' INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, 'descricao' VARCHAR(255) NOT NULL PRIMARY KEY ('id') ) _.sql

Slide 52

Slide 52 text

APLICA O SCRIPT NO BANCO 2 [rponte] ~/myblog/scripts $ migrate up

Slide 53

Slide 53 text

APLICA O SCRIPT NO BANCO 2 [rponte] ~/myblog/scripts $ migrate up -env=PRODUCTION -env=HOMOLOG -env=DEV -env=TEST

Slide 54

Slide 54 text

VERSIONA A MUDANÇA NO BANCO 3 mysql> select * from DB_VERSION; +----+---------------------+ | ID | DESCRIPTION | +----+---------------------+ | 1 | create table blog | +----+---------------------+

Slide 55

Slide 55 text

APLICA SCRIPTS AINDA NÃO APLICADOS 4 [rponte] ~/myblog/scripts $ migrate up mysql> select * from DB_VERSION; +----+---------------------+ | ID | DESCRIPTION | +----+---------------------+ | 1 | create table blog | | 2 | create table author | | 3 | create table post | +----+---------------------+

Slide 56

Slide 56 text

CRIA O SCRIPT 1 APLICA SCRIPT 2 VERSIONA O BANCO 3 APLICA NOVOS SCRIPTS 4

Slide 57

Slide 57 text

Java ferramentas para todos os gostos

Slide 58

Slide 58 text

Java ferramentas para todos os gostos liquibase mybatis flyway

Slide 59

Slide 59 text

FLYWAY LIQUIBASE MYBATIS MIGRATIONS

Slide 60

Slide 60 text

FLYWAY LIQUIBASE MYBATIS MIGRATIONS

Slide 61

Slide 61 text

Flyway

Slide 62

Slide 62 text

Flyway > Plain SQL migrations

Slide 63

Slide 63 text

Flyway > Plain SQL migrations > Java migrations

Slide 64

Slide 64 text

Flyway > Plain SQL migrations > Java migrations > Convention over Configuration

Slide 65

Slide 65 text

Flyway > Plain SQL migrations > Java migrations > Convention over Configuration > SQL Parser

Slide 66

Slide 66 text

Flyway > Plain SQL migrations > Java migrations > Convention over Configuration > SQL Parser > Java API - Ant - Maven - Gradle

Slide 67

Slide 67 text

FLYWAY LIQUIBASE MYBATIS MIGRATIONS

Slide 68

Slide 68 text

Liquibase

Slide 69

Slide 69 text

Liquibase > XML migrations

Slide 70

Slide 70 text

Liquibase > XML migrations > Plain SQL migrations

Slide 71

Slide 71 text

Liquibase > XML migrations > Plain SQL migrations > Multiple Databases

Slide 72

Slide 72 text

Liquibase > XML migrations > Plain SQL migrations > Multiple Databases > Rollback support

Slide 73

Slide 73 text

Liquibase > XML migrations > Plain SQL migrations > Multiple Databases > Rollback support > Generation of SQL scripts for DBA

Slide 74

Slide 74 text

FLYWAY LIQUIBASE MYBATIS MIGRATIONS

Slide 75

Slide 75 text

MyBatis Schema Migrations

Slide 76

Slide 76 text

MyBatis Schema Migrations > Plain SQL migrations

Slide 77

Slide 77 text

MyBatis Schema Migrations > Plain SQL migrations > Maven

Slide 78

Slide 78 text

MyBatis Schema Migrations > Plain SQL migrations > Rollback support > Maven

Slide 79

Slide 79 text

MyBatis Schema Migrations > Plain SQL migrations > Generation of SQL scripts for DBA > Rollback support > Maven

Slide 80

Slide 80 text

APESAR DE TANTAS OPÇÕES HOJE EM DIA

Slide 81

Slide 81 text

APESAR DE TANTAS OPÇÕES HOJE EM DIA EM 2009 ERA DIFERENTE

Slide 82

Slide 82 text

APESAR DE TANTAS OPÇÕES HOJE EM DIA ADOTAMOS O MYBATIS MIGRATIONS

Slide 83

Slide 83 text

WINDOWS, LINUX E MACOSX ADOTAMOS O MYBATIS MIGRATIONS

Slide 84

Slide 84 text

PODEMOS FACILITAR E FOI O QUE FIZEMOS ANT SCRIPT

Slide 85

Slide 85 text

No content

Slide 86

Slide 86 text

Mybatis-Migrations-Anttasks github.com/rponte/mybatis-migrations-anttasks

Slide 87

Slide 87 text

PODEMOS FACILITAR E FOI O QUE MARCELO FEZ GRADLE PLUGIN

Slide 88

Slide 88 text

PODEMOS FACILITAR E FOI O QUE MARCELO FEZ GRADLE PLUGIN Ant é tão OLD!

Slide 89

Slide 89 text

Gradle-Migrations-Plugin github.com/marceloemanoel/gradle-migrations-plugin

Slide 90

Slide 90 text

No content

Slide 91

Slide 91 text

MAVEN MyBatis Migrations

Slide 92

Slide 92 text

MAVEN ANT MyBatis Migrations

Slide 93

Slide 93 text

MAVEN ANT GRADLE MyBatis Migrations

Slide 94

Slide 94 text

FLYWAY LIQUIBASE MYBATIS MIGRATIONS

Slide 95

Slide 95 text

FLYWAY LIQUIBASE MYBATIS MIGRATIONS QUAL ESCOLHER?

Slide 96

Slide 96 text

MIGRATIONS

Slide 97

Slide 97 text

MIGRATIONS = EVOLUÇÃO SUSTENTÁVEL DO BANCO

Slide 98

Slide 98 text

MIGRATIONS MELHOR PROCESSO + = EVOLUÇÃO SUSTENTÁVEL DO BANCO

Slide 99

Slide 99 text

MELHORE O PROCESSO

Slide 100

Slide 100 text

EQUIPE RESPONSÁVEL PELO BANCO

Slide 101

Slide 101 text

COLOQUE AS MIGRATIONS NO CONTROLE DE VERSÃO

Slide 102

Slide 102 text

- BANCO DE DADOS COMPARTILHADO - NAO USE EM DESENVOLVIMENTO

Slide 103

Slide 103 text

- BANCO DE DADOS COMPARTILHADO - NAO USE EM DESENVOLVIMENTO

Slide 104

Slide 104 text

Banco de Dados Rafael Mario Handerson ... ...

Slide 105

Slide 105 text

Rafael Mario Handerson ... Banco Banco Banco ... ... ...

Slide 106

Slide 106 text

Banco de Dados Rafael Mario Handerson ... Schema Schema Schema ... ... ...

Slide 107

Slide 107 text

AUTOMATIZE O MÁXIMO QUE PUDER

Slide 108

Slide 108 text

Rafael v48 Rafael v48 Rafael v48 Mario v49 Rafael v48 Handerson v43

Slide 109

Slide 109 text

Rafael v48 Rafael v48 Rafael v48 Mario v49 Rafael v48 Handerson v43 Integration v48 deploy frequente

Slide 110

Slide 110 text

Rafael v48 Rafael v48 Rafael v48 Mario v49 Rafael v48 Handerson v43 Integration v48 Q&A v44 Demo v45 deploy frequente deploy controlado

Slide 111

Slide 111 text

Rafael v48 Rafael v48 Rafael v48 Mario v49 Rafael v48 Handerson v43 Integration v48 Q&A v44 Demo v45 Produção v43 deploy frequente deploy controlado deploy MUITO controlado

Slide 112

Slide 112 text

Rafael v48 Rafael v48 Rafael v48 Mario v49 Rafael v48 Handerson v43 Integration v48 Q&A v44 Demo v45 Produção v43 deploy frequente deploy controlado deploy MUITO controlado

Slide 113

Slide 113 text

Rafael v48 Rafael v48 Rafael v48 Mario v49 Rafael v48 Handerson v43 Integration v49 Q&A v44 Demo v45 Produção v43 deploy frequente deploy controlado deploy MUITO controlado

Slide 114

Slide 114 text

Rafael v48 Rafael v48 Rafael v48 Mario v49 Rafael v48 Handerson v43 Integration v49 Q&A v49 Demo v45 Produção v43 deploy frequente deploy controlado deploy MUITO controlado

Slide 115

Slide 115 text

Rafael v48 Rafael v48 Rafael v48 Mario v49 Rafael v48 Handerson v43 Integration v49 Q&A v49 Demo v49 Produção v43 deploy frequente deploy controlado deploy MUITO controlado

Slide 116

Slide 116 text

Rafael v48 Rafael v48 Rafael v48 Mario v49 Rafael v48 Handerson v43 Integration v49 Q&A v49 Demo v49 Produção v49 deploy frequente deploy controlado deploy MUITO controlado

Slide 117

Slide 117 text

NÃO MODIFIQUE MIGRATIONS QUE FORAM PARA PRODUÇÃO

Slide 118

Slide 118 text

GRANDES MUDANÇAS PEQUENAS MIGRATIONS

Slide 119

Slide 119 text

MIGRATIONS MELHOR PROCESSO + = EVOLUÇÃO SUSTENTÁVEL DO BANCO

Slide 120

Slide 120 text

SEMPRE PODE PIORAR

Slide 121

Slide 121 text

APP BANC

Slide 122

Slide 122 text

APP BANC APPS que você NÃO conhece APPS que você conhece APPS que você conhece APPS que você NÃO conhece Data importers Data exporters Outros bancos Frameworks de persistência Código de teste APPS que você conhece APPS que você conhece APPS que você NÃO conhece Outros bancos Data importers Data exporters

Slide 123

Slide 123 text

APP BANC APPS que você NÃO conhece APPS que você conhece APPS que você conhece APPS que você NÃO conhece Data importers Data exporters Outros bancos Frameworks de persistência Código de teste APPS que você conhece APPS que você conhece APPS que você NÃO conhece Outros bancos Data importers Data exporters “Deus no céu, e Banco de dados na terra.”

Slide 124

Slide 124 text

EVOLUIR O BANCO NESSE CENÁRIO É CARO

Slide 125

Slide 125 text

Original Transição Resultado

Slide 126

Slide 126 text

Original Transição Resultado modifica o banco {

Slide 127

Slide 127 text

Original Transição Resultado modifica o banco período de transição (antigo e novo) { {

Slide 128

Slide 128 text

Original Transição Resultado modifica o banco período de transição (antigo e novo) finaliza a modificação { { {

Slide 129

Slide 129 text

Original Transição Resultado modifica o banco período de transição (antigo e novo) finaliza a modificação { { { Aplica as migrations, migra os dados, escreve código de compatibilidade

Slide 130

Slide 130 text

Original Transição Resultado modifica o banco período de transição (antigo e novo) finaliza a modificação { { { Aplica as migrations, migra os dados, escreve código de compatibilidade Remove schema antigo e código de compatibilidade

Slide 131

Slide 131 text

CONCLUINDO

Slide 132

Slide 132 text

EVOLUIR O BANCO É MAIS DIFÍCIL DO QUE A APLICAÇAO

Slide 133

Slide 133 text

TRABALHE JUNTAMENTE COM O DBA

Slide 134

Slide 134 text

ESTUDE, EXPERIMENTE E ESCOLHA UMA MIGRATIONS TOOL

Slide 135

Slide 135 text

Obrigado!

Slide 136

Slide 136 text

Rafael Ponte [email protected]