SlideShare a Scribd company logo
1 of 36
Download to read offline
<jon@ivt.com.au>



Dealing drugs to Sakila
The problem
Applications are not static.

New versions mean schema changes.

App / schema mismatches are bad.

Schema changes mean pain.


Self-Healing Databases     Jonathan Oxer <jon@ivt.com.au>
Obvious solution



      Update scripts

Self-Healing Databases   Jonathan Oxer <jon@ivt.com.au>
Update scripts



        Run manually

Self-Healing Databases   Jonathan Oxer <jon@ivt.com.au>
Update scripts



Statically defined

Self-Healing Databases   Jonathan Oxer <jon@ivt.com.au>
A better way?

Self-Healing Databases   Jonathan Oxer <jon@ivt.com.au>
Self-
               Healing
              Databases
Self-Healing Databases   Jonathan Oxer <jon@ivt.com.au>
Reasons for change
New tables required.

New columns required.

Alterations to columns.

Alterations to contents of tables.


Self-Healing Databases     Jonathan Oxer <jon@ivt.com.au>
Failure modes
New tables required.
 “Unknown table”
New columns required.
 “ Unknown column”
Alterations to columns.
 ?
Alterations to contents of tables.
 ?

Self-Healing Databases     Jonathan Oxer <jon@ivt.com.au>
Reactive,
                    not
                 proactive
Self-Healing Databases   Jonathan Oxer <jon@ivt.com.au>
Smart error trapping
1. Run queries blindly.
2. Detect failure conditions.
3. Fix them.
4. Profit!
Self-Healing Databases   Jonathan Oxer <jon@ivt.com.au>
But...
...if you don't have a db
abstraction layer you're


                         stuffed!
Self-Healing Databases       Jonathan Oxer <jon@ivt.com.au>
Build, Borrow or Steal


      One central
     query executor
Self-Healing Databases   Jonathan Oxer <jon@ivt.com.au>
MySQL errors
MySQL has built-in error reporting: use it!

In PHP:
  $errno = mysql_errno($link);
  $error = mysql_error($link);

Specify the link or you'll get the value
from the last opened connection, not
the last error from your connection.
Self-Healing Databases     Jonathan Oxer <jon@ivt.com.au>
MySQL errors
Check for specific errors, such as:

  1146: Table doesn't exist
  1054: Unknown column
dev.mysql.com/doc/refman/5.0/en/error-handling.html




Self-Healing Databases            Jonathan Oxer <jon@ivt.com.au>
Missing table
● Store reference schemas in app
● Trap “1146” errors

● Examine error to determine table name

● Load reference schema

● Create table

● Rerun original query

● Return result




The user never even notices a glitch :-)
Self-Healing Databases   Jonathan Oxer <jon@ivt.com.au>
Missing table
Embed reference schemas into your app.

[modulename]/sql/articles.sql:

CREATE TABLE `articles` (
`Serial` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`Title` VARCHAR( 255 ) NOT NULL ,
`Article` TEXT NOT NULL
) ENGINE = MYISAM ;



Self-Healing Databases        Jonathan Oxer <jon@ivt.com.au>
Missing column
● Record schema changes in “alter” file
● Trap “unknown column” errors

● Load and execute alter file

● Rerun original query

● Return result




No harm, no foul.


Self-Healing Databases   Jonathan Oxer <jon@ivt.com.au>
Missing column
Make execution of “alter” file idempotent.

[modulename]/sql/alter.php:

if (!$dbase->field_exists(“news”, “Modified”))
{
    $s = “ALTER TABLE news ADD `Modified` TIMESTAMP
      NOT NULL”;
    $dbase->query($s);
}


Self-Healing Databases          Jonathan Oxer <jon@ivt.com.au>
Missing trigger

   Missing triggers
   are a problem:
      silent death
Self-Healing Databases   Jonathan Oxer <jon@ivt.com.au>
Missing trigger

[modulename]/sql/alter.php:

if (!$dbase->trigger_exists(“UPDATESTOCK”))
{
    $s = “CREATE TRIGGER UPDATESTOCK ...”;
    $dbase->query($s);
}




Self-Healing Databases          Jonathan Oxer <jon@ivt.com.au>
Missing procedure
● Put procedure additions in “alter” file
● Trap “1106”, errors

