Schemamigrering

Inom mjukvaruteknik avser en schemamigrering (även databasmigrering , databasändringshantering ) hanteringen av versionskontrollerade , inkrementella och reversibla ändringar av relationsdatabasscheman . En schemamigrering utförs på en databas närhelst det är nödvändigt att uppdatera eller återställa databasens schema till någon nyare eller äldre version.

Migreringar utförs programmatiskt med hjälp av ett schemamigreringsverktyg . När det anropas med en specificerad önskad schemaversion, automatiserar verktyget den successiva tillämpningen eller återföringen av en lämplig sekvens av schemaändringar tills det förs till önskat tillstånd.

De flesta schemamigreringsverktyg syftar till att minimera effekten av schemaändringar på befintliga data i databasen. Trots detta bevarandet av data i allmänhet inte garanterat eftersom schemaändringar som radering av en databaskolumn kan förstöra data (dvs alla värden som lagras under den kolumnen för alla rader i den tabellen raderas). Istället hjälper verktygen till att bevara betydelsen av datan eller att omorganisera befintliga data för att möta nya krav. Eftersom betydelsen av data ofta inte kan kodas, kräver konfigurationen av verktygen vanligtvis manuellt ingripande.

Risker och fördelar

Schemamigrering gör det möjligt att åtgärda misstag och anpassa data när kraven ändras. De är en viktig del av mjukvaruutvecklingen, särskilt i agila miljöer (se nedan).

Att tillämpa en schemamigrering på en produktionsdatabas är alltid en risk. Utvecklings- och testdatabaser tenderar att vara mindre och renare. Datan i dem förstås bättre eller, om allt annat misslyckas, är mängden data tillräckligt liten för en människa att bearbeta. Produktionsdatabaser är vanligtvis enorma, gamla och fulla av överraskningar. Överraskningarna kan komma från många källor:

  • Korrupta data som skrevs av gamla versioner av programvaran och som inte rensades ordentligt
  • Underförstådda beroenden i data som ingen längre känner till
  • Människor som direkt ändrar databasen utan att använda de avsedda verktygen
  • Buggar i schemamigreringsverktygen
  • Misstag i antaganden om hur data ska migreras

Av dessa skäl kräver migreringsprocessen en hög nivå av disciplin, noggranna tester och en sund backupstrategi.

Schemamigreringar kan ta lång tid att slutföra och för system som fungerar 24/7 är det viktigt att kunna göra databasmigreringar utan driftstopp . Vanligtvis görs det med hjälp av funktionsflaggor och kontinuerlig leverans .

Schemamigrering i agil mjukvaruutveckling

När utvecklare utvecklar programvaruapplikationer som backas upp av en databas, utvecklar utvecklare vanligtvis applikationskällkoden tillsammans med ett föränderligt databasschema. Koden har vanligtvis stela förväntningar på vilka kolumner, tabeller och begränsningar som finns i databasschemat när den behöver interagera med ett, så endast versionen av databasschemat mot vilken koden utvecklades anses vara fullt kompatibel med den versionen av källkoden .

I programvarutestning , medan utvecklare kan håna förekomsten av ett kompatibelt databassystem för enhetstestning , är det vanligt att utvecklare testar sin applikation mot en lokal eller fjärrtestdatabas på högre nivåer än detta (t.ex. integrationstestning eller systemtestning ). schematiskt kompatibel med versionen av källkoden som testas. I avancerade applikationer kan själva migreringen bli föremål för migreringstestning .

Med schemamigreringsteknik behöver datamodeller inte längre designas helt i förväg, och de är mer kapabla att anpassas till förändrade projektkrav under hela mjukvaruutvecklingens livscykel .

Relation till revisionskontrollsystem

Team av mjukvaruutvecklare använder vanligtvis versionskontrollsystem för att hantera och samarbeta kring ändringar som görs i versioner av källkoden. Olika utvecklare kan utvecklas på divergerande, relativt äldre eller nyare grenar av samma källkod för att göra ändringar och tillägg under utvecklingen.

Om vi ​​antar att programvaran under utveckling interagerar med en databas, kan varje version av källkoden associeras med minst ett databasschema som den är kompatibel med.

Enligt god praxis för mjukvarutestning kan schemamigreringar utföras på testdatabaser för att säkerställa att deras schema är kompatibelt med källkoden. För att effektivisera denna process anropas vanligtvis ett schemamigreringsverktyg som en del av en automatiserad mjukvarubyggnad som en förutsättning för den automatiska testfasen .

Schemamigreringsverktyg kan sägas lösa versionsproblem för databasscheman precis som versionskontrollsystem löser versionsproblem för källkod. I praktiken förlitar sig många schemamigreringsverktyg på en textrepresentation av schemaändringar (som filer som innehåller SQL-satser) så att versionshistoriken för schemaändringar effektivt kan lagras tillsammans med programkällkoden i VCS. Detta tillvägagångssätt säkerställer att informationen som krävs för att återställa ett kompatibelt databasschema för en viss kodgren kan återställas från själva källträdet. En annan fördel med detta tillvägagångssätt är hanteringen av samtidiga motstridiga schemaändringar; utvecklare kan helt enkelt använda sina vanliga textbaserade konfliktlösningsverktyg för att förena skillnader.

Relation till schemautveckling

Schemamigreringsverktyg kan ses som en möjlighet att spåra historiken för ett schema under utveckling.

Fördelar

Utvecklare behöver inte längre ta bort hela testdatabasen för att skapa en ny testdatabas från början (t.ex. genom att använda skript för att skapa scheman från DDL-genereringsverktyg). Vidare, om generering av testdata kostar mycket tid, kan utvecklare undvika att återskapa testdata för små, oförstörande ändringar av schemat.

Länkar