SlideShare a Scribd company logo
1 of 29
+ 
Database Change Management* as a service 
* Also known as ‘patching’ or ‘refactoring’
+ 
About me 
(Andrew Solomon) 
Was … 
an academic teaching Perl 
Am now doing … 
 Perl Web Development at Net-A-Porter 
 (learning) Devops at Net-A-Porter 
 Teaching at Geekuni
+ 
Motivation 
Data is inconvenient 
 Next app release coming 
 App has new features 
 Needs different DB structure 
 Can’t just trash and install DB like an app
+ 
Principles 
For safe refactoring 
 Backward compatibility 
 Old and new app versions are ok with the refactored DB 
 DB is versioned 
 You can quickly determine which patches have been applied 
 App won’t be run if the DB is not compatible 
 Write a rollback for every DB change 
http://www.amazon.co.uk/Continuous-Delivery-Deployment- 
Automation-Addison-Wesley/dp/0321601912
+ 
The Net-a-Porter Way 
Old school
+ 
The Net-a-Porter Way 
Old school 
 Put refactor code into My-App’s code base 
 Approach A: Run when installing the My-App RPM 
 Approach B: Run when starting My-App 
 Log the patches run in the database
+ 
The Net-a-Porter Way 
Old school 
 Put refactor.pl into My-App’s code base 
 PROBLEM: A slightly different refactor.pl for each app 
 PROBLEM: refactor.pl has extra CPAN dependencies 
 Approach A: Run when installing the My-App RPM 
 Approach B: Run when starting My-App 
 Log the patches run in the database
+ 
The Net-a-Porter Way 
Old school 
 Put refactor.pl into My-App’s code base 
 PROBLEM: A slightly different refactor.pl for each app 
 PROBLEM: refactor.pl has extra CPAN dependencies 
 Approach A: Run when installing the My-App RPM 
 Approach B: Run when starting My-App 
 PROBLEM: Multiple My-App servers per DB 
 Log the patches run in the database
+ 
The Service Way
+ 
Available Refactoring Tools 
Flyway 
Liquibase 
DB Deploy
+ 
Winner: Liquibase 
Big user base 
Bought by Datical 
Has branching and 
More features than Flyway 
DB Deploy uses Apache ANT
Overview
Liquibase
+ 
Liquibase 
How it works 
Input: 
 An XML file listing SQL files to run 
 Special comments in the SQL files for tagging 
Output: 
 ‘databasechangelog’ tables 
 Which patches have been run 
 ‘databasechangeloglock’ 
 Ensure only one refactoring process!
+ 
Liquibase 
Example XML 
<databaseChangeLog …> 
<include file="1.0.0/000-create_schema.sql” 
relativeToChangelogFile="true"/> 
<include file="1.0.0/010-populate.sql” 
relativeToChangelogFile="true"/> 
<changeSet author="a.solomon" id="tag-1.0.0"> 
<tagDatabase tag="1.0.0"/> 
</changeSet> 
</databaseChangeLog>
+ 
Liquibase 
Example SQL 
--liquibase formatted sql 
--changeset a.solomon:1.0.1-000 
BEGIN; 
CREATE TABLE public.foobar ( 
id INTEGER PRIMARY KEY, 
name TEXT UNIQUE NOT NULL 
); 
ALTER table public.foobar OWNER to magpie; 
--ROLLBACK DROP TABLE public.foobar; 
COMMIT;
+ 
Liquibase 
Example Update 
/usr/bin/liquibase  
--changeLogFile=changeset.xml  
--url="jdbc:postgresql://db1.myapp.com:5432/myapp-db1"  
--username=liquibase –password=foobar update
+ 
Liquibase 
Example Rollback 
/usr/bin/liquibase  
--changeLogFile=changeset.xml  
--url="jdbc:postgresql://db1.myapp.com:5432/myapp-db1"  
--username=liquibase –password=foobar rollback 1.0.0
+ 
Liquibase 
Example databasechangelog 
author | filename | md5sum | tag 
a.solomon | 1.0.1/000-create_schema.sql | 7:49c8 | 1.0.1
+ 
Liquibase::Git 
What is it? 
 Perl module and script (soon on CPAN?) 
 A perl script 
 Clones git repo of the app 
 Looks in a directory of patches 
 Calls liquibase
