Know-how, előadás, tranzakciók

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. Gyakorlati példában olyan alkalmazást hozunk létre, amely egyszerre két tranzakcióval dolgozik.







A tanfolyam során gyakran találkoztunk ezzel a kifejezéssel. A "tranzakciók" témája az InterBase-ban nem egyszerű, de nagyon szükséges a megértéshez. Ez az előadás az ügyletek elméletére vonatkozik. és alkalmazásaik alkalmazásának gyakorlata.

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 egy tranzakció keretében egy ilyen kérelem létezik. és sok kérés. Azonban a „tranzakció” sokkal mélyebb, mint ez a rövid meghatározás.

A tranzakciók a szerver oldalon futnak, és csak az ügyfélalkalmazás sorrendjében indulnak. 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 triggerek vagy eljárások esetén a tranzakció nem indítható el.

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 fordítja le, ha a tranzakciót elutasították.

Hadd magyarázzuk meg ezt a pontot a bank egyik bankszámlájáról a másikra történő átutalásának klasszikus példáján.

Tegyük fel, hogy adatbázisunk tranzakció nélkül fut. és meg kell adnunk az említett fordítást. Itt két különböző módon tudunk fellépni:

  1. Először pénzt vonunk le egy fiókból, majd hozzáadjuk őket egy másik fiókhoz.
  2. Először pénzt adunk egy másik fiókhoz, majd eltávolítjuk őket az első fiókból.

Tegyük fel, hogy a művelet közepén volt valami hiba: az adatbázis-kiszolgáló le volt választva. például. Az első esetben a pénz elveszik - egy fiókkal maradtak, de nem érte el a másikat. A második esetben a pénz "szaporodik" - jelennek meg a második számlán, de ugyanakkor az első helyen is maradnak. És ebben, és egy másik esetben megsérti az adatbázis integritását - az adatok megbízhatatlanok lesznek.

Azonban minden SQL adatbázis-kiszolgáló működik a tranzakciók használatával. Azt is elmondják, hogy az adatbázis minden változása egy vagy több tranzakció keretében fordul elő. Az InterBase sem kivétel. Az InterBase sokkal rugalmasabb eszközökkel rendelkezik a tranzakciók kezeléséhez. mint sok más SQL-kiszolgáló. 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)

Az atomicitás azt jelenti, hogy az ügylet az adatbázisban működő egység. A tranzakció során az adatbázis számos módosítása lehetséges. A tranzakció azonban az "összes vagy semmi" elvvel működik. Ha egy tranzakciót megerősít (Commit), akkor a kontextusában végrehajtott összes adatmódosítás megerősítést nyer. Ha visszautasítja (vissza, vissza), az összes módosítás elutasításra kerül. Kudarc esetén a rendszer visszanyeri a tranzakciók következményeit. nincs ideje befejezni.

Konzisztencia (konzisztencia)

A konzisztencia értendő, hogy az adatbázis integritása nem sérül, függetlenül attól, hogy a tranzakciót megerősítették-e. vagy elutasították. A tranzakció eredményeképpen az adatbázis egy koherens és következetes állapotból a másikba mozog. Ha a tranzakciót elutasítják, az adatbázis nem változik.

A kiszolgáló oldalon az ellenőrzési kényszerek felelősek a következetességért. referenciális integritási korlátok és triggerek. A programozónak azonban gondosan meg kell terveznie az üzleti logika mechanizmusát.

Isolation (Isolation)

Számos tranzakció végezhető egyszerre az adatbázisban. Két vagy több tranzakció megpróbálja ugyanazt a rekordot megváltoztatni. Az adatok integritásának biztosítása érdekében a tranzakciókat egymástól elkülönítve hajtják végre. Elmondhatja, hogy minden tranzakció az adatok másolatával (verziójával) működik. Számos tranzakció-elkülönítési fok van. arról, hogy mi tovább fogunk részletesebben beszélni.

Stabilitás (tartósság)

Ha a tranzakció sikeresen befejeződött, a kontextusban végrehajtott változtatásoknak stabilnak és fenntarthatónak kell lenniük, függetlenül a más tranzakciók hibáitól. hardverhibák vagy kiszolgáló leállítása. Más szavakkal, a sikeresen teljesített tranzakció eredményeit fizikailag az adatbázis tárolja.

A tranzakciók implicit és explicit indítása

Az adatbázisban végrehajtott összes művelet az ügyfélalkalmazásban a tranzakció keretében történik. A korábbi előadások példáiban ügyfélalkalmazásokat csatlakoztattunk az adatbázisba, anélkül, hogy tranzakciókat használnánk. Ez azonban nem jelenti azt, hogy nem. Egyszerűen a tranzakciók implicit módon, automatikusan. És a Delphi által "alapértelmezés szerint" létrehozott paraméterekkel. Komoly adatbázis-alkalmazásoknál ez elfogadhatatlan, mivel számos konfliktushoz vezethet.

