Migrations for Java EVOLUINDO SEU BANCO DE MANEIRA INCREMENTAL



Documentos relacionados
BANCO DE DADOS. info 3º ano. Prof. Diemesleno Souza Carvalho

Técnicas de Database Refactoring para ambientes 24x7. Matheus de Oliveira

Projeto de Banco de Dados: Empresa X

Profº Aldo Rocha. Banco de Dados


UFG - Instituto de Informática

APOSTILA BANCO DE DADOS INTRODUÇÃO A LINGUAGEM SQL

PHP INTEGRAÇÃO COM MYSQL PARTE 1

Android Banco de Dados. Ivan Nicoli

Banco de dados. Linguagens de Banco de Dados II. Wedson Quintanilha da Silva -

SQL Linguagem de Definição de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

Mapeamento Lógico/Relacional com JPA

(1,n) venda. (1,1) realizacao. cliente. (0,n) (1,1) contem. produto. Laboratório de Banco de Dados Exercicios

Prof. Carlos Majer Aplicações Corporativas UNICID

Persistência de dados com JPA. Hélder Antero Amaral Nunes

TECNOLOGIA EM SISTEMAS PARA INTERNET PROJETO DE BANCO DE DADOS

Criando Banco de Dados, Tabelas e Campos através do HeidiSQL. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011

MySQL. Prof. César Melo. com a ajuda de vários

Introdução à Engenharia da Computação. Banco de Dados Professor Machado

BANCO DE DADOS BANCO DE DADOS. Prof. Patrícia Lucas 3º Trimestre

Criar uma aplicação JPA2 com EclipseLink e H2

JPA: Persistência padronizada em Java

MANIPULANDO BANCO DE DADOS NO POSTGRESQL SEM FAZER USO DE COMANDOS SQL

Manipulação de Banco de Dados com Java 1. Objetivos

Introdução à linguagem SQL

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS ARMAZENAMENTO EM BD NO DM. Prof. Angelo Augusto Frozza, M.Sc.

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS ARMAZENAMENTO EM BD NO DM. Prof. Angelo Augusto Frozza, M.Sc.

Persistência de Classe e Auto- Relacionamento em Tabelas de Banco de Dados

Disciplina: Unidade V: Prof.: Período:

Banco de dados 1. Linguagem SQL DDL e DML. Professor: Victor Hugo L. Lopes

Java e Banco de Dados: JDBC, Hibernate e JPA

Persistindo dados com TopLink no NetBeans

Hibernate. Mapeamento Objeto-Relacional. Prof. Anselmo Cardoso Paiva Prof. Geraldo Braz Junior

Armazenamento organizado facilitando SCRUD; Agiliza processo de desenvolvimento de sistemas;

Roteiro 9 - SQL Básico: chave estrangeira, operadores de comparação e operadores booleanos

Principais Comandos SQL Usados no MySql

EXERCÍCIOS PRÁTICOS. Banco de Dados

JDBC Java Database Connectivity

SQL (STRUCTUREDQUERY LANGUAGE)

SQL Linguagem de Definição de Dados. Laboratório de Bases de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

Linguagem SQL (Parte II)

SQL comando SELECT. SELECT [DISTINCT] <campos> FROM <tabela> [condição] [ ; ] Paulo Damico - MDK Informática Ltda.

1 Criar uma entity a partir de uma web application que usa a Framework JavaServer Faces (JSF)

JPA Passo a Passo. Henrique Eduardo M. Oliveira henrique@voffice.com.br. Globalcode Open4Education

Aula Extra Conexão ODBC para aplicações Delphi 7 que usam SQL Server 2005

SQL. Autor: Renata Viegas

A linguagem SQL

Escrito por Sex, 14 de Outubro de :12 - Última atualização Seg, 26 de Março de :33

Structured Query Language (SQL) Ambiente Simplificado de um SGBD

Resolvendo objeto-relacional impedance mismatch com hibernate

Listando itens em ComboBox e gravando os dados no Banco de Dados MySQL.