Liquibase::Git
+ 
Liquibase::Git 
Example 
$ liquibase-git --username liquibase  
--password foobar  
--db mydb-db1  
--hostname db1.myapp.com  
--git-repo https://github.com/nap/myapp.git  
--git-changeset-dir db/db1  
--git-identifier master  
--db-type postgresql  
--changeset-file changeset.xml
+ 
NAP::Liquibase 
Getting the Puppet to help 
Most of Liquibase::Git’s parameters are retrieved from the Puppet 
DB 
Just reads a new file from My-App – the list of DBs to refactor 
# in the puppet hieradata 
$ cat myapp.com.yaml 
liquibase: 
databases: 
- db: 'myapp-db1' 
- db: 'myapp-db2’ 
# ask mco for myapp’s dbhost 
$ nap-liquibase --db-host db1.myapp.com  
--app-git-repo https:://github.com/nap/myapp.git  
--app-git-identifier master
NAP::Liquibase
Jenkins Deploy-oid 
mco ping … -F system_db=liquibase
+ 
Appendix 
… managing DBs outside the Puppet estate 
Cases where the box is being managed differently with puppet… 
Jenkins Continuous Integration Test Server 
Developer’s Box 
 Option 1: Emulate Liquibase on an empty DB – 5 lines 
 Option 2: Call liquibase-git to update a DB dump
+ 
Conclusion 
Don’t write new DB refactoring 
code for each app 
Don’t assume you’ll only have one 
app server per DB 
Don’t deploy DB refactoring code 
on the app’s host 
Treat it as a 
service
+ 
But wait!!! There’s more… 
 Ilmari told me about it 
 It’s a Perl project of David E. 
Wheeler / theory 
 Based on sane principles: 
http://sqitch.org/ 
Sqitch is to Liquibase 
Is what 
Git is to CVS 
 The switch to sqitch will be almost 
invisible at the architecture level 
 Only difference is that the developers 
get LOCAL application of the patches 
on the dev box with a simple 
command-line interface
+ 
Questions? 
… or grab me at the pub.

More Related Content

What's hot

使用 Liquibase 發展資料庫結構
使用 Liquibase 發展資料庫結構使用 Liquibase 發展資料庫結構
使用 Liquibase 發展資料庫結構Steven Wang
 
Successful DB migrations with Liquibase
 Successful DB migrations with Liquibase Successful DB migrations with Liquibase
Successful DB migrations with LiquibaseIllia Seleznov
 
MySQL InnoDB Cluster - A complete High Availability solution for MySQL
MySQL InnoDB Cluster - A complete High Availability solution for MySQLMySQL InnoDB Cluster - A complete High Availability solution for MySQL
MySQL InnoDB Cluster - A complete High Availability solution for MySQLOlivier DASINI
 
Database Migrations with Gradle and Liquibase
Database Migrations with Gradle and LiquibaseDatabase Migrations with Gradle and Liquibase
Database Migrations with Gradle and LiquibaseDan Stine
 
Apache Iceberg: An Architectural Look Under the Covers
Apache Iceberg: An Architectural Look Under the CoversApache Iceberg: An Architectural Look Under the Covers
Apache Iceberg: An Architectural Look Under the CoversScyllaDB
 
Apache Iceberg Presentation for the St. Louis Big Data IDEA
Apache Iceberg Presentation for the St. Louis Big Data IDEAApache Iceberg Presentation for the St. Louis Big Data IDEA
Apache Iceberg Presentation for the St. Louis Big Data IDEAAdam Doyle
 
Upgrade from MySQL 5.7 to MySQL 8.0
Upgrade from MySQL 5.7 to MySQL 8.0Upgrade from MySQL 5.7 to MySQL 8.0
Upgrade from MySQL 5.7 to MySQL 8.0Olivier DASINI
 
Getting Started with Databricks SQL Analytics
Getting Started with Databricks SQL AnalyticsGetting Started with Databricks SQL Analytics
Getting Started with Databricks SQL AnalyticsDatabricks
 
Centralised logging with ELK stack
Centralised logging with ELK stackCentralised logging with ELK stack
Centralised logging with ELK stackSimon Hanmer
 