A tranzakciót kifejezetten elindíthatja. A szabványos hozzáférési mechanizmusok közül elsősorban az InterBase Express (IBX) használatát alkalmazzuk. A pályázatnak minimálisnak kell lennie. az IBTransaction egyik összetevője. Ezzel az összetevővel kifejezetten megadhatja a tranzakciós paramétereket. szabályozza a tranzakció indítását, megerősítését vagy visszaállítását. Ez a következő összetevő módszerekkel történik:







  • StartTransaction - Indítsa el a tranzakciót.
  • Kötelezettség - A tranzakció megerősítése a későbbi zárással.
  • CommitRetaining - A tranzakció megerősítése bezárása nélkül.
  • Visszafolyás - A tranzakció visszaállítása az azt követő lezárással.
  • RollbackRetaining - A tranzakció visszavonása bezárása nélkül.

Az adatbeviteli összetevők azonban implicit módon futtatják a tranzakciót. ezért a StartTransaction általában kihagyásra kerül. De a tranzakció visszaigazolása vagy visszaállítása rendszerint ellenőrzött ... kivéve az ügyfélalkalmazásban lévő blokkot:

Ebben a példában, ha a tranzakció sikeres volt, az adatokat rendszerint tárolják. Hiba esetén üzenet jelenik meg, és a tranzakció visszahúzódik.

A tranzakció működése

Az adatbázisban van egy speciális terület, az úgynevezett TIP (Transaction Inventory oldal - Készlettranzakciók oldal). Amikor a tranzakció megkezdődik. ez egy azonosító van rendelve (TID Transaction ID.) - leltári szám, amely tárolja a TIP. A legfrissebb tranzakció lesz a legnagyobb azonosítója. TIP-ben. az indított tranzakció számán kívül. 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).

Az aktív tranzakciónak nevezik. amely jelenleg fut.

A tranzakció megerősítve. amely sikeresen befejezte munkáját, általában a Commit paranccsal.

A törölt tranzakció hívásra kerül. amely sikertelenül végződött. Ebben az esetben az általa végrehajtott műveletek visszafordulnak, általában a RollBack paranccsal.

Egy nem definiált tranzakció (Limbo) egy tranzakció. amely két vagy több adatbázissal párhuzamosan működik. Egy ilyen ügylet lezárásakor. Az InterBase elvégzi a Commit kétfázisú visszaigazolását. annak biztosítása, hogy a változások a teljes adatbázisra vonatkoznak. vagy sem. Ebben az esetben egymás után adják meg az adatbázisokban szereplő visszaigazolást. Ha ebben az időben rendszerhiba keletkezik, előfordulhat, hogy valamilyen adatbázis-változás történt, és amelyben nincs. Ebben az esetben a tranzakció meghatározatlan állapotba kerül, amikor a szerver nem tudja, hogy megerősíti-e a tranzakciót. vagy visszahúzás.

Minden tranzakció. megkezdi a munkát, létrehozza a táblák nyilvántartásának saját verzióját, amellyel működik. A rekordverzió egy olyan rekord egy példánya, amely akkor jön létre, amikor a tranzakció megpróbálja módosítani. Így minden táblázatbevitel potenciálisan több verziójú lehet, és minden egyes tranzakció a saját verziójával dolgozik. Ha egy tranzakció adatokat változtat, akkor a változatát a rekord saját verziójában változtatja meg, és nem az eredetiben. Ezután a tranzakció megerősíthető vagy törölhető.

Ha a tranzakciót megerősítette, az InterBase megpróbálja megjelölni az előző eredeti bejegyzést. mint a távoli, és a befejezett tranzakció változata, mint az eredeti. Ha az InterBase megmenti a változásokat, akkor a tranzakcióazonosító is az új bejegyzésbe kerül. amelyek végrehajtották ezeket a változtatásokat (a táblázat bármely sorában megtalálható a létrehozott tranzakció azonosítója).

Ha a tranzakció sikertelen, akkor az eredeti dokumentum eredeti marad.

Ha a tranzakció csak a rekordot olvasja. nem próbálja megváltoztatni, akkor nem hoz létre saját verziót.

Előfordulhat, hogy tranzakciós konfliktusok vannak. Tételezzük fel, hogy a T1 tranzakció megkezdődött. Ő hozta létre a rekord verzióját, és megváltoztatta az adatait. Abban az időben a T2 versenyző tranzakció elindult, és ugyanazon rekord verzióját hozta létre. 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. Most a T1 befejezi a Commit munkáját. Mi az InterBase? Ha a T1 rekord verzióját eredeti, de régi rekordként jelöli meg. mint távoli, akkor a T2 verziója hamis adatok lesznek! Az InterBase műveletek ebben az esetben a tranzakciók paramétereitől függenek. amiről az alábbiakban részletesebben fogunk beszélni.