Seja Muito Bem-Vindo! Mas Por Quê? MySQLi Com e Sem Orientação a Objetos

1. Domínio dos Atributos

Introdução ao SQL. Aécio Costa

Bases de Dados 1º semestre

Trabalhando com MySQL: Uma Introdução


Conteúdo O que é?... 4 Histórico... 4 Onde Baixar?... 4 Diferença entre Firebird e o Interbase... 4 Como instalar?... 4 Instalando o Ibexpert...

EXEMPLOS DE COMANDOS NO SQL SERVER

Auditoria de sistemas Deixe que seu banco de dados faça o trabalho por você

Disciplina de Banco de Dados Parte V

Linguagem SQL (Parte I)

JPA Java Persistence API. Prof. Ramon Chiara

Banco de Dados. Maurício Edgar Stivanello

Prof. Omero, pág. 63. Banco de Dados InterBase.

INSTALANDO E CONFIGURANDO O MY SQL

ADMINISTRAÇÃO DE BANCO DE DADOS

SQL Structured Query Language

Modelagem de banco de dados com MySQL Workbench

Comandos DDL. id_modulo = id_m odulo

No Fedora, instalamos os pacotes "mysql" e "mysql-server", usando o yum:

Structured Query Language (SQL) Aula Prática

English Português. By erickalves 25 Julho, :08. Devido à política (#) de segurança. Encontrar Blogs Crie o seu blog de graça Ganhe prêmios

SQL Server Ferramenta de administração. SQL Server Management Studio. 1º passo conectar ao banco de dados 2ª Query (consulta) usando SQL

Gerenciamento de Dados e Informação Fernando Fonseca. Graduação

SQL (Structured Query Language)

Faculdade Pitágoras 16/08/2011. Curso Superior de Tecnologia: Banco de Dados Sistemas para Internet

Faculdade Pitágoras. Curso Superior de Tecnologia: Banco de Dados. Disciplina: Banco de Dados Prof.: Fernando Hadad Zaidan SQL

Banco de Dados I. Aula 12 - Prof. Bruno Moreno 04/10/2011

SQL (Structured Query Language)

MySQL Query Browser. Professor Victor Sotero SGD

Linguagem de Consulta - SQL

LINGUAGEM SQL. SQL Server 2008 Comandos iniciais

SQL (Structured Query Language)

CREATE TABLE AUTOR ( cod_autor int not null primary key, nome_autor varchar (60) )

O elefante ilustrado

AULA 2 INTERAÇÃO COM O BANCO DE DADOS

Etc & Tal. Volume 2 - Número 1 - Abril 2009 SBC HORIZONTES 44

Define o campo ID com chave primaria com gerator de auto incremento ALTER TABLE CONTATO ADD CONSTRAINT PK_CONTATO PRIMARY KEY (ID);

SQL (STRUCTUREDQUERY LANGUAGE)

RELACIONAMENTOS ENTRE OS OBJETOS NO FRAMEWORK HIBERNATE Elio Lovisi Filho 1 Ronney Moreira de Castro 2 RESUMO

TRANSAÇÕES. Considerando que estes comandos fazem parte de uma TRANSAÇÃO (veremos como indicar isso):

Gerenciamento de um Sistema de

Introdução à Banco de Dados. Nathalia Sautchuk Patrício

Transcrição:

Migrations for Java EVOLUINDO SEU BANCO DE MANEIRA INCREMENTAL Rafael Ponte QCon SP 2013

EM 2005 EU SÓ QUERIA SABER DE FRAMEWORKS

ANALISTA DE SISTEMAS NA EQUIPE

I HIBERNATE

I HIBERNATE

persistence.xml <?xml version="1.0" encoding="utf- 8"?> <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"> <persistence- unit name="issuetracker"> <properties> <!--... --> <property name="hibernate.show_sql" value="true" /> <property name="hibernate.format_sql" value="true" /> <property name="hibernate.hbm2ddl.auto" value="update" /> </properties> </persistence- unit> </persistence>

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

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

I HIBERNATE

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

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

I HIBERNATE

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

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

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

ϟ I HIBERNATE

SEMPRE PODE PIORAR

SEMPRE PODE PIORAR MUDE O NOME DA COLUNA

SEMPRE PODE PIORAR MUDE O TIPO DA COLUNA

SEMPRE PODE PIORAR ADICIONE UMA COLUNA NOT-NULL

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

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

ϟ I HIBERNATE

APRENDI: GERAR SCHEMA COM HIBERNATE SOMENTE NO INICIO DO PROJETO

CORRIGINDO O BANCO NA MÃO

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

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

ALGO ESTAVA ERRADO, EVOLUIR O BANCO ERA CARO

Migrations for Java EVOLUINDO SEU BANCO DE MANEIRA INCREMENTAL

@rponte

Príncipe do Oceano

Fortaleza - Terra do Sol

Como você evolui sua APP?

Como você evolui seu BANCO?

gerencia mudanças Como você evolui seu BANCO?

PREPARA UM HUGE_SCRIPT.SQL E APLICA MANUALMENTE?

DEIXA NA MÃO DO DBA?

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

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

OU GERA COM HIBERNATE?

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

CADA SOLUÇÃO TEM VANTAGENS E DESVANTAGENS

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

A COMUNIDADE RUBYONRAILS APRENDEU DESDE O COMEÇO

SIMPLES E EFICAZ: MIGRATIONS

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

Java ferramentas para todos os gostos

TODAS SEGUEM O MESMO CONCEITO

RESUMINDO EM 4 PASSOS

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

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

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

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

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

2 APLICA O SCRIPT NO BANCO [rponte] ~/myblog/scripts $ migrate up - env=production - env=homolog - env=dev - env=test

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

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 +- - - - +- - - - - - - - - - - - - - - - - - - - - +

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

Java ferramentas para todos os gostos

Java ferramentas para todos os gostos flyway mybatis liquibase

FLYWAY LIQUIBASE MYBATIS MIGRATIONS

FLYWAY LIQUIBASE MYBATIS MIGRATIONS

Flyway

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

FLYWAY LIQUIBASE MYBATIS MIGRATIONS

Liquibase

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

FLYWAY LIQUIBASE MYBATIS MIGRATIONS

MyBatis Schema Migrations

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

APESAR DE TANTAS OPÇÕES HOJE EM DIA

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

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

WINDOWS, LINUX E MACOSX ADOTAMOS O MYBATIS MIGRATIONS

PODEMOS FACILITAR E FOI O QUE FIZEMOS ANT SCRIPT

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

PODEMOS FACILITAR E FOI O QUE MARCELO FEZ GRADLE PLUGIN

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

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

MyBatis Migrations MAVEN

MyBatis Migrations MAVEN ANT

MyBatis Migrations MAVEN ANT GRADLE

FLYWAY LIQUIBASE MYBATIS MIGRATIONS

FLYWAY LIQUIBASE QUAL ESCOLHER? MYBATIS MIGRATIONS

MIGRATIONS

MIGRATIONS EVOLUÇÃO = SUSTENTÁVEL DO BANCO

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

MELHORE O PROCESSO

EQUIPE RESPONSÁVEL PELO BANCO

COLOQUE AS MIGRATIONS NO CONTROLE DE VERSÃO

- BANCO DE DADOS COMPARTILHADO - NAO USE EM DESENVOLVIMENTO

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

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

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

AUTOMATIZE O MÁXIMO QUE PUDER

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

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

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

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

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

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

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

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

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

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

GRANDES MUDANÇAS PEQUENAS MIGRATIONS

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

SEMPRE PODE PIORAR

APP BANCO

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

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

EVOLUIR O BANCO NESSE CENÁRIO É CARO

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

CONCLUINDO

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

TRABALHE JUNTAMENTE COM O DBA

ESTUDE, EXPERIMENTE E ESCOLHA UMA MIGRATIONS TOOL

Rafael Ponte rponte@triadworks.com.br