Building Your Data Warehouse with Amazon Redshift
Building Your Data Warehouse with Amazon RedshiftBuilding Your Data Warehouse with Amazon Redshift
Building Your Data Warehouse with Amazon RedshiftAmazon Web Services
 
Practical Memory Tuning for PostgreSQL
Practical Memory Tuning for PostgreSQLPractical Memory Tuning for PostgreSQL
Practical Memory Tuning for PostgreSQLGrant McAlister
 
CockroachDB: Architecture of a Geo-Distributed SQL Database
CockroachDB: Architecture of a Geo-Distributed SQL DatabaseCockroachDB: Architecture of a Geo-Distributed SQL Database
CockroachDB: Architecture of a Geo-Distributed SQL DatabaseC4Media
 
Oracle RAC 19c and Later - Best Practices #OOWLON
Oracle RAC 19c and Later - Best Practices #OOWLONOracle RAC 19c and Later - Best Practices #OOWLON
Oracle RAC 19c and Later - Best Practices #OOWLONMarkus Michalewicz
 
Github - Git Training Slides: Foundations
Github - Git Training Slides: FoundationsGithub - Git Training Slides: Foundations
Github - Git Training Slides: FoundationsLee Hanxue
 
Top 10 Mistakes When Migrating From Oracle to PostgreSQL
Top 10 Mistakes When Migrating From Oracle to PostgreSQLTop 10 Mistakes When Migrating From Oracle to PostgreSQL
Top 10 Mistakes When Migrating From Oracle to PostgreSQLJim Mlodgenski
 

What's hot (20)

Database versioning with liquibase
Database versioning with liquibaseDatabase versioning with liquibase
Database versioning with liquibase
 
使用 Liquibase 發展資料庫結構
使用 Liquibase 發展資料庫結構使用 Liquibase 發展資料庫結構
使用 Liquibase 發展資料庫結構
 
Successful DB migrations with Liquibase
 Successful DB migrations with Liquibase Successful DB migrations with Liquibase
Successful DB migrations with Liquibase
 
MySQL InnoDB Cluster - A complete High Availability solution for MySQL
MySQL InnoDB Cluster - A complete High Availability solution for MySQLMySQL InnoDB Cluster - A complete High Availability solution for MySQL
MySQL InnoDB Cluster - A complete High Availability solution for MySQL
 
Database Migrations with Gradle and Liquibase
Database Migrations with Gradle and LiquibaseDatabase Migrations with Gradle and Liquibase
Database Migrations with Gradle and Liquibase
 
Apache Iceberg: An Architectural Look Under the Covers
Apache Iceberg: An Architectural Look Under the CoversApache Iceberg: An Architectural Look Under the Covers
Apache Iceberg: An Architectural Look Under the Covers
 
Apache Iceberg Presentation for the St. Louis Big Data IDEA
Apache Iceberg Presentation for the St. Louis Big Data IDEAApache Iceberg Presentation for the St. Louis Big Data IDEA
Apache Iceberg Presentation for the St. Louis Big Data IDEA
 
Upgrade from MySQL 5.7 to MySQL 8.0
Upgrade from MySQL 5.7 to MySQL 8.0Upgrade from MySQL 5.7 to MySQL 8.0
Upgrade from MySQL 5.7 to MySQL 8.0
 
Liquibase
LiquibaseLiquibase
Liquibase
 
Getting Started with Databricks SQL Analytics
Getting Started with Databricks SQL AnalyticsGetting Started with Databricks SQL Analytics
Getting Started with Databricks SQL Analytics
 
Centralised logging with ELK stack
Centralised logging with ELK stackCentralised logging with ELK stack
Centralised logging with ELK stack
 
Hadoop Overview kdd2011
Hadoop Overview kdd2011Hadoop Overview kdd2011
Hadoop Overview kdd2011
 
Building Your Data Warehouse with Amazon Redshift
Building Your Data Warehouse with Amazon RedshiftBuilding Your Data Warehouse with Amazon Redshift
Building Your Data Warehouse with Amazon Redshift
 
Big Data in Azure
Big Data in AzureBig Data in Azure
Big Data in Azure
 