Ha egy tranzakció töröl egy sort, a sor nem kerül fizikailag eltávolítva az adatbázisból. de csak a távoli, a mentési és a törölt tranzakció számát jelöli meg. Abban az esetben, ha a tranzakció sikertelen, a vonal tényleges törlése nem történt, mert nem történt visszaigazolás.

Így azt mondják, hogy az InterBase többváltozatos architektúrával rendelkezik (MGA - Multi Generation Architecture). Ez az architektúra lehetővé teszi, hogy a munkát az adatbázis segítségével szervezze meg, hogy az olvasó felhasználók ne blokkolják az írókat. Emellett, amikor egy rendszer összeomlik, az InterBase nagyon gyorsan visszaállítható, köszönhetően az MGA-nak. By the way, az InterBase az első olyan SQL-szerver, amely támogatja a többváltozós architektúrát.

E megközelítés előnyeivel együtt idővel "szemetet" gyűjtenek az adatbázisban. Minden tranzakció. megpróbálja megváltoztatni az adatokat, létrehozza a sorok saját verzióját, és ha nem gondoskodik a régi, már felesleges verziók időben történő eltávolításáról, az adatbázis hamarosan csak elakadt.

De hogyan lehet eltávolítani a szemetet? Törölhetem a tranzakció verzióját. amely véget ért, sikeresen vagy sikertelenül? Nem, ha ezt a verziót jelenleg más tranzakciók használják. Később beszélünk a tranzakciók elszigetelési szintjéről. eddig csak azt mondják, hogy egyes tranzakciók láthatják azokat a változásokat, amelyeket mások még nem erősítettek meg aktív tranzakciókkal.

Tételezzük fel, hogy a T1 tranzakció megkezdődött. Ez a tranzakció létrehozta a rekord verzióját, és módosította. Később elkezdődött a T2 tranzakció, amely úgy van beállítva, hogy minden adatmódosítást láthasson, még azokat is, amelyeket nem erősített meg. Ugyanezt a rekordot fordította, és mivel a legfrissebb változásokat szeretné látni, a tranzakció T1 verziójával rendelkezik. Ezután a T1 befejezte a munkáját, de a T2 továbbra is működik a rekord verziójával, ezért ez a verzió nem törölhető.

Az InterBase-nek van mechanizmusa a régi változatok eltávolítására, amelyet új tranzakciók indítanak. Új ügylet. nyilvántartást kér. olvassa el a rekord összes verzióját. Ez ellenőrzi, hogy az ügylet volt-e. a verzió ennek a verziónak a törlését (RollBack) vagy megerősítette (Commit). Ha a tranzakciót törölték, akkor ez a verzió hulladék, amelyet törölni kell. Ha több verzió van megerősített tranzakciókkal. a legnagyobb tranzakciós azonosítóval rendelkező változat relevánsnak tekinthető. A fennmaradó verziók elavultnak minősülnek, és törlésre is kerülnek.

Így a fiatal ügyletek rendezik az adatbázist a régebbi tranzakciókból származó szemetetől. De nem tisztítják az összes régi verziót egymás után, csak azoknak a verzióknak (vagy rekordoknak) a verzióját, amelyeket maguk címeznek.

Mert sok tranzakció egyszerre végrehajtható a kiszolgálón. van egy terminológia ezen tranzakciók meghatározásához.

  • Az aktív tranzakció egy tranzakció, amely elkezdődött, de még nem fejeződött be.
  • A tranzakció egy olyan ügylet, amely verseng a jelenlegi tranzakcióval.
  • A legrégebbi aktív tranzakció ilyen aktív tranzakció. amely mások előtt kezdődött. Vagy ez egy aktív tranzakció a legkisebb azonosítóval.
  • A legrégebbi érdekelt tranzakció olyan érdekes tranzakció. amely mások előtt kezdődött. Vagy ez egy érdekes tranzakció a legkisebb azonosítóval.

Ebben az összefüggésben a legrégebbi aktív ügylet hulladékgyűjtéssel foglalkozik. Mivel a verziók verzióját fiatalabb ügyletek teszik. nem látja, majd eltávolítja a még régebbi tranzakciókból származó szemetet. Amikor az ügylet befejezi munkáját, a "legrégebbi aktív" állapota egy másik tranzakcióhoz vezet. Így a tranzakciók átruházzák egymás felelősségét a szemétgyűjtésre.




Kapcsolódó cikkek