Tudd Intuíció, előadás tranzakció
Abstract: Ebben a fejezetben részletesen elemezzük a lényege az „ügylet” fogalmak, megtanulják, hogyan kell dolgozni InterBase nyújt tranzakciós megismerkedett több változata építészet, megvizsgáljuk a szintek tranzakció izolációs. Egy gyakorlati példa, hozzon létre egy alkalmazás fut párhuzamosan két ügylet.
Az egész természetesen nem csak azt, hogy ezt a kifejezést. A téma a „tranzakciók” a InterBase nem könnyű, de nagyon meg kell érteni. Ez az előadás fordítják az elmélet tranzakciót. és azok gyakorlati alkalmazása a kérelmeket.
In. „Bevezetés a kliens-szerver adatbázisa InterBase” már említettük, hogy az ügylet - ez a lekérdezés csomagot, amely következetesen változásokat okoz az adatbázisban, és akár fogadható el, ha az összes változtatást megerősítik bejegyzéseket, vagy elutasítják, ha legalább egy sikertelen. Lekérdezések tartalmazhat szereplők SELECT / INSERT / UPDATE / DELETE. és lehet egy ilyen, mint egy lekérdezés keretében egyetlen tranzakció. és rengeteg kérelmet. Azonban a „tranzakció” sokkal mélyebb, mint ez a rövid meghatározás.
Tranzakciók indult a szerver oldalon, és csak akkor indul el a megrendeléseket a kliens alkalmazás. Kerekítés a munkát ők is a megrendelések a kliens alkalmazás, és a sikeres befejezése után a tranzakció megerősíti, és ha ez nem sikerül - elutasítja. A kiváltó vagy eljárások okoznak kezdetét a tranzakció nem lehetséges.
Tranzakciót. Valójában ez egy olyan mechanizmust, amely lehetővé teszi, hogy több akció az adatbázisban, mint egyetlen logikai egységet, amely úgy az adatbázist egy egységes állapotból a másikba. Vagy nem fizeti, ha az ügylet elutasították.
Mi illusztrálja ezt a klasszikus példája a pénzátutalás a bank egyik számláról a másikra.
Tegyük fel, hogy az adatbázisunkban nélkül fut tranzakciót. és meg kell termelni az említett fordítást. Akkor folytassa kétféleképpen:
- Kezdetben, eltávolítjuk a pénzt az egyik fiókból, majd adjunk hozzá egy másik fiókot.
- Kezdetben hozzá pénzt egy másik számlára, majd távolítsa el őket az első számla.
Tegyük fel, hogy a közepén ez a művelet volt egy hiba: állítsa le az adatbázis szerver. például. Az első esetben a pénz elvész - mentek az egyik fiókból, de nem éri el a másikat. A második esetben, a pénz „többszörösen” - jelenik meg a második sorban, de ugyanakkor és az is marad a földön. És valóban, és a másik esetben, az adatbázis integritását megsértés történik - az adatok megbízhatatlan lesz.
Azonban minden SQL -server adatbázisok dolgozni tranzakciókat. Azt is mondják, hogy az összes adatbázis-változások zajlanak keretében egy vagy több ügylet. InterBase sem kivétel. Sőt, InterBase egy sokkal rugalmasabb eszköz tranzakció kezelésére. mint sok más SQL -server. Ha volt egy hiba, amit ha pénz átutalására a tranzakció nem erősítették meg, és az adatbázis marad ugyanabban az állapotban - integritását és megbízhatóságát az adatbázis nem törött.
Atomicity (Atomicity)
Atomicity azt jelenti, hogy a tranzakció egy egységnyi munkát az adatbázisban. számos adatbázis módosítás történhet egy ügyletet. azonban a tranzakció ható elve „mindent vagy semmit”. Ha a tranzakció megerősíti (véglegesítés) megerősítette, hogy minden változás történt a kontextusban. Amikor elutasítják (húzza vissza, Visszagörgetés), elutasítják, és minden megváltozik. Meghibásodása esetén a rendszer helyreállítása, kiküszöböli a tranzakció. nem volt ideje befejezni.
Konzisztencia (konzisztencia)
A megállapodás értelmében, ez úgy értendő, hogy az adatbázis integritását nem lehet törött, bár volt egy tranzakció megerősíti. vagy elutasítják. Ennek eredményeképpen a tranzakciós adatbázis megy egy koherens és következetes állapotból a másikba. Ha a tranzakciót elutasítja, az adatbázis változások történnek.
A szerver oldalon a következetesség megfeleljen a korlátozások csekket. hivatkozási egység megszorításokat és a kiváltó okok. Software azonban gondosan meg kell tervezni mechanizmusai üzleti logikát.
Isolation (Isolation)
Az adatbázis lehet végrehajtani több tranzakció egyszerre. Előfordul, hogy két vagy több ügyletre próbálnak változtatni ugyanazt a rekordot. Annak biztosítása érdekében, az adatok integritását, tranzakciókat végeznek egymástól elkülönítve. Azt mondhatjuk, hogy minden tranzakció fut a saját példányát (változat) az adatok. Több szint tranzakciós elszigetelten. mi következik, majd beszélünk részletesebben.
Ellenállás (tartósság)
Ha a tranzakció sikeres, a változások annak összefüggésében kell stabilnak és állandónak, függetlenül a hibákat más tranzakciók. hiba vagy hardver összeomlik a szerver. Más szóval, az eredmények a sikeresen befejezett tranzakció fizikailag az adatbázisban tárolt.
Implicit és explicit ügylet kezdetén
Minden cselekvés az adatbázisban, elkötelezett a kliens alkalmazás, belül történik (összefüggésben) tranzakciót. A korábbi előadások példákban már csatlakozni az adatbázis kliens alkalmazások, minden nélkül bármilyen tranzakció. Ez azonban nem jelenti azt, hogy nem. Csak egy tranzakció elindul hallgatólagosan automatikusan. És megállapított paraméterek Delphi „alapértelmezés”. Súlyos adatbázis-alkalmazások, ez elfogadhatatlan, mert ez vezethet számos konfliktus.
Tranzakciós lehet kezdeni, és világosan. Szabványos hozzáférési mechanizmusok használjuk elsősorban, InterBase Express (IBX). Az alkalmazás jelen kell lennie legalább. IBTransaction egyik összetevője. Ezzel a komponens, akkor egyértelműen meg kell határozni a paramétereket a tranzakciót. ellenőrizzék a start, a megerősítés vagy vissza tranzakciót. Ezt használja a következő módszerek a bab:
- StartTransaction - Start a tranzakciót.
- Commit - Igazolás az ügylet, majd bezárja.
- CommitRetaining - Igazolás az ügylet lezárása nélkül is.
- Rollback - visszagörgetéssel tranzakciót követő lezárás.
- RollbackRetaining - Roll vissza a tranzakció lezárása nélkül is.
Azonban a Data Access Components hallgatólagosan indítani a tranzakciót. így StartTransaction általában hiányzik. De megerősítés vagy rollback ellenőrzés, általában egy próbát ... kivéve blokk a kliens alkalmazás:
Ebben a példában, ha a tranzakció sikeres volt, az adatokat általában tárolja. Abban az esetben, bármilyen hibaüzenet jelenik meg, és a tranzakciót visszaállítják.
Mivel a tranzakció fut
Az adatbázisban van egy speciális terület, az úgynevezett TIP (Transaction Inventory oldal - Készlettranzakciók oldal). Elején a tranzakciót. ez egy azonosító van rendelve (TID Transaction ID.) - leltári szám, amely tárolja a TIP. Ebben az esetben a legutolsó tranzakció lesz a legnagyobb azonosító. A TIP. amellett, hogy a számok, hogy elkezd egy tranzakciót. menti és annak állapotát, amely lehet aktív (a munka), elkötelezett (megerősítve), Hengerelt Back (Törölve rollback), és bizonytalanságban (bizonytalan).
Ez az úgynevezett aktív tranzakció. amely jelenleg folyamatban van.
Megerősítette a tranzakciót nevezik. Ez sikeresen befejezte munkáját, mint általában, a commit parancs.
Törölt hívás tranzakciót. ami nem sikerült. Ugyanakkor visszaszorítására intézkedéseket tett neki, mint általában, RollBack csapat.
Bizonytalan tranzakció (Limbo) nevezzük tranzakciót. ami működik egyszerre két vagy több adatbázis. Miután ezt a tranzakciót. InterBase teszi a kétfázisú véglegesítés. annak biztosítása, hogy változások lesznek akár az összes adatbázist. vagy bármelyik. Ebben az esetben a visszaigazolást adatbázisokban kap egy időben. Ha ebben az időben a rendszer meghibásodása, akkor lehet, hogy a nyilvános adatbázisban változtatásokat hajtottak végre, és mi nem. Ebben az esetben a tranzakció lép határozatlan állapotot, amikor a szerver nem tudja-e vagy sem, hogy erősítse meg a tranzakció. vagy visszaállíthatja.
Minden egyes tranzakció. A munka megkezdése megteremti a saját verzióját a táblázat bejegyzéseit, ami működik. felvétel változata - egy példányát a nyilvántartást, amely akkor keletkezik, amikor a tranzakció megpróbálja megváltoztatni azt. Így minden táblázat bejegyzés potenciálisan több verzió, mindegyik saját tranzakciós működő változat ezt a rekordot. Ha a tranzakció módosítja az adatokat, ez megváltoztatja a saját verzióját a rekord, és nem az eredeti. Továbbá, a tranzakció erősítse, vagy törölni.
Ha a tranzakció megerősítette, InterBase megpróbálja megjelölni az előző eredeti felvételt. távoli és változata a sikeres tranzakcióról - mint az eredeti. Amikor InterBase elmenti a módosításokat, az új bejegyzés kerül, és a tranzakció azonosítóját. amelynek eredményeképpen ezek a változtatások (minden sorban a táblázat tartalmazza az azonosító az ügylet, amely létrehozta azt).
Ha a tranzakció sikertelen, az eredeti felvétel és az eredeti marad.
Ha az ügyletet csak olvas egy lemezt. nélkül próbál változtatni, ez nem hoz létre saját verzióját neki.
Azonban előfordulhat, hogy a konfliktusok és a tranzakciókat. Tegyük fel, hogy megkezdte a tranzakciós T1. Ő hozta létre egy változata a felvételt, és megváltoztatta az adatokat. Ebben az időben, hogy elindította a konkurens tranzakció T2, és létrehozott egy változata azonos rekordot. Mivel T1 még nincs vége, T2 nem lehetett látni az adatokat elején a változtatások, amelyeket a T1, ezért megalkotta saját verzióját a régi eredeti. T1 most véglegesíti a Commit. Mit kell a InterBase. Ha ez lesz az T1 változata a felvétel, mint az eredeti, de a régi rekordot. mennyire távol, a T2 változat lesz hamis információkat! InterBase intézkedések ebben az esetben függ a paramétereket a tranzakciót. az alábbi fogunk beszélni részletesebben.
Amennyiben egy tranzakció eltávolítja néhány sztringhez, az fizikailag nem törlődik az adatbázisból. de csak jelölve távoli, miközben a szoba és távolítsa el a tranzakciót. Ha a tranzakció sikertelen, az igazi sor eltávolítása nem történik meg, mivel nem volt megerősítés.
Így azt mondta, hogy egy multi-változat InterBase építészet (MGA - Multi Generation Architecture). Ez a felépítés lehetővé teszi, hogy megszervezzék a munkát az adatbázisban, így a felhasználók nem blokkolják az olvasók, akik írni. Ezen túlmenően, a rendszerhiba esetén, az InterBase gyorsan talpra köszönhetően pontosan MGA. By the way, ez az első InterBase SQL -server, amely támogatja a multi-változat építészet.
Együtt az előnyeit egy ilyen megközelítés, az adatbázisban az idő gyűlnek az adatok „szemét”. Minden egyes tranzakció. próbál változtatni az adatokat, létrehozza a saját verzióját a vonalak, és ha nem gondoskodunk a időben történő eltávolítása idősebb, már használhatatlan változat az adatbázis hamarosan csak eltömődött törmeléket.
De hogyan lehet eltávolítani a szemetet? Eltávolítható a változata a tranzakciót. amely végül sikeresen vagy sikertelenül? Nem, ha ez a változat jelenleg használatban van más tranzakciók. Később fogunk beszélni szintje tranzakció izolációs. míg csak azt mondják, hogy bizonyos ügyletek láthatjuk a változásokat, amelyeket mások még nem erősítették meg az aktív tranzakciók.
Tegyük fel, hogy megkezdte a tranzakciós T1. Ez a tranzakció létrehozott egy változata a rekord, és módosíthatja. Később kezdődött a tranzakció T2, ami úgy van beállítva, akkor az összes változás, nem is megerősítette. Azt kérte, hogy ugyanazt a rekordot, és mert azt akarja, hogy a legújabb változások, ez biztosítja változata a tranzakció T1. Majd T1 befejezte munkáját, de T2 még dolgozik annak változata a felvétel, ezért ez a verzió nem lehet törölni.
Az InterBase jelen mechanizmus eltávolítja a régi változat, azaz az új tranzakciókat. Új tranzakciót. kérő bejegyzést. Olvastam az összes változat ezt a felvételt. Ebben az esetben ellenőrizzük, arról, hogy a tranzakció. Legyen ez a verzió törlésre kerül (RollBack) vagy bizonyítottan (véglegesítés). Ha a tranzakció törölték, így ez a verzió - törmeléket el kell távolítani. Ha több változatban készült lezajlott tranzakció. időpontját kell tekinteni a változat a legnagyobb tranzakció azonosító. Más változatok minősülnek elavult is vonatkoznak eltávolítását.
Így a fiatal Transaction megtisztítása az adatbázis törmelék maradt régebbi tranzakciókat. De nem tiszta minden a régi változat a sorban, de csak az a változat a bejegyzés (vagy feljegyzések), amelyhez fordulhatnak.
Mivel a szerver futhat több tranzakció egyszerre. Van terminológia definíciói ezen ügyletek esetében.
- Aktív tranzakció - az ügylet, amely már elkezdődött, de még nem fejeződött be.
- Az érdekelt ügyletet - tranzakció versenyben a jelenlegi tranzakciót.
- A legrégebbi aktív tranzakció - ez egy olyan aktív tranzakció. amely korábban megkezdődött, mint mások. Különben is, ez az aktív tranzakciók a legalacsonyabb azonosítót.
- A legrégebbi érintett ügylet - ez egy ilyen érdekelt tranzakciót. amely korábban megkezdődött, mint mások. Különben is, ez vonatkozik a legalacsonyabb tranzakciós azonosítót.
Ebben az összefüggésben a szemétgyűjtő volt a legidősebb aktív tranzakciót. Mivel a felvétel készült verziók fiatalabb tranzakciót. ő nem látja, akkor eltávolítja a törmelék maradt más régebbi tranzakciókat. Ha a tranzakció befejeződik a munka, az állapota „a legidősebb aktív” elviszi a tranzakciót. Így a tranzakció továbbított egy másik szolgálati szemétgyűjtő.