Practical Memory Tuning for PostgreSQL
Practical Memory Tuning for PostgreSQLPractical Memory Tuning for PostgreSQL
Practical Memory Tuning for PostgreSQL
 
Elk
Elk Elk
Elk
 
CockroachDB: Architecture of a Geo-Distributed SQL Database
CockroachDB: Architecture of a Geo-Distributed SQL DatabaseCockroachDB: Architecture of a Geo-Distributed SQL Database
CockroachDB: Architecture of a Geo-Distributed SQL Database
 
Oracle RAC 19c and Later - Best Practices #OOWLON
Oracle RAC 19c and Later - Best Practices #OOWLONOracle RAC 19c and Later - Best Practices #OOWLON
Oracle RAC 19c and Later - Best Practices #OOWLON
 
Github - Git Training Slides: Foundations
Github - Git Training Slides: FoundationsGithub - Git Training Slides: Foundations
Github - Git Training Slides: Foundations
 
Top 10 Mistakes When Migrating From Oracle to PostgreSQL
Top 10 Mistakes When Migrating From Oracle to PostgreSQLTop 10 Mistakes When Migrating From Oracle to PostgreSQL
Top 10 Mistakes When Migrating From Oracle to PostgreSQL
 

Viewers also liked

Puppet & Perforce: Versioning Everything for Deployments
Puppet & Perforce: Versioning Everything for DeploymentsPuppet & Perforce: Versioning Everything for Deployments
Puppet & Perforce: Versioning Everything for DeploymentsPerforce
 
Database Change Management
Database Change ManagementDatabase Change Management
Database Change ManagementDominik Hirt
 
Liquibase få kontroll på dina databasförändringar
Liquibase   få kontroll på dina databasförändringarLiquibase   få kontroll på dina databasförändringar
Liquibase få kontroll på dina databasförändringarSqueed
 
Continuous Web Performance Monitoring with Jenkins
Continuous Web Performance Monitoring with JenkinsContinuous Web Performance Monitoring with Jenkins
Continuous Web Performance Monitoring with JenkinsMichael Kröll
 
Handling Database Deployments
Handling Database DeploymentsHandling Database Deployments
Handling Database DeploymentsMike Willbanks
 
Database Refactoring With Liquibase
Database Refactoring With LiquibaseDatabase Refactoring With Liquibase
Database Refactoring With LiquibaseTim Berglund
 
Agile Database Development with Liquibase
Agile Database Development with LiquibaseAgile Database Development with Liquibase
Agile Database Development with LiquibaseTim Berglund
 

Viewers also liked (8)

Puppet & Perforce: Versioning Everything for Deployments
Puppet & Perforce: Versioning Everything for DeploymentsPuppet & Perforce: Versioning Everything for Deployments
Puppet & Perforce: Versioning Everything for Deployments
 
Database Change Management
Database Change ManagementDatabase Change Management
Database Change Management
 
Liquibase få kontroll på dina databasförändringar
Liquibase   få kontroll på dina databasförändringarLiquibase   få kontroll på dina databasförändringar
Liquibase få kontroll på dina databasförändringar
 
Mini Training Flyway
Mini Training FlywayMini Training Flyway
Mini Training Flyway
 
Continuous Web Performance Monitoring with Jenkins
Continuous Web Performance Monitoring with JenkinsContinuous Web Performance Monitoring with Jenkins
Continuous Web Performance Monitoring with Jenkins
 
Handling Database Deployments
Handling Database DeploymentsHandling Database Deployments
Handling Database Deployments
 
Database Refactoring With Liquibase
Database Refactoring With LiquibaseDatabase Refactoring With Liquibase
Database Refactoring With Liquibase
 
Agile Database Development with Liquibase
Agile Database Development with LiquibaseAgile Database Development with Liquibase
Agile Database Development with Liquibase
 

Similar to Database Change Management as a Service

FlywayDB Migration with Spring Boot
FlywayDB Migration with Spring BootFlywayDB Migration with Spring Boot
FlywayDB Migration with Spring BootInexture Solutions
 
Patterns and Tools for Database Versioning, Migration, Data Loading and Test ...
Patterns and Tools for Database Versioning, Migration, Data Loading and Test ...Patterns and Tools for Database Versioning, Migration, Data Loading and Test ...
Patterns and Tools for Database Versioning, Migration, Data Loading and Test ...Alan Pinstein
 
