Dela via


Serialiserbarhet

Helst bör transaktioner vara serialiserbara. Transaktioner sägs vara serialiserbara om resultatet av att köra transaktioner samtidigt är samma som resultatet av att köra dem seriellt - det vill säga en efter en. Det är inte viktigt vilken transaktion som körs först, bara att resultatet inte återspeglar någon blandning av transaktionerna.

Anta till exempel att transaktion A multiplicerar datavärden med 2 och transaktion B lägger till 1 i datavärden. Anta nu att det finns två datavärden: 0 och 10. Om dessa transaktioner körs en efter en blir de nya värdena 1 och 21 om transaktion A körs först, eller 2 och 22 om transaktion B körs först. Men vad händer om ordningen där de två transaktionerna körs skiljer sig åt för varje värde? Om transaktion A körs först på det första värdet och transaktion B körs först på det andra värdet är de nya värdena 1 och 22. Om den här ordningen vänds är de nya värdena 2 och 21. Transaktionerna kan serialiseras om 1, 21 och 2, 22 är de enda möjliga resultaten. Transaktionerna kan inte serialiseras om 1, 22 eller 2, 21 är ett möjligt resultat.

Så varför är serialisering önskvärt? Med andra ord, varför är det viktigt att det verkar som om en transaktion slutförs innan nästa transaktion startar? Överväg följande problem. En säljare skriver in beställningar samtidigt som en kontorist skickar ut fakturor. Anta att försäljaren anger en order från företag X men inte checkar in den. försäljaren pratar fortfarande med representanten från företag X. Expediten begär en lista över alla öppna beställningar och identifierar beställningen för företag X och skickar en faktura till dem. Nu bestämmer sig representanten från Företag X för att ändra sin beställning, så säljaren ändrar den innan transaktionen genomförs. Företag X får en felaktig faktura.

Om försäljarens och kontoristens transaktioner var serialiserbara skulle det här problemet aldrig ha inträffat. Antingen skulle säljarens transaktion ha slutförts innan kontoristens transaktion startade, i vilket fall kontoristen skulle ha skickat ut rätt faktura, eller så skulle kontoristens transaktion ha slutförts innan säljarens transaktion startade, i vilket fall kontoristen inte skulle ha skickat en faktura till företag X alls.