Megosztás:


Szerializálhatóság

Ideális esetben a tranzakcióknak szerializálhatónak kell lenniük. A tranzakciók szerializálhatónak minősülnek, ha az egyidejűleg futó tranzakciók eredményei megegyeznek a sorozatos futtatásuk eredményeivel – azaz egymás után. Nem fontos, hogy melyik tranzakció hajtja végre először, csak az, hogy az eredmény nem tükrözi a tranzakciók keveredését.

Tegyük fel például, hogy az A tranzakció megszorozza az adatértékeket 2-vel, a B tranzakció pedig 1-et ad hozzá az adatértékekhez. Tegyük fel, hogy két adatérték van: 0 és 10. Ha ezeket a tranzakciókat egymás után futtatják, az új értékek 1 és 21 lesznek, ha az A tranzakció fut először, vagy 2 és 22, ha a B tranzakció fut először. De mi a teendő, ha a két tranzakció futtatásának sorrendje minden értéknél eltérő? Ha az A tranzakció az első értéken fut először, a B tranzakció pedig a második értéken fut először, az új értékek 1 és 22. Ha ez a sorrend megfordítva van, az új értékek 2 és 21. A tranzakciók szerializálhatók, ha az 1, 21 és 2, 22 az egyetlen lehetséges eredmény. A tranzakciók nem szerializálhatók, ha 1, 22 vagy 2, 21 lehetséges eredmény.

Miért kívánatos a szerializálhatóság? Más szóval miért fontos, hogy úgy jelenjen meg, hogy egy tranzakció befejeződik a következő tranzakció megkezdése előtt? Fontolja meg az alábbi problémát. Egy értékesítő egyszerre adja meg a rendeléseket, amikor egy írnok számlákat küld. Tegyük fel, hogy az értékesítő beír egy rendelést az X vállalattól, de nem véglegesíti azt; az értékesítő még mindig az X vállalat képviselőjével beszél. A jegyző kéri az összes nyitott rendelés listáját, és felderíti az X vállalat megrendelését, és számlát küld nekik. Most az X vállalat képviselője úgy dönt, hogy módosítani szeretné a rendelését, így az értékesítő módosítja azt a tranzakció véglegesítése előtt. Az X vállalat helytelen számlát kap.

Ha az értékesítő és a jegyző tranzakciói szerializálhatóak lennének, ez a probléma soha nem történt volna meg. Vagy az értékesítő tranzakciója a jegyző tranzakciójának megkezdése előtt fejeződött volna be, ebben az esetben a jegyző a megfelelő számlát küldte volna ki, vagy a jegyző tranzakciója az értékesítő tranzakciójának megkezdése előtt fejeződött volna be, ebben az esetben a jegyző egyáltalán nem küldött volna számlát az X vállalatnak.