Evolutionary Database Design
Evolutionary Database DesignEvolutionary Database Design
Evolutionary Database DesignAndrei Solntsev
 
DevOps Hackathon: Session 3 - Test Driven Infrastructure
DevOps Hackathon: Session 3 - Test Driven InfrastructureDevOps Hackathon: Session 3 - Test Driven Infrastructure
DevOps Hackathon: Session 3 - Test Driven InfrastructureAntons Kranga
 
Liquibase - Open Source version control for your database
Liquibase - Open Source version control for your databaseLiquibase - Open Source version control for your database
Liquibase - Open Source version control for your databaseBlaine Carter
 
Liquibase – a time machine for your data
Liquibase – a time machine for your dataLiquibase – a time machine for your data
Liquibase – a time machine for your dataNeev Technologies
 
Migrating to SharePoint 2013 - Business and Technical Perspective
Migrating to SharePoint 2013 - Business and Technical PerspectiveMigrating to SharePoint 2013 - Business and Technical Perspective
Migrating to SharePoint 2013 - Business and Technical PerspectiveJohn Calvert
 
Ready, Set, Upgrade!
Ready, Set, Upgrade!Ready, Set, Upgrade!
Ready, Set, Upgrade!Cory Peters
 
Intro to Github Actions @likecoin
Intro to Github Actions @likecoinIntro to Github Actions @likecoin
Intro to Github Actions @likecoinWilliam Chong
 
Agile Database Modeling with Grails - Preview of GORM 1.4 - SF Grails Meetup ...
Agile Database Modeling with Grails - Preview of GORM 1.4 - SF Grails Meetup ...Agile Database Modeling with Grails - Preview of GORM 1.4 - SF Grails Meetup ...
Agile Database Modeling with Grails - Preview of GORM 1.4 - SF Grails Meetup ...Philip Stehlik
 
Going Serverless with Azure Functions in .NET
Going Serverless with Azure Functions in .NETGoing Serverless with Azure Functions in .NET
Going Serverless with Azure Functions in .NETJeremy Likness
 
Architecting the Future: Abstractions and Metadata - BSidesKC
Architecting the Future: Abstractions and Metadata - BSidesKCArchitecting the Future: Abstractions and Metadata - BSidesKC
Architecting the Future: Abstractions and Metadata - BSidesKCDaniel Barker
 
Power Shell and Sharepoint 2013
Power Shell and Sharepoint 2013Power Shell and Sharepoint 2013
Power Shell and Sharepoint 2013Mohan Arumugam
 
CISOA Conference 2020 Banner 9 Development
CISOA Conference 2020 Banner 9 DevelopmentCISOA Conference 2020 Banner 9 Development
CISOA Conference 2020 Banner 9 DevelopmentBrad Rippe
 
Code First with Serverless Azure Functions
Code First with Serverless Azure FunctionsCode First with Serverless Azure Functions
Code First with Serverless Azure FunctionsJeremy Likness
 
PHP North-East - Automated Deployment
PHP North-East - Automated DeploymentPHP North-East - Automated Deployment
PHP North-East - Automated DeploymentMichael Peacock
 

Similar to Database Change Management as a Service (20)

BPMS1
BPMS1BPMS1
BPMS1
 
BPMS1
BPMS1BPMS1
BPMS1
 
FlywayDB Migration with Spring Boot
FlywayDB Migration with Spring BootFlywayDB Migration with Spring Boot
FlywayDB Migration with Spring Boot
 
Patterns and Tools for Database Versioning, Migration, Data Loading and Test ...
Patterns and Tools for Database Versioning, Migration, Data Loading and Test ...Patterns and Tools for Database Versioning, Migration, Data Loading and Test ...
Patterns and Tools for Database Versioning, Migration, Data Loading and Test ...
 
Evolutionary Database Design
Evolutionary Database DesignEvolutionary Database Design
Evolutionary Database Design
 
DevOps Hackathon: Session 3 - Test Driven Infrastructure
DevOps Hackathon: Session 3 - Test Driven InfrastructureDevOps Hackathon: Session 3 - Test Driven Infrastructure
DevOps Hackathon: Session 3 - Test Driven Infrastructure
 
