Slide 1

Slide 1 text

@DerekB_WI 1 You Version Your Code,
 Why Not Your Database? Presented By: Derek Binkley

Slide 2

Slide 2 text

@DerekB_WI 2 Database Administrator Data was king Changes Strictly Managed Data Access set in RDBMS

Slide 3

Slide 3 text

@DerekB_WI 3

Slide 4

Slide 4 text

@DerekB_WI 4 Developers Take Over Sprints instead of waterfalls Rebellion Against Relational Data

Slide 5

Slide 5 text

@DerekB_WI 5 Faster Changing Data MySQL, Postgres, etc. Non Relational Databases

Slide 6

Slide 6 text

@DerekB_WI 6

Slide 7

Slide 7 text

@DerekB_WI 7 Relational Data Still Important

Slide 8

Slide 8 text

@DerekB_WI 8 Version Control Tools Managing Change

Slide 9

Slide 9 text

@DerekB_WI 9 CI/CD Continuous Integration and Deployments Increase Reliability

Slide 10

Slide 10 text

@DerekB_WI 10 Manually Changing Data Structures Roadblock to CI/CD

Slide 11

Slide 11 text

@DerekB_WI 11 NPM Packages such as db-migrate available for Node Doctrine PHP based database tools, includes migrations LARAVEL Migrations built into PHP framework PHINX PHP Any framework FLYWAY Java, Maven, Gradle LIQUIBASE Java DATABASE VERSIONING

Slide 12

Slide 12 text

@DerekB_WI 12 Change Set Define multiple changes XML Changelog

Slide 13

Slide 13 text

@DerekB_WI 13 Prerequisites Snake Yaml https://bitbucket.org/asomov/snakeyaml/src/default/ YAML Changelog

Slide 14

Slide 14 text

@DerekB_WI 14 Prerequisites Snake Yaml https://bitbucket.org/asomov/snakeyaml/src/default/ JSON Changelog

Slide 15

Slide 15 text

@DerekB_WI 15 Create Table

Slide 16

Slide 16 text

@DerekB_WI 16 Alter Table

Slide 17

Slide 17 text

@DerekB_WI 17 Add an Index

Slide 18

Slide 18 text

@DerekB_WI 18 Add a Foreign Key

Slide 19

Slide 19 text

@DerekB_WI 19 liquibase.properties

Slide 20

Slide 20 text

@DerekB_WI 20 Apply the Changes

Slide 21

Slide 21 text

@DerekB_WI 21 Is This Any Better than just SQL?

Slide 22

Slide 22 text

@DerekB_WI 22 Liquibase Tracks Change Sets

Slide 23

Slide 23 text

@DerekB_WI 23 Instant Setup Code, plus database from git Database Defined Your migrations completely define your database. Really? Can it capture everything for us?

Slide 24

Slide 24 text

@DerekB_WI 24 1. Generate Full Change Log

Slide 25

Slide 25 text

@DerekB_WI 25 2. Setup Data

Slide 26

Slide 26 text

@DerekB_WI 26 3. Combine Changes

Slide 27

Slide 27 text

@DerekB_WI 27 Check Out and Build . . .

Slide 28

Slide 28 text

@DerekB_WI 28 Code Changes We may have modified the database Keep Track of DDL? Over the course of a feature build you may not have kept an accurate change file

Slide 29

Slide 29 text

@DerekB_WI 29 Diffs to the rescue

Slide 30

Slide 30 text

@DerekB_WI 30 Diff Changelog

Slide 31

Slide 31 text

@DerekB_WI 31 Clear History of Changes

Slide 32

Slide 32 text

@DerekB_WI 32 Demo Time

Slide 33

Slide 33 text

@DerekB_WI 33 Rolling Back

Slide 34

Slide 34 text

@DerekB_WI 34 Prevent Automatic Rollback

Slide 35

Slide 35 text

@DerekB_WI 35 Rollback to Tag

Slide 36

Slide 36 text

@DerekB_WI 36 Generating SQL Alternative to Liquibase making changes for you.

Slide 37

Slide 37 text

@DerekB_WI 37 Generating SQL

Slide 38

Slide 38 text

@DerekB_WI 38 AWS Maven Ant Spring Liquibase can integrate with common build tools or frameworks Workflow Integration

Slide 39

Slide 39 text

@DerekB_WI 39 Direct Access Deployment Server can contact Database Deployment Server Deployment could be running directly from deployment machine Deployment Scenario 2 3 1

Slide 40

Slide 40 text

@DerekB_WI 40 Firewall Blocked Deployment Server cannot access database App Server Deployment sends message to application server to run migration Deployment Scenario

Slide 41

Slide 41 text

@DerekB_WI 41 Multiple Deployment Targets

Slide 42

Slide 42 text

@DerekB_WI 42 Other Changes addAutoIncrement addColumn addDefaultValue addForeignKeyConstraint addLookupTable addNotNullConstraint addPrimaryKey addUniqueConstraint alterSequence createIndex createProcedure createSequence createTable createView customChange delete dropAllForeignKeyConstraints dropIndex dropNotNullConstraint dropPrimaryKey dropProcedure dropSequence dropTable dropUniqueConstraint dropView empty executeCommand insert loadData loadUpdateData mergeColumns modifyDataType output renameColumn renameTable renameView setColumnRemarks setTableRemarks sql sqlFile stop tagDatabase update

Slide 43

Slide 43 text

@DerekB_WI 43

Slide 44

Slide 44 text

@DerekB_WI 44 Derek Binkley [email protected] @DerekB_WI Keep In Touch

Slide 45

Slide 45 text

@DerekB_WI 45 https://aws.amazon.com/blogs/devops/database-continuous-integration-and- automated-release-management-workflow-with-aws-and-datical-db/ RESOURCES http://www.liquibase.org/tutorial-using-oracle https://youtu.be/m6uNyezQ-7s - integrate Liquibase and Hibernate https://www.liquibase.org/bestpractices.html https://bitbucket.org/asomov/snakeyaml/src/default/

Slide 46

Slide 46 text

@DerekB_WI 46 Download Slides