● Load and execute alter file

● Rerun original query

● Return result




 (Note: trap “1107” and “1108” errors too,
  for handling altered procedures)

Self-Healing Databases     Jonathan Oxer <jon@ivt.com.au>
Missing procedure

[modulename]/sql/alter.php:

if (!$dbase->procedure_exists(“DISCOUNTCALC”))
{
    $s = “CREATE PROCEDURE DISCOUNTCALC ...”;
    $dbase->query($s);
}




Self-Healing Databases         Jonathan Oxer <jon@ivt.com.au>
That's
  not all,
  folks!
Self-Healing Databases   Jonathan Oxer <jon@ivt.com.au>
Problem:

 Multiple module
instances require
 data partitioning
Self-Healing Databases   Jonathan Oxer <jon@ivt.com.au>
Solution:

     Three-tier
   dynamic table
  naming scheme
Self-Healing Databases   Jonathan Oxer <jon@ivt.com.au>
Dynamic table names
1: Module instance
2: Module name
3: Specific table
hotstuff_news_articles
hotstuff_news_comments
Self-Healing Databases   Jonathan Oxer <jon@ivt.com.au>
Benefits
Storage of schema with
module: error handler can
deduce path from table.
Upgrade of tables when you
don't know their name.
Self-Healing Databases   Jonathan Oxer <jon@ivt.com.au>
Schema templates
Placeholders in reference schemas

[modulename]/sql/articles.sql:

CREATE TABLE <articles> (
`Serial` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`Title` VARCHAR( 255 ) NOT NULL ,
`Article` TEXT NOT NULL
) ENGINE = MYISAM ;



Self-Healing Databases        Jonathan Oxer <jon@ivt.com.au>
“Alter” templates
Make table names in “alter” file dynamic
[modulename]/sql/alter.php:
$articles = $instance.'_news_articles';
if (!$dbase->field_exists($articles, “Modified”))
{
     $s = “ALTER TABLE $articles ADD `Modified` TIMESTAMP
      NOT NULL”;
     $dbase->query($s);
}




Self-Healing Databases              Jonathan Oxer <jon@ivt.com.au>
Benefits
Stop caring about:

● App / schema mismatches
● Knowing what tables are called

● Telling users to run upgrade scripts




Self-Healing Databases   Jonathan Oxer <jon@ivt.com.au>
Caveat:
this messes with

      triggers
           and

               procedures
Self-Healing Databases   Jonathan Oxer <jon@ivt.com.au>
Is This A Fairy Tale?




Self-Healing Databases     Jonathan Oxer <jon@ivt.com.au>
Is this a fairy tale?
Technique in production use in the
SiteBuilder web application framework
and modules for more than 7 years:
● 1.2 million lines of PHP
● 149 modules

● 11,779 SQL statements

● 1,247 embedded table schemas



Self-Healing Databases   Jonathan Oxer <jon@ivt.com.au>
Is this a fairy tale?
Deployments include:

Siemens national intranet with over 5,000
dynamically managed tables
Shaver Shop e-commerce system with tens
of thousands of transactions / year
Gift Store Online with over 800k users
Brisbane Airport security credential system
with 10k users / 30k cards
Self-Healing Databases      Jonathan Oxer <jon@ivt.com.au>
Self-healing databases


Thankyou :-)
  These slides: jon.oxer.com.au/talks
   We're hiring: www.ivt.com.au/jobs
Flames: Jonathan Oxer (jon@ivt.com.au)

More Related Content

More from Jonathan Oxer

Self-Healing Databases
Self-Healing DatabasesSelf-Healing Databases
Self-Healing DatabasesJonathan Oxer
 
How To Build A Website And Stay Sane
How To Build A Website And Stay SaneHow To Build A Website And Stay Sane
How To Build A Website And Stay SaneJonathan Oxer
 
Managing Source Code With Subversion
Managing Source Code With SubversionManaging Source Code With Subversion
Managing Source Code With SubversionJonathan Oxer
 
PHP Performance Profiling
PHP Performance ProfilingPHP Performance Profiling
PHP Performance ProfilingJonathan Oxer
 
Compiling kernels the Debian way
Compiling kernels the Debian wayCompiling kernels the Debian way
Compiling kernels the Debian wayJonathan Oxer
 