Iac d.damyanov 4.pptx
Iac d.damyanov 4.pptxIac d.damyanov 4.pptx
Iac d.damyanov 4.pptx
 
Liquibase - Open Source version control for your database
Liquibase - Open Source version control for your databaseLiquibase - Open Source version control for your database
Liquibase - Open Source version control for your database
 
Liquibase – a time machine for your data
Liquibase – a time machine for your dataLiquibase – a time machine for your data
Liquibase – a time machine for your data
 
Migrating to SharePoint 2013 - Business and Technical Perspective
Migrating to SharePoint 2013 - Business and Technical PerspectiveMigrating to SharePoint 2013 - Business and Technical Perspective
Migrating to SharePoint 2013 - Business and Technical Perspective
 
RoR guide_p1
RoR guide_p1RoR guide_p1
RoR guide_p1
 
Ready, Set, Upgrade!
Ready, Set, Upgrade!Ready, Set, Upgrade!
Ready, Set, Upgrade!
 
Intro to Github Actions @likecoin
Intro to Github Actions @likecoinIntro to Github Actions @likecoin
Intro to Github Actions @likecoin
 
Agile Database Modeling with Grails - Preview of GORM 1.4 - SF Grails Meetup ...
Agile Database Modeling with Grails - Preview of GORM 1.4 - SF Grails Meetup ...Agile Database Modeling with Grails - Preview of GORM 1.4 - SF Grails Meetup ...
Agile Database Modeling with Grails - Preview of GORM 1.4 - SF Grails Meetup ...
 
Going Serverless with Azure Functions in .NET
Going Serverless with Azure Functions in .NETGoing Serverless with Azure Functions in .NET
Going Serverless with Azure Functions in .NET
 
Architecting the Future: Abstractions and Metadata - BSidesKC
Architecting the Future: Abstractions and Metadata - BSidesKCArchitecting the Future: Abstractions and Metadata - BSidesKC
Architecting the Future: Abstractions and Metadata - BSidesKC
 
Power Shell and Sharepoint 2013
Power Shell and Sharepoint 2013Power Shell and Sharepoint 2013
Power Shell and Sharepoint 2013
 
CISOA Conference 2020 Banner 9 Development
CISOA Conference 2020 Banner 9 DevelopmentCISOA Conference 2020 Banner 9 Development
CISOA Conference 2020 Banner 9 Development
 
Code First with Serverless Azure Functions
Code First with Serverless Azure FunctionsCode First with Serverless Azure Functions
Code First with Serverless Azure Functions
 
PHP North-East - Automated Deployment
PHP North-East - Automated DeploymentPHP North-East - Automated Deployment
PHP North-East - Automated Deployment
 

Recently uploaded

A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGGoogle AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGSujit Pal
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 

Recently uploaded (20)

A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGGoogle AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAG
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 

Database Change Management as a Service

  • 1. + Database Change Management* as a service * Also known as ‘patching’ or ‘refactoring’
  • 2. + About me (Andrew Solomon) Was … an academic teaching Perl Am now doing …  Perl Web Development at Net-A-Porter  (learning) Devops at Net-A-Porter  Teaching at Geekuni
  • 3. + Motivation Data is inconvenient  Next app release coming  App has new features  Needs different DB structure  Can’t just trash and install DB like an app
  • 4. + Principles For safe refactoring  Backward compatibility  Old and new app versions are ok with the refactored DB  DB is versioned  You can quickly determine which patches have been applied  App won’t be run if the DB is not compatible  Write a rollback for every DB change http://www.amazon.co.uk/Continuous-Delivery-Deployment- Automation-Addison-Wesley/dp/0321601912
  • 5. + The Net-a-Porter Way Old school
  • 6. + The Net-a-Porter Way Old school  Put refactor code into My-App’s code base  Approach A: Run when installing the My-App RPM  Approach B: Run when starting My-App  Log the patches run in the database
  • 7. + The Net-a-Porter Way Old school  Put refactor.pl into My-App’s code base  PROBLEM: A slightly different refactor.pl for each app  PROBLEM: refactor.pl has extra CPAN dependencies  Approach A: Run when installing the My-App RPM  Approach B: Run when starting My-App  Log the patches run in the database
  • 8. + The Net-a-Porter Way Old school  Put refactor.pl into My-App’s code base  PROBLEM: A slightly different refactor.pl for each app  PROBLEM: refactor.pl has extra CPAN dependencies  Approach A: Run when installing the My-App RPM  Approach B: Run when starting My-App  PROBLEM: Multiple My-App servers per DB  Log the patches run in the database
  • 10. + Available Refactoring Tools Flyway Liquibase DB Deploy
  • 11. + Winner: Liquibase Big user base Bought by Datical Has branching and More features than Flyway DB Deploy uses Apache ANT
  • 14. + Liquibase How it works Input:  An XML file listing SQL files to run  Special comments in the SQL files for tagging Output:  ‘databasechangelog’ tables  Which patches have been run  ‘databasechangeloglock’  Ensure only one refactoring process!
  • 15. + Liquibase Example XML <databaseChangeLog …> <include file="1.0.0/000-create_schema.sql” relativeToChangelogFile="true"/> <include file="1.0.0/010-populate.sql” relativeToChangelogFile="true"/> <changeSet author="a.solomon" id="tag-1.0.0"> <tagDatabase tag="1.0.0"/> </changeSet> </databaseChangeLog>
  • 16. + Liquibase Example SQL --liquibase formatted sql --changeset a.solomon:1.0.1-000 BEGIN; CREATE TABLE public.foobar ( id INTEGER PRIMARY KEY, name TEXT UNIQUE NOT NULL ); ALTER table public.foobar OWNER to magpie; --ROLLBACK DROP TABLE public.foobar; COMMIT;
  • 17. + Liquibase Example Update /usr/bin/liquibase --changeLogFile=changeset.xml --url="jdbc:postgresql://db1.myapp.com:5432/myapp-db1" --username=liquibase –password=foobar update
  • 18. + Liquibase Example Rollback /usr/bin/liquibase --changeLogFile=changeset.xml --url="jdbc:postgresql://db1.myapp.com:5432/myapp-db1" --username=liquibase –password=foobar rollback 1.0.0
  • 19. + Liquibase Example databasechangelog author | filename | md5sum | tag a.solomon | 1.0.1/000-create_schema.sql | 7:49c8 | 1.0.1
  • 20. + Liquibase::Git What is it?  Perl module and script (soon on CPAN?)  A perl script  Clones git repo of the app  Looks in a directory of patches  Calls liquibase
  • 22. + Liquibase::Git Example $ liquibase-git --username liquibase --password foobar --db mydb-db1 --hostname db1.myapp.com --git-repo https://github.com/nap/myapp.git --git-changeset-dir db/db1 --git-identifier master --db-type postgresql --changeset-file changeset.xml
  • 23. + NAP::Liquibase Getting the Puppet to help Most of Liquibase::Git’s parameters are retrieved from the Puppet DB Just reads a new file from My-App – the list of DBs to refactor # in the puppet hieradata $ cat myapp.com.yaml liquibase: databases: - db: 'myapp-db1' - db: 'myapp-db2’ # ask mco for myapp’s dbhost $ nap-liquibase --db-host db1.myapp.com --app-git-repo https:://github.com/nap/myapp.git --app-git-identifier master
  • 25. Jenkins Deploy-oid mco ping … -F system_db=liquibase
  • 26. + Appendix … managing DBs outside the Puppet estate Cases where the box is being managed differently with puppet… Jenkins Continuous Integration Test Server Developer’s Box  Option 1: Emulate Liquibase on an empty DB – 5 lines  Option 2: Call liquibase-git to update a DB dump
  • 27. + Conclusion Don’t write new DB refactoring code for each app Don’t assume you’ll only have one app server per DB Don’t deploy DB refactoring code on the app’s host Treat it as a service
  • 28. + But wait!!! There’s more…  Ilmari told me about it  It’s a Perl project of David E. Wheeler / theory  Based on sane principles: http://sqitch.org/ Sqitch is to Liquibase Is what Git is to CVS  The switch to sqitch will be almost invisible at the architecture level  Only difference is that the developers get LOCAL application of the patches on the dev box with a simple command-line interface
  • 29. + Questions? … or grab me at the pub.