More from Jonathan Oxer (8)

Introduction to DNS
Introduction to DNSIntroduction to DNS
Introduction to DNS
 
Self-Healing Databases
Self-Healing DatabasesSelf-Healing Databases
Self-Healing Databases
 
How To Build A Website And Stay Sane
How To Build A Website And Stay SaneHow To Build A Website And Stay Sane
How To Build A Website And Stay Sane
 
Managing Source Code With Subversion
Managing Source Code With SubversionManaging Source Code With Subversion
Managing Source Code With Subversion
 
Large Scale PHP
Large Scale PHPLarge Scale PHP
Large Scale PHP
 
PHP On Steroids
PHP On SteroidsPHP On Steroids
PHP On Steroids
 
PHP Performance Profiling
PHP Performance ProfilingPHP Performance Profiling
PHP Performance Profiling
 
Compiling kernels the Debian way
Compiling kernels the Debian wayCompiling kernels the Debian way
Compiling kernels the Debian way
 

Recently uploaded

Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 

Recently uploaded (20)

Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 

Self-healing databases: managing schema updates in the field

  • 2. The problem Applications are not static. New versions mean schema changes. App / schema mismatches are bad. Schema changes mean pain. Self-Healing Databases Jonathan Oxer <jon@ivt.com.au>
  • 3. Obvious solution Update scripts Self-Healing Databases Jonathan Oxer <jon@ivt.com.au>
  • 4. Update scripts Run manually Self-Healing Databases Jonathan Oxer <jon@ivt.com.au>
  • 5. Update scripts Statically defined Self-Healing Databases Jonathan Oxer <jon@ivt.com.au>
  • 6. A better way? Self-Healing Databases Jonathan Oxer <jon@ivt.com.au>
  • 7. Self- Healing Databases Self-Healing Databases Jonathan Oxer <jon@ivt.com.au>
  • 8. Reasons for change New tables required. New columns required. Alterations to columns. Alterations to contents of tables. Self-Healing Databases Jonathan Oxer <jon@ivt.com.au>
  • 9. Failure modes New tables required. “Unknown table” New columns required. “ Unknown column” Alterations to columns. ? Alterations to contents of tables. ? Self-Healing Databases Jonathan Oxer <jon@ivt.com.au>
  • 10. Reactive, not proactive Self-Healing Databases Jonathan Oxer <jon@ivt.com.au>
  • 11. Smart error trapping 1. Run queries blindly. 2. Detect failure conditions. 3. Fix them. 4. Profit! Self-Healing Databases Jonathan Oxer <jon@ivt.com.au>
  • 12. But... ...if you don't have a db abstraction layer you're stuffed! Self-Healing Databases Jonathan Oxer <jon@ivt.com.au>
  • 13. Build, Borrow or Steal One central query executor Self-Healing Databases Jonathan Oxer <jon@ivt.com.au>
  • 14. MySQL errors MySQL has built-in error reporting: use it! In PHP: $errno = mysql_errno($link); $error = mysql_error($link); Specify the link or you'll get the value from the last opened connection, not the last error from your connection. Self-Healing Databases Jonathan Oxer <jon@ivt.com.au>
  • 15. MySQL errors Check for specific errors, such as: 1146: Table doesn't exist 1054: Unknown column dev.mysql.com/doc/refman/5.0/en/error-handling.html Self-Healing Databases Jonathan Oxer <jon@ivt.com.au>
  • 16. Missing table ● Store reference schemas in app ● Trap “1146” errors ● Examine error to determine table name ● Load reference schema ● Create table ● Rerun original query ● Return result The user never even notices a glitch :-) Self-Healing Databases Jonathan Oxer <jon@ivt.com.au>
  • 17. Missing table Embed reference schemas into your app. [modulename]/sql/articles.sql: CREATE TABLE `articles` ( `Serial` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `Title` VARCHAR( 255 ) NOT NULL , `Article` TEXT NOT NULL ) ENGINE = MYISAM ; Self-Healing Databases Jonathan Oxer <jon@ivt.com.au>
  • 18. Missing column ● Record schema changes in “alter” file ● Trap “unknown column” errors ● Load and execute alter file ● Rerun original query ● Return result No harm, no foul. Self-Healing Databases Jonathan Oxer <jon@ivt.com.au>
  • 19. Missing column Make execution of “alter” file idempotent. [modulename]/sql/alter.php: if (!$dbase->field_exists(“news”, “Modified”)) { $s = “ALTER TABLE news ADD `Modified` TIMESTAMP NOT NULL”; $dbase->query($s); } Self-Healing Databases Jonathan Oxer <jon@ivt.com.au>
  • 20. Missing trigger Missing triggers are a problem: silent death Self-Healing Databases Jonathan Oxer <jon@ivt.com.au>
  • 21. Missing trigger [modulename]/sql/alter.php: if (!$dbase->trigger_exists(“UPDATESTOCK”)) { $s = “CREATE TRIGGER UPDATESTOCK ...”; $dbase->query($s); } Self-Healing Databases Jonathan Oxer <jon@ivt.com.au>
  • 22. Missing procedure ● Put procedure additions in “alter” file ● Trap “1106”, errors ● Load and execute alter file ● Rerun original query ● Return result (Note: trap “1107” and “1108” errors too, for handling altered procedures) Self-Healing Databases Jonathan Oxer <jon@ivt.com.au>
  • 23. Missing procedure [modulename]/sql/alter.php: if (!$dbase->procedure_exists(“DISCOUNTCALC”)) { $s = “CREATE PROCEDURE DISCOUNTCALC ...”; $dbase->query($s); } Self-Healing Databases Jonathan Oxer <jon@ivt.com.au>
  • 24. That's not all, folks! Self-Healing Databases Jonathan Oxer <jon@ivt.com.au>
  • 25. Problem: Multiple module instances require data partitioning Self-Healing Databases Jonathan Oxer <jon@ivt.com.au>
  • 26. Solution: Three-tier dynamic table naming scheme Self-Healing Databases Jonathan Oxer <jon@ivt.com.au>
  • 27. Dynamic table names 1: Module instance 2: Module name 3: Specific table hotstuff_news_articles hotstuff_news_comments Self-Healing Databases Jonathan Oxer <jon@ivt.com.au>
  • 28. Benefits Storage of schema with module: error handler can deduce path from table. Upgrade of tables when you don't know their name. Self-Healing Databases Jonathan Oxer <jon@ivt.com.au>
  • 29. Schema templates Placeholders in reference schemas [modulename]/sql/articles.sql: CREATE TABLE <articles> ( `Serial` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `Title` VARCHAR( 255 ) NOT NULL , `Article` TEXT NOT NULL ) ENGINE = MYISAM ; Self-Healing Databases Jonathan Oxer <jon@ivt.com.au>
  • 30. “Alter” templates Make table names in “alter” file dynamic [modulename]/sql/alter.php: $articles = $instance.'_news_articles'; if (!$dbase->field_exists($articles, “Modified”)) { $s = “ALTER TABLE $articles ADD `Modified` TIMESTAMP NOT NULL”; $dbase->query($s); } Self-Healing Databases Jonathan Oxer <jon@ivt.com.au>
  • 31. Benefits Stop caring about: ● App / schema mismatches ● Knowing what tables are called ● Telling users to run upgrade scripts Self-Healing Databases Jonathan Oxer <jon@ivt.com.au>
  • 32. Caveat: this messes with triggers and procedures Self-Healing Databases Jonathan Oxer <jon@ivt.com.au>
  • 33. Is This A Fairy Tale? Self-Healing Databases Jonathan Oxer <jon@ivt.com.au>
  • 34. Is this a fairy tale? Technique in production use in the SiteBuilder web application framework and modules for more than 7 years: ● 1.2 million lines of PHP ● 149 modules ● 11,779 SQL statements ● 1,247 embedded table schemas Self-Healing Databases Jonathan Oxer <jon@ivt.com.au>
  • 35. Is this a fairy tale? Deployments include: Siemens national intranet with over 5,000 dynamically managed tables Shaver Shop e-commerce system with tens of thousands of transactions / year Gift Store Online with over 800k users Brisbane Airport security credential system with 10k users / 30k cards Self-Healing Databases Jonathan Oxer <jon@ivt.com.au>
  • 36. Self-healing databases Thankyou :-) These slides: jon.oxer.com.au/talks We're hiring: www.ivt.com.au/jobs Flames: Jonathan Oxer (jon@ivt.com.au)