Konkurenciavezérlés. Soros és sorba rendezhető ütemezések. Ütemezések
|
|
- Natália Borosné
- 8 évvel ezelőtt
- Látták:
Átírás
1 Konkurenciavezérlés A tranzakciók közötti egymásra hatás az adatbázis-állapot inkonzisztenssé válását okozhatja, még akkor is, amikor a tranzakciók külön-külön megőrzik a konzisztenciát, és rendszerhiba sem történt. Ezért valamiképpen szabályoznunk kell, hogy a különböző tranzakciók egyes lépései milyen sorrendben következzenek egymás után. A lépések szabályozásának feladatát az adatbázis-kezelő rendszer ütemező (scheduler) része végzi. Azt az általános folyamatot, amely biztosítja, hogy a tranzakciók egyidejű végrehajtása során megőrizzék a konzisztenciát, konkurenciavezérlésnek (concurrency control) nevezzük. Amint a tranzakciók az adatbáziselemek olvasását és írását kérik, ezek a kérések az ütemezőhöz kerülnek, amely legtöbbször közvetlenül végrehajtja azokat. Amennyiben a szükséges adatbáziselem nincs a pufferben, először a pufferkezelőt hívja meg. Bizonyos esetekben azonban nem biztonságos azonnal végrehajtani a kéréseket. Az ütemezőnek ekkor késleltetnie kell a kérést, sőt bizonyos esetben abortálnia kell a kérést kiadó tranzakciót. Soros és sorba rendezhető ütemezések A konkurenciavezérlés tanulmányozását azzal kezdjük, hogy megvizsgáljuk, a konkurensen végrehajtott tranzakciók milyen feltételekkel tudják megőrizni az adatbázis-állapot konzisztenciáját. Az alapfeltevésünk az volt, hogy ha minden egyes tranzakciót elkülönítve hajtunk végre (anélkül, hogy más tranzakció konkurensen futna), akkor az adatbázist konzisztens állapotból konzisztens állapotba alakítjuk (korrektség alapelve). A gyakorlatban azonban a tranzakciók általában más tranzakciókkal egyidejűleg futnak, emiatt ez az elv közvetlenül nem használható. Olyan ütemezéseket kell alkalmaznunk, amelyek biztosítják, hogy ugyanazt az eredményt állítják elő, mintha a tranzakciókat egyesével hajtottuk volna végre. Ütemezések Az ütemezés (schedule) egy vagy több tranzakció által végrehajtott lényeges műveletek időrendben vett sorozata. A konkurenciakezelés szempontjából a lényeges olvasási és írási műveletek a központi memória puffereiben történnek, nem pedig a lemezen. Tehát csak a READ és WRITE műveletek sorrendje számít, amikor a konkurenciával foglalkozunk, az INPUT és OUTPUT műveleteket figyelmen kívül hagyjuk. Példa. Tekintsünk két tranzakciót és az adatbázison kifejtett hatásukat, amikor egy meghatározott sorrendben hajtjuk végre a műveleteiket: T 1 T 2 READ(A,t) READ(A,s) t := t+100 s := s*2 WRITE(A,t) WRITE(A,s) 1
2 READ(B,t) READ(B,s) t := t+100 s := s*2 WRITE(B,t) WRITE(B,s) t és s T 1 -nek és T 2 -nek lokális változói, nem adatbáziselemek. Tételezzük fel, hogy az egyetlen konzisztenciamegszorítás az A = B. Mivel T 1 A-hoz és B-hez is hozzáad 100-at, és T 2 A-t és B-t is megszorozza 2-vel, tudjuk, hogy az egyes tranzakciók egymástól elkülönítve futva megőrzik a konzisztenciát. Soros ütemezések Azt mondjuk, hogy egy ütemezés soros (serial schedule), ha benne bármely két T és T tranzakcióra teljesül, hogy ha T-nek van olyan művelete, amely megelőzi T valamelyik műveletét, akkor T összes művelete megelőzi T valamennyi műveletét, azaz az ütemezés úgy épül fel a tranzakciós műveletekből, hogy először az egyik tranzakció összes műveletét tartalmazza, azután egy másik tranzakció összes műveletét stb., miközben nem cseréli fel a műveleteket. Példa. A fenti tranzakcióknak két soros ütemezése van, az egyikben T 1 megelőzi T 2 -t, a másikban T 2 előzi meg T 1 -et. Legyen a kezdeti állapot A = B = 25. Ekkor a két ütemezés a következőképpen alakul: T 1 T 2 A B T 1 T 2 A B READ(A,t) 25 READ(A,s) 25 t := t+100 s := s*2 WRITE(A,t) 125 WRITE(A,s) 50 READ(B,t) 25 READ(B,s) 25 t := t+100 s := s*2 WRITE(B,t) 125 WRITE(B,s) 50 READ(A,s) 125 READ(A,t) 50 s := s*2 t := t+100 WRITE(A,s) 250 WRITE(A,t) 150 READ(B,s) 125 READ(B,t) 50 s := s*2 t := t+100 WRITE(B,s) 250 WRITE(B,t) 150 Láthatjuk, hogy A és B végső értéke különböző a két ütemezésben, de nem is a végeredmény a központi kérdés addig, amíg a konzisztenciát megőrizzük. Általában nem várjuk el, hogy az adatbázis végső állapota független legyen a tranzakciók végrehajtásának sorrendjétől. A soros ütemezést úgy ábrázolhatjuk, hogy a műveleteket a végrehajtásuk sorrendjében felsoroljuk. Mivel a soros ütemezésben a műveletek sorrendje csak magától a tranzakciók sorrendjétől függ, ezért a soros ütemezést elegendő a tranzakciók felsorolásával megadni, például: (T 1, T 2 ), illetve (T 2, T 1 ). Sorba rendezhető ütemezések A tranzakciókra vonatkozó korrektségi elv szerint minden soros ütemezés megőrzi az adatbázis konzisztenciáját. Kérdés, hogy van-e más ütemezés is, amely szintén biztosítja a konzisztencia 2
3 megmaradását. A válasz igen, ahogy azt a következő példa mutatja. Általában azt mondjuk, hogy egy ütemezés sorba rendezhető (serializable schedule), ha ugyanolyan hatással van az adatbázis állapotára, mint valamelyik soros ütemezés, függetlenül attól, hogy mi volt az adatbázis kezdeti állapota. Példa. Tekintsük a fenti két tranzakció következő két ütemezését: T 1 T 2 A B T 1 T 2 A B READ(A,t) 25 READ(A,t) 25 t := t+100 t := t+100 WRITE(A,t) 125 WRITE(A,t) 125 READ(A,s) 125 READ(A,s) 125 s := s*2 s := s*2 WRITE(A,s) 250 WRITE(A,s) 250 READ(B,t) 25 READ(B,s) 25 t := t+100 s := s*2 WRITE(B,t) 125 WRITE(B,s) 50 READ(B,s) 125 READ(B,t) 50 s := s*2 t := t+100 WRITE(B,s) 250 WRITE(B,t) 150 Az első példa egy sorba rendezhető, de nem soros ütemezést ad meg. Ebben az ütemezésben T 2 azután van hatással A-ra, miután T 1 volt, de mielőtt T 1 hatással lenne B-re. Mégis azt látjuk, hogy a két tranzakció hatása megegyezik a (T 1, T 2 ) soros ütemezés hatásával. Ezt könnyű belátni tetszőleges konzisztens kiindulási állapotra: A = B = c-ből kiindulva A-nak is és B-nek is 2(c + 100) lesz az értéke, tehát a konzisztenciát mindig megőrizzük. A második példában szereplő ütemezés viszont nem sorba rendezhető. Itt T 1 dolgozik előbb A-val, viszont T 2 dolgozik előbb B-vel, ennek hatásaként másképpen kell kiszámolnunk A-t és B-t: A := 2(A + 100), B := 2B Az ilyen viselkedést a különböző konkurenciavezérlési technikákkal el kell kerülnünk. A tranzakció szemantikájának hatása A sorbarendezhetőség eldöntéséhez eddig a tranzakciók műveleteinek a sorrendjét néztük meg. Azonban a tranzakciók részletei is számítanak, ahogyan ezt a következő példából láthatjuk: Példa. Tekintsük az alábbi ütemezést, amely csak a T 2 által végrehajtott számításokban különbözik a legutolsó példánktól, mégpedig abban hogy nem 2-vel szorozza meg A-t és B-t, hanem 1-gyel.: T 1 T 2 A B READ(A,t) 25 t := t+100 WRITE(A,t) 125 READ(A,s) 125 s := s*1 WRITE(A,s) 125 READ(B,s) 25 s := s*1 WRITE(B,s) 25 READ(B,t) 25 3
4 t := t+100 WRITE(B,t) 125 A és B értéke az ütemezés végén megegyezik, és könnyen ellenőrizhetjük, hogy a konzisztens kezdeti állapottól függetlenül a végállapot is konzisztens lesz. Valójában az egyetlen végállapot az, amelyet vagy a (T 1, T 2 ) vagy a (T 2, T 1 ) soros ütemezés eredményez. Felmerülhet a kérdés, hogy mi értelme van a T 2 tranzakciónak. Valójában több elfogadható tranzakciót helyettesíthetnénk a helyére, amely A-t és B-t változatlanul hagyná. T 2 például lehetne olyan tranzakció, amely csak kiíratja A-t és B-t. Vagy a felhasználótól kérhet be adatokat, hogy kiszámoljon egy F tényezőt, amivel beszorozza A-t és B-t, és előfordulhat olyan felhasználói input, amelyre F = 1. Sajnos az ütemező számára nem reális a tranzakciós számítások részleteinek figyelembe vétele. Mivel a tranzakciók gyakran tartalmaznak általános célú programozási nyelven írt kódokat éppúgy, mint SQL nyelvű utasításokat, néha nagyon nehéz megválaszolni azokat a kérdéseket, mint például ez a tranzakció A-t egy 1-től különböző értékkel szorozta-e meg. Az ütemezőnek azonban látnia kell a tranzakciók olvasási és írási kéréseit, így tudhatja, hogy az egyes tranzakciók mely adatbáziselemeket olvasták be, és mely elemek változhattak meg. Az ütemező feladatának egyszerűsítésére megszokott a következő feltétel: Bármely A adatbáziselemnek egy T tranzakció olyan értéket ír be, amely az adatbázis-állapottól függ oly módon, hogy ne forduljon elő aritmetikai egybeesés. Más szóval: ha T tudna A-ra olyan hatással lenni, hogy az adatbázis-állapot inkonzisztenssé váljon, akkor T ezt meg is teszi. Ezt a feltevést később pontosítjuk, amikor a sorbarendezhetőség biztosítására adunk meg feltételeket. A tranzakciók és az ütemezések jelölése Ha elfogadjuk, hogy egy tranzakció által végrehajtott pontos számítások tetszőlegesek lehetnek, akkor nem szükséges a helyi számítási lépések részleteit néznünk. Csak a tranzakciók által végrehajtott olvasások és írások számítanak, így a tranzakciókat és az ütemezéseket rövidebben jelölhetjük. Ekkor r T (X) és w T (X) tranzakcióműveletek, és azt jelentik, hogy a T tranzakció olvassa, illetve írja az X adatbáziselemet. Továbbá, mivel a tranzakcióinkat általában T 1, T 2, -vel fogjuk jelölni, ezért megállapodunk abban, hogy r i (X) és w i (X) ugyanazt jelöli, mint r Ti (X), illetve w Ti (X). Példa. A fenti példákban szereplő tranzakciók az alábbi módon írhatók fel: T 1 : r 1 (A); w 1 (A); r 1 (B); w 1 (B); T 2 : r 2 (A); w 2 (A); r 2 (B); w 2 (B); 4
5 Nem említettük sehol a t és s lokális változókat, és nem jelöltük azt sem, hogy mi történt a beolvasás után A-val és B-vel. Mindezt úgy értelmezzük, hogy az adatbáziselemek megváltozásában a legrosszabbat fogjuk feltételezni. Másik példaként nézzük meg a T 1 és T 2 tranzakciók korábban felírt sorba rendezhető ütemezését: r 1 (A); w 1 (A); r 2 (A); w 2 (A); r 1 (B); w 1 (B); r 2 (B); w 2 (B); Pontosítva a jelölést: 1. Egy tranzakció műveletét r i (X) vagy w i (X) formában fejezzük ki, amely azt jelenti, hogy a T i tranzakció olvassa, illetve írja az X adatbáziselemet. 2. Egy T i tranzakció az i indexű műveletekből álló sorozat. 3. A T tranzakcióhalmaz egy S ütemezése olyan műveletek sorozata, amelyben minden T halmazbeli T i tranzakcióra teljesül, hogy T i műveletei ugyanabban a sorrendben fordulnak elő S-ben, mint ahogy magában a T i definíciójában szerepeltek. Azt mondjuk, hogy S az őt alkotó tranzakciók műveleteinek átlapolása (interleaving). Konfliktus-sorbarendezhetőség Most egy olyan elégséges feltételt adunk meg, amely biztosítja egy ütemezés sorbarendezhetőségét. A forgalomban lévő rendszerek ütemezői a tranzakciók sorbarendezhetőségére általában ezt az erősebb feltételt biztosítják, amelyet konfliktus-sorbarendezhetőségnek nevezünk. Ez a konfliktus fogalmon alapul: A konfliktus (conflict) vagy konfliktuspár olyan egymást követő műveletpár az ütemezésben, amelynek ha a sorrendjét felcseréljük, akkor legalább az egyik tranzakció viselkedése megváltozhat. Konfliktusok Vegyük észre, hogy a legtöbb műveletpár nincs konfliktusban a fenti értelemben. Legyen T i és T j két különböző tranzakció (i j). 1. r i (X); r j (Y) sohasem konfliktus, még akkor sem, ha X = Y, mivel egyik lépés sem változtatja meg az értékeket. 2. r i (X); w j (Y) nincs konfliktusban, feltéve, hogy X Y, mivel T j írhatja Y-t, mielőtt T i beolvasta X-et, X értéke ettől ugyanis nem változik. Annak sincs hatása T j -re, hogy T i olvassa X-et, ugyanis ez nincs hatással arra, hogy milyen értéket ír T j Y-ba. 3. w i (X); r j (Y) nincs konfliktusban, ha X Y, ugyanazért, amiért a 2. pontban. 4. w i (X); w j (Y) sincs konfliktusban, ha X Y. 5
6 Másrészt három esetben nem cserélhetjük fel a műveletek sorrendjét: a) Ugyanannak a tranzakciónak két művelete, például r i (X); w i (Y) konfliktus, mivel egyetlen tranzakción belül a műveletek sorrendje rögzített, és az adatbázis-kezelő rendszer ezt a sorrendet nem rendezheti át. b) Különböző tranzakciók ugyanarra az adatbáziselemre való írása, például w i (X); w j (X) konfliktus, mivel X értéke az marad, amit T j számolt ki. Ha felcseréljük a sorrendjüket, akkor pedig X-nek a T i által kiszámolt értéke marad meg. Az a feltevésünk, hogy nincs egybeesés, azt adja, hogy a T i és a T j által kiírt értékek lehetnek különbözőek, és ezért az adatbázis valamelyik kezdeti állapotára különbözni fognak. c) Különböző tranzakciók által ugyanazon adatbáziselem olvasása és írása is konfliktus, azaz r i (X); w j (X) és w i (X); r j (X) is konfliktus. Ha átvisszük w j (X)-et r i (X) elé, akkor a T i által olvasott X- beli érték az lesz, amit a T j kiírt, amiről pedig feltételeztük, hogy nem szükségképpen egyezik meg X korábbi értékével. Tehát r i (X) és w j (X) sorrendjének cseréje befolyásolja, hogy T i milyen értéket olvas X-ből, ez pedig befolyásolja T i működését. Levonhatjuk a következtetést, hogy különböző tranzakciók bármely két műveletének sorrendje felcserélhető, hacsak nem: 1. ugyanarra az adatbáziselemre vonatkoznak, és 2. legalább az egyik művelet írás. Ezt az elvet kiterjesztve tetszőleges ütemezést véve annyi nem konfliktusos cserét készíthetünk, amennyit csak kívánunk, abból a célból, hogy az ütemezést soros ütemezéssé alakítsuk át. Ha ezt meg tudjuk tenni, akkor az eredeti ütemezés sorba rendezhető volt, ugyanis az adatbázis állapotára való hatása változatlan marad minden nemkonfliktusos cserével. Azt mondjuk, hogy két ütemezés konfliktusekvivalens (conflict-equivalent), ha szomszédos műveletek nemkonfliktusos cseréinek sorozatával az egyiket átalakíthatjuk a másikká. Azt mondjuk, hogy egy ütemezés konfliktus-sorbarendezhető (conflict-serializable schedule), ha konfliktusekvivalens valamely soros ütemezéssel. A konfliktus-sorbarendezhetőség elégséges feltétele a sorbarendezhetőségnek, vagyis egy konfliktus-sorbarendezhető ütemezés sorba rendezhető ütemezés is egyben. Azonban a konfliktussorbarendezhetőség nem szükséges ahhoz, hogy egy ütemezés sorba rendezhető legyen, mégis általában ezt a feltételt ellenőrzik a forgalomban lévő rendszerek ütemezői, amikor a sorbarendezhetőséget kell biztosítaniuk. Példa. Legyen az ütemezés a következő: 6
7 r 1 (A); w 1 (A); r 2 (A); w 2 (A); r 1 (B); w 1 (B); r 2 (B); w 2 (B); Azt állítjuk, hogy ez az ütemezés konfliktus-sorbarendezhető. A következő cserékkel ez az ütemezés átalakítható a (T 1, T 2 ) soros ütemezéssé, ahol az összes T 1 -beli művelet megelőzi az összes T 2 -beli műveletet: r 1 (A); w 1 (A); r 2 (A); w 2 (A); r 1 (B); w 1 (B); r 2 (B); w 2 (B); r 1 (A); w 1 (A); r 2 (A); r 1 (B); w 2 (A); w 1 (B); r 2 (B); w 2 (B); r 1 (A); w 1 (A); r 1 (B); r 2 (A); w 2 (A); w 1 (B); r 2 (B); w 2 (B); r 1 (A); w 1 (A); r 1 (B); r 2 (A); w 1 (B); w 2 (A); r 2 (B); w 2 (B); r 1 (A); w 1 (A); r 1 (B); w 1 (B); r 2 (A); w 2 (A); r 2 (B); w 2 (B); Felmerül a kérdés, hogy miért nem szükséges a konfliktus-sorbarendezhetőség a sorbarendezhetőséghez. Korábban már láttunk erre egy példát, amikor a tranzakció szemantikáját figyelembe véve állapíthattuk csak meg a sorbarendezhetőséget. Akkor megnéztük, hogy a T 2 által végrehajtott speciális számítások miatt miért volt az ütemezés sorba rendezhető. Pedig az az ütemezés nem konfliktus-sorbarendezhető, ugyanis A-t T 1 írja előbb, B-t pedig T 2. Mivel sem A írását, sem B írását nem lehet átrendezni, semmilyen módon nem kerülhet T 1 összes művelete T 2 összes művelete elé, sem fordítva. Vannak olyan sorba rendezhető, de nem konfliktus-sorbarendezhető ütemezések is, amelyek nem függnek a tranzakciók által végrehajtott számításoktól. Tekintsük például a T 1, T 2 és T 3 tranzakciókat, amelyek mindegyike X értékét írja. T 1 és T 2 Y-nak is ír értéket, mielőtt X-nek írnának értéket. Az egyik lehetséges ütemezés, amely éppen soros is, a következő: S 1 : w 1 (Y); w 1 (X); w 2 (Y); w 2 (X); w 3 (X); Az S 1 ütemezés X értékének a T 3 által írt értéket, Y értékének pedig a T 2 által írt értéket adja. Ugyanezt végzi a következő ütemezés is: S 2 : w 1 (Y); w 2 (Y); w 2 (X); w 1 (X); w 3 (X); Intuíció alapján átgondolva annak, hogy T 1 és T 2 milyen értéket ír X-be, nincs hatása, ugyanis T 3 felülírja X értékét. Emiatt S 1 és S 2 X-nek is és Y-nak is ugyanazt az értéket adja. Mivel S 1 soros ütemezés, és S 2 - nek bármely adatbázis-állapotra ugyanaz a hatása, mint S 1 -nek, ezért S 2 sorba rendezhető. Ugyanakkor mivel nem tudjuk felcserélni w 1 (X)-et w 2 (X)-szel, így cseréken keresztül nem lehet S 2 -t valamelyik soros ütemezéssé átalakítani. Tehát S 2 sorba rendezhető, de nem konfliktus-sorbarendezhető. 7
8 Megelőzési gráfok és teszt a konfliktus-sorbarendezhetőségre Viszonylag könnyű megvizsgálnunk egy S ütemezést, és eldöntenünk, hogy konfliktus-sorbarendezhető-e vagy nem. Az az alapötlet, hogy ha valahol konfliktusban álló műveletek szerepelnek S-ben, akkor az ezeket a műveleteket végrehajtó tranzakcióknak ugyanabban a sorrendben kell előfordulniuk a konfliktusekvivalens soros ütemezésekben, mint ahogyan az S-ben voltak. Tehát a konfliktusban álló műveletpárok megszorítást adnak a feltételezett konfliktusekvivalens soros ütemezésben a tranzakciók sorrendjére. Ha ezek a megszorítások nem mondanak ellent egymásnak, akkor találhatunk konfliktusekvivalens soros ütemezést. Ha pedig ellentmondanak egymásnak, akkor tudjuk, hogy nincs ilyen soros ütemezés. Adott a T 1 és T 2, esetleg további tranzakcióknak egy S ütemezése. Azt mondjuk, hogy T 1 megelőzi T 2 -t, ha van a T 1 -ben olyan A 1 művelet és a T 2 -ben olyan A 2 művelet, hogy 1. A 1 megelőzi A 2 -t S-ben, 2. A 1 és A 2 ugyanarra az adatbáziselemre vonatkoznak, és 3. A 1 és A 2 közül legalább az egyik írás művelet. Másképpen fogalmazva: A 1 és A 2 konfliktuspárt alkotna, ha szomszédos műveletek lennének. Jelölése: T 1 < S T 2. Látható, hogy ezek pontosan azok a feltételek, amikor nem lehet felcserélni A 1 és A 2 sorrendjét. Tehát A 1 az A 2 előtt szerepel bármely S-sel konfliktusekvivalens ütemezésben. Ebből az következik, hogy ha ezek közül az ütemezések közül az egyik soros ütemezés, akkor abban T 1 -nek meg kell előznie T 2 -t. Ezeket a megelőzéseket a megelőzési gráfban (precedence graph) összegezhetjük. A megelőzési gráf csomópontjai az S ütemezés tranzakciói. Ha a tranzakciókat T i -vel jelöljük, akkor a T i -nek megfelelő csomópontot az i egésszel. Az i csomópontból a j csomópontba vezet irányított él, ha T i < S T j. Példa. A következő S ütemezés a T 1, T 2 és T 3 tranzakciókat tartalmazza: S: r 2 (A); r 1 (B); w 2 (A); r 3 (A); w 1 (B); w 3 (A); r 2 (B); w 2 (B); Az S ütemezéshez tartozó megelőzési gráf a következő: Ha az A-val kapcsolatos műveleteket nézzük meg, akkor több okot találunk, hogy miért igaz a T 2 < S T 3. Például r 2 (A) az S-ben w 3 (A) előtt áll, és w 2 (A) az r 3 (A) és a w 3 (A) előtt is áll. A három észrevételünk közül bármelyik elegendő, hogy igazoljuk, valóban vezet él 2-ből 3-ba a megelőzési gráfban. Hasonló módon ha megnézzük a B-vel kapcsolatos műveleteket, akkor szintén több okot 8
9 találunk, hogy miért igaz a T 1 < S T 2. Például az r 1 (B) művelet a w 2 (B) művelet előtt áll. Tehát az S megelőzési gráfban 1-ből 2-be szintén vezet él. Ez a két él és csak ez a két él az, amelyeket az S ütemezésben szereplő műveletek sorrendjéből tudunk ellenőrizni. Van egy egyszerű szabály, amivel megmondhatjuk, hogy egy S ütemezés konfliktus-sorbarendezhető-e: Rajzoljuk fel S megelőzési gráfját, és nézzük meg, tartalmaz-e kört! Ha igen, akkor S nem konfliktus-sorbarendezhető, ha nem, akkor az, és ekkor a csomópontok bármelyik topologikus sorrendje megadja a konfliktusekvivalens soros sorrendet. Egy körmentes gráf csomópontjainak topologikus sorrendje a csomópontok bármely olyan rendezése, amelyben minden a b élre az a csomópont megelőzi a b csomópontot a topologikus rendezésben. Példa. A fenti megelőzési gráf körmentes, így az S ütemezés konfliktus-sorbarendezhető. A csomópontoknak, azaz a tranzakcióknak csak egyetlen sorrendje van, amely konzisztens a gráf éleivel, ez pedig a (T 1, T 2, T 3 ). S-et tehát át lehet alakítani olyan ütemezéssé, amelyben a három tranzakció mindegyikének az összes művelete ugyanebben a sorrendben van, és ez a soros ütemezés: S : r 1 (B); w 1 (B); r 2 (A); w 2 (A); r 2 (B); w 2 (B); r 3 (A); w 3 (A); Ahhoz, hogy belássuk, megkaphatjuk S-ből S -t szomszédos elemek cseréjével, az első észrevételünk, hogy az r 1 (B)-t konfliktus nélkül az r 2 (A) elé hozhatjuk. Ezután három cserével a w 1 (B)-t közvetlenül az r 1 (B) utánra tudjuk vinni, ugyanis mindegyik közbeeső művelet az A-ra vonatkozik. Ezután az r 2 (B)-t és a w 2 (B)-t csak az A-ra vonatkozó műveleteken keresztül át tudjuk vinni pontosan a w 2 (A) utáni helyzetbe, amivel megkapjuk S -t. Példa. Tekintsük az alábbi ütemezést: S 1 : r 2 (A); r 1 (B); w 2 (A); r 2 (B); r 3 (A); w 1 (B); w 3 (A); w 2 (B); S 1 csak abban különbözik S-től, hogy az r 2 (B) művelet három hellyel előbb szerepel. Az A-ra vonatkozó műveleteket megvizsgálva most is csak a T 2 < S1 T 3 megelőzési kapcsolathoz jutunk. De ha B-t vizsgáljuk, akkor nem csak T 1 < S1 T 2 teljesül (ugyanis r 1 (B) és w 1 (B) a w 2 (B) előtt szerepel), hanem T 2 < S1 T 1 is (ugyanis r 2 (B) a w 1 (B) előtt fordul elő). Emiatt az S 1 ütemezéshez tartozó megelőzési gráf a következő:
10 Ez a gráf nyilvánvalóan tartalmaz kört (ciklikus), ezért arra következtethetünk, hogy S 1 nem konfliktussorbarendezhető, ugyanis intuíció alapján láthatjuk, hogy bármely konfliktusekvivalens soros ütemezésben T 1 -nek T 2 előtt is és után is kellene állnia, tehát nem létezik ilyen ütemezés. Miért működik a megelőzési gráfon alapuló tesztelés? Láttuk, hogy a megelőzési gráfban a kör túl sok megszorítást jelent a feltételezett konfliktusekvivalens soros ütemezésre nézve. Azaz ha létezik a T 1 T 2 T n T 1 n darab tranzakcióból álló kör, akkor a feltételezett soros sorrendben T 1 műveleteinek meg kell előzniük a T 2 -ben szereplő műveleteket, amelyeknek meg kell előzniük a T 3 -belieket és így tovább egészen T n -ig. De T n műveletei emiatt a T 1 - beliek mögött vannak, ugyanakkor meg is kellene előzniük a T 1 -belieket a T n T 1 él miatt. Ebből következik, hogy ha a megelőzési gráf tartalmaz kört, akkor az ütemezés nem konfliktus-sorbarendezhető. A másik irányt egy kicsit nehezebb belátnunk. Azt kell megmutatnunk, hogy amikor a megelőzési gráf körmentes, akkor az ütemezés műveletei átrendezhetők szomszédos műveletek szabályos cseréivel úgy, hogy az ütemezés egy soros ütemezéssé váljon. Ha ezt meg tudjuk tenni, akkor bebizonyítottuk, hogy minden körmentes megelőzési gráffal rendelkező ütemezés konfliktus-sorbarendezhető. A bizonyítás az ütemezésben részt vevő tranzakciók száma szerinti indukcióval történik: Alapeset: Ha n = 1, vagyis csak egyetlen tranzakcióból áll az ütemezés, akkor az már önmagában soros, tehát biztosan konfliktus-sorbarendezhető. Indukció: Legyen S a T 1, T 2,, T n n darab tranzakció műveleteiből álló ütemezés. Tételezzük fel, hogy S-nek körmentes megelőzési gráfja van. Ha egy véges gráf körmentes, akkor van legalább egy olyan csomópontja, amelybe nem vezet él. Legyen a T i tranzakciónak megfelelő i csomópont egy ilyen csomópont. Mivel az i csomópontba nem vezet él, nincs S-ben olyan A művelet, amely 1. valamelyik T j (i j) tranzakcióra vonatkozik, 2. T i valamely műveletét megelőzi, és 3. ezzel a művelettel konfliktusban van. Ha lenne ilyen, akkor a megelőzési gráfban lennie kellene egy élnek a j csomópontból az i csomópontba (hiszen ekkor T j megelőzi T i -t), márpedig az i csomópontba nem vezet él. Így lehetséges, hogy T i minden műveletét S legelejére mozgatjuk át, miközben megtartjuk a sorrendjüket. Az ütemezés most a következő alakú: (T i műveletei) (a többi n-1 tranzakció műveletei) 10
11 Most tekintsük S második részét, vagyis a T i -től különböző összes tranzakciónak a műveleteit. Mivel ezek a műveletek egymáshoz viszonyítva ugyanabban a sorrendben vannak, mint ahogyan S-ben voltak, ennek a második résznek a megelőzési gráfját megkapjuk S megelőzési gráfjából, ha elhagyjuk belőle az i csomópontot és az ebből a csomópontból kimenő éleket. Mivel az eredeti megelőzési gráf körmentes volt, és csomópontok, illetve élek törlésével nem válhatott ciklikussá, ezért a második rész megelőzési gráfja is körmentes. Továbbá, mivel a második része n-1 tranzakciót tartalmaz, alkalmazzuk rá az indukciós feltevést. Így tudjuk, hogy a második rész műveletei szomszédos műveletek szabályos cseréivel átrendezhetők soros ütemezéssé. Ily módon magát S-et alakítottuk át olyan soros ütemezéssé, amelyben T i műveletei állnak legelöl, és a többi tranzakció műveletei ezután következnek valamilyen soros sorrendben. Az indukciót beláttuk, és így következik, hogy minden olyan ütemezés, amelynek körmentes a megelőzési gráfja, konfliktus-sorbarendezhető. A sorbarendezhetőség biztosítása zárakkal Képzeljünk el egy olyan tranzakcióhalmazt, amely megszorítások nélkül hajtja végre a műveleteit. Ezek a műveletek is egy ütemezést alkotnak, de nem valószínű, hogy ez az ütemezés sorba rendezhető lenne. Az ütemező feladata az, hogy megakadályozza az olyan műveleti sorrendeket, amelyek nem sorba rendezhető ütemezésekhez vezetnek. Először az ütemező legáltalánosabb szerkezetét tekintjük, olyat, amelyben az adatbáziselemekre kiadott zárak (lock) akadályozzák meg a nem sorba rendezhető viselkedést. Röviden arról van szó, hogy a tranzakciók zárolják azokat az adatbáziselemeket, amelyekhez hozzáférnek, hogy megakadályozzák azt, hogy ugyanakkor más tranzakciók is hozzáférjenek ezekhez az elemekhez, mivel ekkor felmerülne a nem sorbarendezhetőség kockázata. Először egy leegyszerűsített zárolási sémával vezetjük be a zárolás fogalmát. Ebben a sémában csak egyféle zár van, amelyet a tranzakcióknak meg kell kapniuk az adatbáziselemre, ha bármilyen műveletet végre akarnak hajtani rajta. Később sokkal valósabb zárolási sémákat tanulmányozunk, különböző zármódokkal. Zárak Az ütemező felelős azért, hogy fogadja a tranzakcióktól érkező kéréseket, és vagy megengedi a műveletek végrehajtását, vagy addig késlelteti, amikor már biztonságosan végre tudja hajtani őket. Nézzük meg, hogyan irányítja ezt a döntést a zártábla (lock table) felhasználásával. Az lenne az ideális, ha az ütemező akkor és csak akkor továbbítana egy kérést, ha annak végrehajtása nem vezethetne inkonzisztens adatbázis-állapothoz, miután az összes aktív tranzakciót vagy véglegesen végrehajtottuk, vagy abortáltuk (vagyis sikertelenül befejeztük). Ezt a kérdést viszont túl nehéz lenne 11
12 valós időben eldönteni. Így minden ütemező csak egy egyszerű tesztet hajt végre a sorbarendezhetőség eldöntésére, azonban letilthat olyan műveleteket is, amelyek önmagukban nem vezetnének inkonzisztenciához. A zárolási ütemező, mint a legtöbb ütemező, a konfliktus-sorbarendezhetőséget követeli meg, pedig mint azt már láttuk ez erősebb követelmény, mint a sorbarendezhetőség. Ha az ütemező zárakat használ, akkor a tranzakcióknak az adatbáziselemek olvasásán és írásán felül zárakat kell kérniük és feloldaniuk. A zárak használatának két értelemben is helyesnek kell lennie: mind a tranzakciók szerkezetére, mind pedig az ütemezések szerkezetére alkalmazva: Tranzakciók konzisztenciája (consistency of transactions): A műveletek és a zárak az alábbi elvárások szerint kapcsolódnak egymáshoz: 1. A tranzakció csak akkor olvashat vagy írhat egy elemet, ha már korábban zárolta azt, és még nem oldotta fel a zárat. 2. Ha egy tranzakció zárol egy elemet, akkor később azt fel kell szabadítania. Az ütemezések jogszerűsége (legality of schedules): A zárak értelme feleljen meg a szándék szerinti elvárásnak: nem zárolhatja két tranzakció ugyanazt az elemet, csak úgy, ha az egyik előbb már feloldotta a zárat. Kibővítjük a jelöléseinket a zárolás és a feloldás műveletekkel: l i (X): a T i tranzakció az X adatbáziselemre zárolást kér (lock). u i (X): a T i tranzakció az X adatbáziselem zárolását feloldja (unlock). Így a tranzakciók konzisztenciafeltétele és az ütemezések jogszerűségének a feltétele a következőképpen is kimondható: Ha egy T i tranzakcióban van egy r i (X) vagy egy w i (X) művelet, akkor van korábban egy l i (X) művelet, és van később egy u i (X) művelet, de a zárolás és az írás/olvasás között nincs u i (X). Ha egy ütemezésben van olyan l i (X) művelet, amelyet l j (X) követ, akkor e két művelet között lennie kell egy u i (X) műveletnek. Példa. Tekintsük a legelső példánkat, amelyben T 1 hozzáad az A és B adatbáziselemekhez 100-at, T 2 pedig megduplázza az értéküket. Most úgy adjuk meg a tranzakciókat, hogy a zárolási és az aritmetikai műveleteket is leírjuk, bár rendszerint a számításokat nem ábrázoljuk ebben a jelölésben, ugyanis az ütemező sem tudja azt figyelembe venni, amikor arról dönt, hogy engedélyezze vagy elutasítsa a kéréseket: 12
13 T 1 : l 1 (A); r 1 (A); A := A+100; w 1 (A); u 1 (A); l 1 (B); r 1 (B); B := B+100; w 1 (B); u 1 (B); T 2 : l 2 (A); r 2 (A); A := A*2; w 2 (A); u 2 (A); l 2 (B); r 2 (B); B := B*2; w 2 (B); u 2 (B); Mindkét tranzakció konzisztens. Mindkettő felszabadítja az A-ra és B-re kiadott zárakat. Továbbá mindkettő csak olyan lépésekben dolgozik A-n és B-n, melyeket megelőzően már zárolták az elemet, és még nem oldották fel a zár alól. T 1 T 2 A B l 1 (A); r 1 (A); 25 A := A+100; w 1 (A); u 1 (A); 125 l 2 (A); r 2 (A); 125 A := A*2; w 2 (A); u 2 (A); 250 l 2 (B); r 2 (B); 25 B := B*2; w 2 (B); u 2 (B); 50 l 1 (B); r 1 (B); 50 B := B+100; w 1 (B); u 1 (B); 150 Az ábrán a két tranzakciónak egy jogszerű ütemezése látható, ugyanis a két tranzakció sohasem zárolja egyidejűleg A-t vagy B-t. Pontosabban: T 2 nem végzi el az l 2 (A) műveletet, csak miután T 1 végrehajtotta u 1 (A)-t, és T 1 nem végzi el az l 1 (B) műveletet, csak miután T 2 végrehajtotta u 2 (B)-t. Láthatjuk a kiszámított értékek nyomon követésével, hogy bár ez az ütemezés jogszerű, mégsem sorba rendezhető. Nemsokára látni fogunk egy további feltételt (a kétfázisú zárolást), amivel biztosíthatjuk, hogy a jogszerű ütemezések konfliktus-sorbarendezhetők legyenek. A zárolási ütemező A zároláson alapuló ütemező feladata, hogy akkor és csak akkor engedélyezze a kérések végrehajtását, ha azok jogszerű ütemezéseket eredményeznek. Ezt a döntést segíti a zártábla, amely minden adatbáziselemhez megadja azt a tranzakciót, ha van ilyen, amelyik pillanatnyilag zárolja az adott elemet. A zártábla szerkezetéről később lesz szó. Ha viszont csak egyféle zárolás van, mint ahogyan eddig feltételeztük, akkor úgy tekinthetjük a táblát, mint (X,T) párokból álló Zárolások(elem, tranzakció) relációt, ahol a T tranzakció zárolja az X adatbáziselemet. Az ütemezőnek csak le kell kérdeznie ezt a relációt, illetve egyszerű INSERT és DELETE utasításokkal kell módosítania. Példa. A fenti példában látható ütemezés jogszerű, így a zárolási ütemező engedélyezhetné az összes kérést abban a sorrendben, ahogyan beérkeznek. Néha azonban előfordulhat, hogy nem lehet engedélyezni a kéréseket. Hajtsunk végre a T 1 és T 2 tranzakciókon egy apró, de lényeges változtatást, mégpedig azt, hogy T 1 és T 2 is előbb zárolja B-t, és csak azután oldja fel A zárolását: T 1 : l 1 (A); r 1 (A); A := A+100; w 1 (A); l 1 (B); u 1 (A); r 1 (B); B := B+100; w 1 (B); u 1 (B); 13
14 T 2 : l 2 (A); r 2 (A); A := A*2; w 2 (A); l 2 (B); u 2 (A); r 2 (B); B := B*2; w 2 (B); u 2 (B); T 1 T 2 A B l 1 (A); r 1 (A); 25 A := A+100; w 1 (A); l 1 (B); u 1 (A); 125 l 2 (A); r 2 (A); 125 A := A*2; w 2 (A); 250 l 2 (B); elutasítva r 1 (B); B := B+100; 25 w 1 (B); u 1 (B); 125 l 2 (B); u 2 (A); r 2 (B); 125 B := B*2; w 2 (B); u 2 (B); 250 Az ábrán látható, hogy amikor a módosított ütemezésben T 2 kéri B zárolását, az ütemezőnek el kell utasítania ezt a kérést, hiszen T 1 még zárolja B-t. Így T 2 áll, és a következő műveleteket a T 1 tranzakció végzi. Végül T 1 végrehajtja u 1 (B)-t, amely felszabadítja B-t. T 2 most már zárolhatja B-t, amelyet a következő lépésben végre is hajt. Látható, hogy mivel T 2 -nek várakoznia kellett, ezért B-t akkor szorozza meg 2-vel, miután T 1 már hozzáadott 100-at, és ez konzisztens adatbázis-állapotot eredményez. A kétfázisú zárolás Van egy meglepő feltétel, amellyel biztosítani tudjuk, hogy konzisztens tranzakciók jogszerű ütemezése konfliktus-sorbarendezhető legyen. Ezt a feltételt, amelyet a gyakorlatban elterjedt zárolási rendszerek leginkább követnek, kétfázisú zárolásnak (two-phase locking, 2PL) nevezzük: Minden tranzakcióban minden zárolási művelet megelőzi az összes zárfeloldási műveletet. A két fázis abból adódik, hogy az első fázisban csak zárolásokat adunk ki, a második fázisban pedig csak megszüntetünk zárolásokat. A kétfázisú zárolás a konzisztenciához hasonlóan a tranzakcióban a műveletek sorrendjére egy feltétel. Azt a tranzakciót, amely eleget tesz a 2PL feltételnek, kétfázisú zárolású tranzakciónak (two-phase-locked transaction) vagy 2PL tranzakciónak nevezzük. Példa. Az első példánkban a tranzakciók nem tesznek eleget a kétfázisú zárolási szabálynak. Például T 1 előbb oldja fel A zárolását, mint zárolja B-t. A második példában található tranzakciók azonban már eleget tesznek a 2PL feltételnek. Látható, hogy mind T 1, mind T 2 A-t és B-t is az első öt műveleten belül zárolja, és a következő öt műveleten belül feloldja a zárakat. Ha összehasonlítjuk a két ábrát, azt is látjuk, hogy a kétfázisú zárolású tranzakciók hogyan működnek együtt az ütemezővel a konzisztencia biztosítására, míg a nem 2PL tranzakciók esetén előfordulhat inkonzisztencia. 14
15 Miért működik a kétfázisú zárolás? Igaz, bár közel sem nyilvánvaló, hogy a 2PL példánkban észlelt előnyei általában is érvényesek. Intuíció alapján mindegyik kétfázisú zárolású tranzakcióról azt gondolhatjuk, hogy rögtön végrehajtásra kerülnek, amint az első zárfeloldási kérés kiadásra kerül. A 2PL tranzakciók egy S ütemezésével konfliktusekvivalens soros ütemezésben a tranzakciók ugyanabban a sorrendben vannak, mint amilyenben az első zárfeloldásaik. Megnézzük, hogyan lehet konzisztens, kétfázisú zárolású tranzakciók bármely S jogszerű ütemezését átalakítani konfliktusekvivalens soros ütemezéssé. A konverziót legjobban az S-ben részt vevő tranzakciók száma (n) szerinti indukcióval tudjuk leírni. Lényeges, hogy a konfliktusekvivalencia csak az olvasási és írási műveletekre vonatkozik. Amikor felcseréljük az olvasások és írások sorrendjét, akkor figyelmen kívül hagyjuk a zárolási és zárfeloldási műveleteket. Amikor megkaptuk az olvasási és írási műveletek sorrendjét, akkor úgy helyezzük el köréjük a zárolási és zárfeloldási műveleteket, ahogyan azt a különböző tranzakciók megkövetelik. Mivel minden tranzakció felszabadítja az összes zárolást a tranzakció befejezése előtt, tudjuk, hogy a soros ütemezés jogszerű lesz. Alapeset: Ha n = 1, vagyis csak egyetlen tranzakcióból áll az ütemezés, akkor az már önmagában soros, tehát biztosan konfliktus-sorbarendezhető. Indukció: Legyen S a T 1, T 2,, T n n darab konzisztens, kétfázisú zárolású tranzakció műveleteiből álló ütemezés, és legyen T i az a tranzakció, amelyik a teljes S ütemezésben a legelső zárfeloldási műveletet végzi, mondjuk u i (X)-t. Azt állítjuk, hogy T i összes olvasási és írási műveletét az ütemezés legelejére tudjuk vinni anélkül, hogy konfliktusműveleteken kellene áthaladnunk. Tekintsük T i valamelyik műveletét, mondjuk w i (Y)-t. Megelőzheti-e ezt S-ben valamely konfliktusművelet, például w j (Y)? Ha így lenne, akkor az S ütemezésben az u j (Y) és az l i (Y) műveletek az alábbi módon helyezkednének el a műveletsorozatban: ; w j (Y); ; u j (Y); ; l i (Y); ; w i (Y); Mivel T i az első, amelyik zárat old fel, így S-ben u i (X) megelőzi u j (Y)-t, vagyis S a következőképpen néz ki: ; w j (Y); ; u i (X); ; u j (Y); ; l i (Y); ; w i (Y); Az u i (X) művelet állhat w j (Y) előtt is. Mindkét esetben u i (X) l i (Y) előtt van, ami azt jelenti, hogy T i nem kétfázisú zárolású, amint azt feltételeztük. Ahogyan beláttuk, hogy nem létezhetnek 15
16 konfliktuspárok az írásra, ugyanúgy be lehet látni bármely két lehetséges műveletre az egyiket T i -ből, a másikat pedig egy T i -től különböző T j -ből választva, hogy nem lehetnek konfliktuspárok. Bebizonyítottuk, hogy valóban S legelejére lehet vinni T i összes műveletét konfliktusmentes olvasási és írási műveletekből álló műveletpárok cseréjével. Ezután elhelyezhetjük T i zárolási és zárfeloldási műveleteit. Így S a következő alakba írható át: (T i műveletei) (a többi n-1 tranzakció műveletei) Az n-1 tranzakcióból álló második rész szintén konzisztens 2PL tranzakciókból álló jogszerű ütemezés, így alkalmazhatjuk rá az indukciós feltevést. Átalakítjuk a második részt konfliktusekvivalens soros ütemezéssé, így a teljes S konfliktus-sorbarendezhetővé vált. A holtpont kockázata Az egyik probléma, amelyet nem lehet a kétfázisú zárolással megoldani, a holtpontok bekövetkezésének a lehetősége, vagyis amikor az ütemező arra kényszeríti a tranzakciókat, hogy örökké várakozzanak egy olyan adatbáziselemre vonatkozó zárra, amelyet egy másik tranzakció tart zárolva. Példaként tekintsük a megszokott 2PL tranzakcióinkat, de most T 2 A előtt dolgozza fel B-t: T 1 : l 1 (A); r 1 (A); A := A+100; w 1 (A); l 1 (B); u 1 (A); r 1 (B); B := B+100; w 1 (B); u 1 (B); T 2 : l 2 (B); r 2 (B); B := B*2; w 2 (B); l 2 (A); u 2 (B); r 2 (A); A := A*2; w 2 (A); u 2 (A); A tranzakciós műveletek egy lehetséges végrehajtása a következő: T 1 T 2 A B l 1 (A); r 1 (A); 25 l 2 (B); r 2 (B); 25 A := A+100; B := B*2; w 1 (A); 125 w 2 (B); 50 l 1 (B); elutasítva l 2 (A); elutasítva Most egyik tranzakció sem folytatódhat, hanem örökké várakozniuk kell. Később látni fogunk olyan módszereket, amelyek megszüntetik ezt a helyzetet. Az viszont már most látható, hogy nem tudjuk mind a két tranzakciót folytatni, ugyanis ha így lenne, akkor az adatbázis végső állapotában nem lehetne A=B. Különböző zármódú zárolási rendszerek A fentebb vázolt zárolási séma bemutatja a zárolás mögött álló legfőbb elveket, de túl egyszerű ahhoz, hogy a gyakorlatban is használható séma legyen. Az a legfőbb probléma, hogy a T tranzakciónak akkor is zárolnia kell az X adatbáziselemet, ha csak olvasni akarja X-et, írni nem. Nem kerülhetjük el a zárolást 16
17 ekkor sem, mert ha nem zárolnánk, akkor esetleg egy másik tranzakció azalatt írna X-be új értéket, mialatt T aktív, ami nem sorba rendezhető viselkedést okoz. Másrészről pedig miért is ne olvashatná több tranzakció egyidejűleg X értékét mindaddig, amíg egyiknek sincs engedélyezve, hogy írja. Osztott és kizárólagos zárak Mivel ugyanannak az adatbáziselemnek két olvasási művelete nem eredményez konfliktust, így ahhoz, hogy az olvasási műveleteket egy bizonyos sorrendbe soroljuk, nincs szükség zárolásra vagy más konkurenciavezérlési működésre. Mint már említettük, továbbra is szükséges azt az elemet is zárolni, amelyet olvasunk, ugyanis ennek az elemnek az írását nem szabad közben megengednünk. Az íráshoz szükséges zár viszont erősebb, mint az olvasáshoz szükséges zár, mivel ennek mind az olvasásokat, mind az írásokat meg kell akadályoznia. Ez indokolja, hogy bevezessük a legelterjedtebb zárolási sémát, amely két különböző zárat alkalmaz: az osztott zárakat (shared locks) vagy olvasási zárakat, és a kizárólagos zárakat (exclusive locks) vagy írási zárakat. Intuíció alapján tetszőleges X adatbáziselemet vagy egyszer lehet zárolni kizárólagosan, vagy akárhányszor lehet zárolni osztottan, ha még nincs kizárólagosan zárolva. Amikor írni akarjuk X-et, akkor X-en kizárólagos zárral kell rendelkeznünk, de ha csak olvasni akarjuk, akkor X-en akár osztott, akár kizárólagos zár megfelel. Feltételezzük, hogy ha olvasni akarjuk X-et, de írni nem, akkor előnyben részesítjük az osztott zárolást. Az sl i (X) jelölést használjuk arra, hogy a T i tranzakció osztott zárat kér az X adatbáziselemre, az xl i (X) jelölést pedig arra, hogy a T i kizárólagos zárat kér X-re. Továbbra is u i (X)-szel jelöljük, hogy T i feloldja X zárását, vagyis felszabadítja X-et minden zár alól. Az előzőekben tárgyalt három követelmény (a tranzakciók konzisztenciája, a tranzakciók 2PL feltétele és az ütemezések jogszerűsége) mindegyikének van megfelelője az osztott/kizárólagos zárolási rendszerben: 1. Tranzakciók konzisztenciája: Nem írhatunk kizárólagos zár fenntartása nélkül, és nem olvashatunk valamilyen zár fenntartása nélkül. Pontosabban fogalmazva: bármely T i tranzakcióban a) az r i (X) olvasási műveletet meg kell, hogy előzze egy sl i (X) vagy egy xl i (X) úgy, hogy közben nincs u i (X); b) a w i (X) írási műveletet meg kell, hogy előzze egy xl i (X) úgy, hogy közben nincs u i (X). Minden zárolást követnie kell egy ugyanannak az elemnek a zárolását feloldó műveletnek. 17
18 2. Tranzakciók kétfázisú zárolása: A zárolásoknak meg kell előzniük a zárak feloldását. Pontosabban fogalmazva: bármely T i kétfázisú zárolású tranzakcióban egyetlen sl i (X) vagy xl i (X) műveletet sem előzhet meg egyetlen u i (Y) művelet sem semmilyen Y-ra. 3. Az ütemezések jogszerűsége: Egy elemet vagy egyetlen tranzakció zárol kizárólagosan, vagy több is zárolhatja osztottan, de a kettő egyszerre nem lehet. Pontosabban fogalmazva: a) Ha xl i (X) szerepel egy ütemezésben, akkor ezután nem következhet xl j (X) vagy sl j (X) valamely i-től különböző j-re anélkül, hogy közben ne szerepelne u i (X). b) Ha sl i (X) szerepel egy ütemezésben, akkor ezután nem következhet xl j (X) valamely i-től különböző j-re anélkül, hogy közben ne szerepelne u i (X). Az engedélyezett, hogy egy tranzakció ugyanazon elemre kérjen és tartson mind osztott, mind kizárólagos zárat, feltéve, hogy ezzel nem kerül konfliktusba más tranzakciók zárolásaival. Ha a tranzakciók előre tudnák, milyen zárakra lesz szükségük, akkor biztosan csak a kizárólagos zárolást kérnék, de ha nem láthatók előre a zárolási igények, lehetséges, hogy egy tranzakció osztott és kizárólagos zárakat is kér különböző időpontokban. Példa. Tekintsük az alábbi, osztott és kizárólagos zárakat használó két tranzakciónak egy lehetséges ütemezését: T 1 : sl 1 (A); r 1 (A); xl 1 (B); r 1 (B); w 1 (B); u 1 (A); u 1 (B); T 2 : sl 2 (A); r 2 (A); sl 2 (B); r 2 (B); u 2 (A); u 2 (B); T 1 is és T 2 is olvassa A-t és B-t, de csak T 1 írja B-t, és egyik sem írja A-t. T 1 T 2 sl 1 (A); r 1 (A); sl 2 (A); r 2 (A); sl 2 (B); r 2 (B); xl 1 (B); elutasítva u 2 (A); u 2 (B); xl 1 (B); r 1 (B); w 1 (B); u 1 (A); u 1 (B); Az ábrán T 1 és T 2 műveleteinek olyan ütemezése látható, amelyet T 1 kezd A osztott zárolásával. Ezután T 2 következik, A és B mindegyikét osztottan zárolja. Most T 1 -nek lenne szüksége B kizárólagos zárolására, ugyanis olvassa is és írja is B-t. Viszont nem kaphatja meg a kizárólagos zárat, hiszen T 2 -nek már osztott zárja van B-n. Így az ütemező várakozni kényszeríti T 1 -et. Végül T 2 feloldja B zárját, és ekkor T 1 befejeződhet. A vázolt ütemezés konfliktus-sorbarendezhető. A konfliktusekvivalens soros sorrend a (T 2, T 1 ), hiába kezdődött T 1 előbb. Nem bizonyítjuk, de konzisztens 2PL tranzakciók jogszerű ütemezése konfliktus- 18
19 sorbarendezhető; ugyanazok a meggondolások alkalmazhatók az osztott és kizárólagos zárakra is, mint korábban. Az ábrán T 2 előbb old fel zárat, mint T 1, így azt várjuk, hogy T 2 megelőzi T 1 -et a soros sorrendben. Megvizsgálva az olvasási és írási műveleteket, észrevehető, hogy r 1 (A)-t T 2 összes műveletén át ugyan hátra tudjuk cserélgetni, de w 1 (B)-t nem tudjuk r 2 (B) elé vinni, ami pedig szükséges lenne ahhoz, hogy T 1 megelőzze T 2 -t egy konfliktusekvivalens soros ütemezésben. Kompatibilitási mátrixok Ha több zármódot használunk, akkor az ütemezőnek valamilyen elvre van szüksége ahhoz, hogy mikor engedélyezzen egy zárolási kérést, ha már adva vannak más zárak is azon az adatbáziselemen. Bár az osztott/kizárólagos rendszerek egyszerűek, a gyakorlatban léteznek a zárolási módoknak összetettebb rendszerei is. A zárolást engedélyező elvek következő fogalmait előbb az egyszerű osztott/kizárólagos rendszerek környezetében vezetjük be. A kompatibilitási mátrix minden egyes zármódhoz rendelkezik egy-egy sorral és egy-egy oszloppal. A sorok egy másik tranzakció által az X elemre elhelyezett záraknak, az oszlopok pedig az X-re kért zármódoknak felelnek meg. A kompatibilitási mátrix használatának szabálya a zárolást engedélyező döntésekre az alábbi: Egy X adatbáziselemre C módú zárat akkor és csak akkor engedélyezhetünk, ha a táblázat minden olyan R sorára, amelyre más tranzakció már zárolta X-et R módban, a C oszlopban igen szerepel. Példa. Az ábrán osztott (S) és kizárólagos (X) zárak kompatibilitási mátrixa látható: S X S igen nem X nem nem Az S oszlop azt mondja meg, hogy akkor engedélyezhetünk osztott zárat egy elemre, ha arra az elemre jelenleg is legfeljebb csak osztott zárak vannak. Az X oszlop azt mondja meg, hogy csak akkor engedélyezhetünk kizárólagos zárat, ha jelenleg nincs más zár az elemen. Látható, hogy ezek a szabályok az ütemezések jogszerűségének a definícióját tükrözik erre a zárolási rendszerre. Zárak felminősítése Az a T tranzakció, amelyik osztott zárat helyez X-re, barátságos a többi tranzakcióhoz, ugyanis a többinek is lehetősége van X-et T-vel egy időben olvasni. A kérdés az, hogy még barátságosabb-e az a T tranzakció, amelyik beolvasni és új értékkel írni akarja X-et úgy, hogy előbb csak osztott zárat tesz X-re, majd később, amikor T már készen áll az új érték beírására, akkor felminősíti a zárat kizárólagossá (upgrade), vagyis később kéri X kizárólagos zárolását azon túl, hogy már osztott zárat tart fenn X-en. 19
20 Nincs akadálya, hogy a tranzakció ugyanarra az adatbáziselemre újabb, különböző zármódú kéréseket adjon ki. Továbbra is fenntartjuk azt a megszokott jelölést, hogy u i (X) a T i tranzakció által elhelyezett összes zárat feloldja X-en, bár be lehetne vezetni zárolási módoktól függő feloldási műveleteket, ha lenne hasznuk. Példa. A következő példában a T 1 tranzakció T 2 -vel konkurensen tudja végrehajtani a számításait, amely nem lenne lehetséges, ha T 1 kezdetben kizárólagosan zárolta volna B-t. A két tranzakció a következő: T 1 : sl 1 (A); r 1 (A); sl 1 (B); r 1 (B); xl 1 (B); w 1 (B); u 1 (A); u 1 (B); T 2 : sl 2 (A); r 2 (A); sl 2 (B); r 2 (B); u 2 (A); u 2 (B); Itt T 1 beolvassa A-t és B-t, és végrehajtja a (valószínűleg hosszadalmas) számításokat velük, és a legvégén az eredményt beírja B új értékének. T 1 előbb osztottan zárolja B-t, majd később, miután az A-val és B-vel kapcsolatos számításait befejezte, kér egy kizárólagos zárat B-re. A T 2 tranzakció csak olvassa A-t és B-t, nem ír rájuk. T 1 T 2 sl 1 (A); r 1 (A); sl 2 (A); r 2 (A); sl 2 (B); r 2 (B); sl 1 (B); r 1 (B); xl 1 (B); elutasítva u 2 (A); u 2 (B); xl 1 (B); w 1 (B); u 1 (A); u 1 (B); Az ábra a műveletek egy lehetséges ütemezését mutatja. T 2 egy osztott zárat kap B-re T 1 előtt, de a negyedik sorban T 1 is képes osztottan zárolni B-t. Így T 1 rendelkezésére áll A is és B is, és az értékeik felhasználásával végre tudja hajtani a számításokat. Amikor T 1 megpróbálja B-n a zárat felminősíteni kizárólagossá, az ütemező a kérést elutasítja, és arra kényszeríti T 1 -et, hogy várjon addig, amíg T 2 felszabadítja a B-n lévő zárat. Ezután T 1 megkapja a kizárólagos zárat, kiírja B-t, és befejeződik a tranzakció. Ha T 1 a kezdéskor kért volna kizárólagos zárat B-re, mielőtt beolvasta volna, akkor ezt a kérést az ütemező elutasította volna, ugyanis T 2 -nek már volt egy osztott zárja B-n. T 1 nem tudta volna elvégezni a számításait B beolvasása nélkül, így T 1 -nek sokkal több dolga lett volna, miután T 2 felszabadította a zárakat. T 1 tehát később fejeződött volna be, ha csak kizárólagos zárat használt volna B-n, mint amikor a felminősítő stratégiát alkalmazta. Példa. Sajnos a felminősítés válogatás nélküli alkalmazása a holtpontok új forrását jelenti. Tételezzük fel, hogy T 1 és T 2 is beolvassa az A adatbáziselemet, és egy új értéket ír vissza A-ba. Ha mindkét tranzakció a 20
21 felminősítéssel dolgozik, akkor előbb osztott zárat kapnak A-ra, és azután minősítik ezt át kizárólagossá, így az alábbi eseménysorozat következhet be, amikor T 1 és T 2 közel egyidejűleg kezdődik: sl 1 (A); xl 1 (A); elutasítva T 1 T 2 sl 2 (A); xl 2 (A); elutasítva T 1 és T 2 is kaphat osztott zárat A-ra. Ezután mindkettő megpróbálja ezt felminősíteni kizárólagossá, de az ütemező mindkettőt várakozásra kényszeríti, hiszen a másik már osztottan zárolja A-t. Emiatt egyikük végrehajtása sem folytatódhat; vagy mindkettőnek örökösen kell várakoznia, vagy addig kell várakozniuk, amíg a rendszer fel nem fedezi, hogy holtpont alakult ki, abortálja valamelyik tranzakciót, és a másiknak engedélyezi A-ra a kizárólagos zárat. Módosítási zárak A fenti holtpontproblémát el tudjuk kerülni egy harmadik zárolási mód, az úgynevezett módosítási zárak (update lock) használatával. Az ul i (X) módosítási zár a T i tranzakciónak csak X olvasására ad jogot, X írására nem. Később azonban csak a módosítási zárat lehet felminősíteni írásira, az olvasási zárat nem (azt csak módosításira). Módosítási zárat akkor is engedélyezhetünk X-en, ha X osztott módon már zárolva van, ha azonban X-en már van egy módosítási zár, akkor ez megakadályozza, hogy X bármilyen más újabb zárat (akár osztott, akár módosítási, akár kizárólagos zárat) kapjon. Ennek az az oka, hogy ha nem utasítanánk el ezeket az újabb zárolásokat, akkor előfordulhat, hogy a módosításinak soha sem lenne lehetősége kizárólagossá való felminősítésre, ugyanis mindig valamilyen más zár lenne X-en (a módosítási zár tehát nem csak a holtpontproblémát oldja meg, hanem a kiéheztetés problémáját is). Ez a szabály nem szimmetrikus kompatibilitási mátrixot eredményez, ugyanis az U módosítási zár úgy néz ki, mintha osztott zár lenne, amikor kérjük, és úgy néz ki, mintha kizárólagos zár lenne, amikor már megvan. Emiatt az U és az S zárak oszlopai megegyeznek, valamint U és X sorai is megegyeznek: S X U S igen nem igen X nem nem nem U nem nem nem Példa. A módosítási zárak használata nem befolyásolja a korábbi példát. A harmadik művelet az lenne, hogy T 1 módosítási zárat tenne B-re, nem pedig osztott zárat. A módosítási zárat megkapná, ugyanis csak osztott zárak vannak B-n, és ugyanaz a műveletsorozat fodulna elő. Módosítási zárakkal megszüntethető viszont a holtpontprobléma. Most mind T 1, mind T 2 előbb módosítási zárat kér A-n, majd később kizárólagos zárat. T 1 és T 2 egy lehetséges leírása az alábbi: 21
22 T 1 : ul 1 (A); r 1 (A); xl 1 (A); w 1 (A); u 1 (A); T 2 : ul 2 (A); r 2 (A); xl 2 (A); w 2 (A); u 2 (A); A korábbinak megfelelő eseménysorozat pedig a következő: T 1 T 2 ul 1 (A); r 1 (A); ul 2 (A); elutasítva xl 1 (A); w 1 (A); u 1 (A); ul 2 (A); r 2 (A); xl 2 (A); w 2 (A); u 2 (A); Itt T 2 -t elutasítjuk, amelyik másodikként kérte A módosítási zárolását. Miután T 1 befejeződött, T 2 folytatódhat. A zárolási rendszer hatékonyan megakadályozta T 1 és T 2 konkurens végrehajtását, ebben a példában viszont lényeges mennyiségű konkurens végrehajtás vagy holtpontot, vagy inkonzisztens adatbázis-állapotot eredményez. Növelési zárak Egy másik érdekes zárolási mód, amely bizonyos helyzetekben hasznos lehet, a növelési zár. Számos tranzakciónak csak az a hatása az adatbázison, hogy növeli vagy csökkenti a tárolt értéket. Ilyen például, amikor pénzt utalunk át az egyik bankszámláról a másikra, vagy amikor egy repülőjegyeket árusító tranzakció csökkenti az adott gépen a szabad ülőhelyek számát. A növelési műveletek érdekes tulajdonsága, hogy tetszőleges sorrendben kiszámíthatók, ugyanis ha két tranzakció egy-egy konstanst ad hozzá ugyanahhoz az adatbáziselemhez, akkor nem számít, hogy melyiket hajtjuk végre előbb. Másrészt a növelés nem cserélhető fel sem az olvasással, sem az írással. Ha azelőtt vagy azután olvassuk be A-t, hogy valaki növelte, különböző értékeket kapunk, és ha azelőtt vagy azután növeljük A-t, hogy más tranzakció új értéket írt be A-ba, akkor is különböző értékei lesznek A-nak az adatbázisban. Vezessünk be egy új műveletet, a növelési műveletet (increment action), és jelöljük INC(A,c)-vel. Ez a művelet megnöveli az A adatbáziselem (ami ilyenkor mindig attribútum) értékét c-vel, amelyről feltételezzük, hogy egyszerű szám konstans. Ha c negatív, akkor valójában csökkentést hajtunk végre. A gyakorlatban az INC műveletet a relációsor egy attribútumára alkalmazzuk, annak ellenére, hogy maga a sor, és nem az attribútum a zárolható elem. Formálisan az INC(A,c) művelet a következő lépések atomi végrehajtására szolgál: READ(A,t); t := t+c; WRITE(A,t);. Az atomiságnak ez az alakja alsóbb szintű, mint a tranzakcióknak a zárolások által támogatott atomisága. 22
Ellenőrző kérdések. 5. Kis dolgozat kérdései. (9-10. előadás)
Ellenőrző kérdések 5. Kis dolgozat kérdései (9-10. előadás) 164. Adjunk meg a működés közbeni ellenőrzőpont képzésének lépéseit Undo naplózás esetén! (6 pont) 1. naplóbejegyzés készítése,
Adatbázisok elmélete 21. előadás
datbázisok elmélete 21. előadás Katona Gyula Y. Budapesti Műszaki és Gazdaságtudományi Egyetem Számítástudományi Tsz. I. B. 137/b kiskat@cs.bme.hu http://www.cs.bme.hu/ kiskat 2005 DTBÁZISOK ELMÉLETE 21.
Optimista konkurenciavezérlés
Optimista konkurenciavezérlés Léteznek zárolás nélküli módszerek is a tranzakciók sorba rendezhetségének a biztosítására. idpecsét érvényesítés. Optimista: feltételezik, hogy nem fordul el nem sorba rendezhet
Az optimális megoldást adó algoritmusok
Az optimális megoldást adó algoritmusok shop ütemezés esetén Ebben a fejezetben olyan modellekkel foglalkozunk, amelyekben a munkák több műveletből állnak. Speciálisan shop ütemezési problémákat vizsgálunk.
Adatbázisok elmélete 18. előadás
Adatbázisok elmélete 18. előadás Katona Gyula Y. Budapesti Műszaki és Gazdaságtudományi Egyetem Számítástudományi Tsz. I. B. 137/b kiskat@cs.bme.hu http://www.cs.bme.hu/ kiskat 2004 ADATBÁZISOK ELMÉLETE
2MU09f_Konkvez_feladatok.pdf Feladatok a tranzakciókezelésbıl
2MU09f_Konkvez_feladatok.pdf Feladatok a tranzakciókezelésbıl Molina-Ullman-Widom: Adatbázisrendszerek megvalósítása Panem, 2001. >> 9.fejezet Konkurenciavezérlés Vegyünk egy objektum orientált adatbázist.
KOVÁCS BÉLA, MATEMATIKA I.
KOVÁCS BÉLA, MATEmATIkA I. 4 IV. FÜGGVÉNYEk 1. LEkÉPEZÉSEk, függvények Definíció Legyen és két halmaz. Egy függvény -ből -ba egy olyan szabály, amely minden elemhez pontosan egy elemet rendel hozzá. Az
Adatbázisok elmélete 18. előadás
Adatbázisok elmélete 18. előadás Katona Gyula Y. Budapesti Műszaki és Gazdaságtudományi Egyetem Számítástudományi Tsz. I. B. 137/b kiskat@cs.bme.hu http://www.cs.bme.hu/ kiskat ADATBÁZISOK ELMÉLETE 18.
Példa. Job shop ütemezés
Példa Job shop ütemezés Egy üzemben négy gép működik, és ezeken 3 feladatot kell elvégezni. Az egyes feladatok sorra a következő gépeken haladnak végig (F jelöli a feladatokat, G a gépeket): Az ütemezési
Adatbázis Rendszerek II. 10. Tranzakció kezelés 72/1B IT MAN
Adatbázis Rendszerek II. 10. Tranzakció kezelés 72/1B IT MAN B IT v: 2019.02.05 MAN Párhuzamosság Hasznos és kényelmes a felhasználó oldaláról Kihívás problémák a konkurens végrehajtásnál konfliktus helyzetek
B I T M A N B I v: T M A N
Adatbázis Rendszerek II. 6. Ea: Tranzakciók B I v: T 2014.02.15 M A N 1/39 Párhuzamosság Hasznos és kényelmes a felhasználó oldaláról Kihívás problémák a konkurens végrehajtásnál konfliktus helyzetek (azonos
Általános algoritmustervezési módszerek
Általános algoritmustervezési módszerek Ebben a részben arra mutatunk példát, hogy miként használhatóak olyan általános algoritmustervezési módszerek mint a dinamikus programozás és a korlátozás és szétválasztás
Adatbázisok elmélete 24. előadás
Adatbázisok elmélete 24. előadás Katona Gyula Y. Budapesti Műszaki és Gazdaságtudományi Egyetem Számítástudományi Tsz. I. B. 137/b kiskat@cs.bme.hu http://www.cs.bme.hu/ kiskat 2005 ADATBÁZISOK ELMÉLETE
Érdemes egy n*n-es táblázatban (sorok-lányok, oszlopok-fiúk) ábrázolni a két színnel, mely éleket húztuk be (pirossal, kékkel)
Kombi/2 Egy bizonyos bulin n lány és n fiú vesz részt. Minden fiú pontosan a darab lányt és minden lány pontosan b darab fiút kedvel. Milyen (a,b) számpárok esetén létezik biztosan olyan fiúlány pár, akik
Chomsky-féle hierarchia
http://www.ms.sapientia.ro/ kasa/formalis.htm Chomsky-féle hierarchia G = (N, T, P, S) nyelvtan: 0-s típusú (általános vagy mondatszerkezetű), ha semmilyen megkötést nem teszünk a helyettesítési szabályaira.
5. előadás. Programozás-elmélet. Programozás-elmélet 5. előadás
Elemi programok Definíció Az S A A program elemi, ha a A : S(a) { a, a, a, a,..., a, b b a}. A definíció alapján könnyen látható, hogy egy elemi program tényleg program. Speciális elemi programok a kövekezők:
ADATBÁZIS-KEZELÉS. Adatbázis-kezelő rendszerek
ADATBÁZIS-KEZELÉS Adatbázis-kezelő rendszerek Adat (Data) Észlelhető, felfogható ismeret Jelsorozat Tény, közlés Valakinek vagy valaminek a jellemzője Adatbázis (Data Base, DB) Hosszú ideig évekig meglévő
LINEÁRIS PROGRAMOZÁSI FELADATOK MEGOLDÁSA SZIMPLEX MÓDSZERREL
LINEÁRIS PROGRAMOZÁSI FELADATOK MEGOLDÁSA SZIMPLEX MÓDSZERREL x 1-2x 2 6 -x 1-3x 3 = -7 x 1 - x 2-3x 3-2 3x 1-2x 2-2x 3 4 4x 1-2x 2 + x 3 max Alapfogalmak: feltételrendszer (narancs színnel jelölve), célfüggvény
8. Előadás. Megyesi László: Lineáris algebra, , oldal. 8. előadás Mátrix rangja, Homogén lineáris egyenletrendszer
8. Előadás Megyesi László: Lineáris algebra, 51. 56., 70. 74. oldal. Gondolkodnivalók Elemi bázistranszformáció 1. Gondolkodnivaló Most ne vegyük figyelembe, hogy az elemi bázistranszformáció során ez
A továbbiakban Y = {0, 1}, azaz minden szóhoz egy bináris sorozatot rendelünk
1. Kódelmélet Legyen X = {x 1,..., x n } egy véges, nemüres halmaz. X-et ábécének, elemeit betűknek hívjuk. Az X elemeiből képzett v = y 1... y m sorozatokat X feletti szavaknak nevezzük; egy szó hosszán
Ellenőrző kérdések. 36. Ha t szintű indexet használunk, mennyi a keresési költség blokkműveletek számában mérve? (1 pont) log 2 (B(I (t) )) + t
Ellenőrző kérdések 2. Kis dolgozat kérdései 36. Ha t szintű indexet használunk, mennyi a keresési költség blokkműveletek számában mérve? (1 pont) log 2 (B(I (t) )) + t 37. Ha t szintű indexet használunk,
Adatbázisok elmélete 24. előadás
Adatbázisok elmélete 24. előadás Katona Gyula Y. Budapesti Műszaki és Gazdaságtudományi Egyetem Számítástudományi Tsz. I. B. 137/b kiskat@cs.bme.hu http://www.cs.bme.hu/ kiskat 2005 ADATBÁZISOK ELMÉLETE
KOVÁCS BÉLA, MATEMATIKA I.
KOVÁCS BÉLA, MATEmATIkA I. 3 III. MEGFELELTETÉSEk, RELÁCIÓk 1. BEVEZETÉS Emlékeztetünk arra, hogy az rendezett párok halmazát az és halmazok Descartes-féle szorzatának nevezzük. Más szóval az és halmazok
III. Gráfok. 1. Irányítatlan gráfok:
III. Gráfok 1. Irányítatlan gráfok: Jelölés: G=(X,U), X a csomópontok halmaza, U az élek halmaza X={1,2,3,4,5,6}, U={[1,2], [1,4], [1,6], [2,3], [2,5], [3,4], [3,5], [4,5],[5,6]} Értelmezések: 1. Fokszám:
A 2016/2017 tanévi Országos Középiskolai Tanulmányi Verseny első forduló javítási-értékelési útmutató. INFORMATIKA II. (programozás) kategória
Oktatási Hivatal A 2016/2017 tanévi Országos Középiskolai Tanulmányi Verseny első forduló javítási-értékelési útmutató INFORMATIKA II. (programozás) kategória Kérjük a tisztelt tanár kollégákat, hogy a
26. MINIMÁLIS KÖLTSÉGŰ UTAK MINDEN CSÚCSPÁRRA
26. MINIMÁLIS KÖLTSÉGŰ UTAK MINDEN CSÚCSPÁRRA Az előző két fejezetben tárgyalt feladat általánosításaként a gráfban található összes csúcspárra szeretnénk meghatározni a legkisebb költségű utat. A probléma
Adatbázisok II Jánosi-Rancz Katalin Tünde 327A 1-1
Adatbázisok II. 2-3 Jánosi-Rancz Katalin Tünde tsuto@ms.sapientia.ro 327A 1-1 Tranzakciókezelés 1-2 Osztott erőforrások konfliktus helyzetek (azonos erőforrás igény) 1-3 Tranzakciókezelés Eddig feltételeztük:
30. ERŐSEN ÜSSZEFÜGGŐ KOMPONENSEK
30. ERŐSEN ÜSSZEFÜGGŐ KOMPONENSEK A gráfos alkalmazások között is találkozunk olyan problémákkal, amelyeket megoldását a részekre bontott gráfon határozzuk meg, majd ezeket alkalmas módon teljes megoldássá
Információk. Ismétlés II. Ismétlés. Ismétlés III. A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin. Algoritmus. Algoritmus ábrázolása
1 Információk 2 A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin Elérhetőség mesko.katalin@tfk.kefo.hu Fogadóóra: szerda 9:50-10:35 Számonkérés időpontok Április 25. 9 00 Május 17. 9 00 Június
1/50. Teljes indukció 1. Back Close
1/50 Teljes indukció 1 A teljes indukció talán a legfontosabb bizonyítási módszer a számítástudományban. Teljes indukció elve. Legyen P (n) egy állítás. Tegyük fel, hogy (1) P (0) igaz, (2) minden n N
UNDO naplózás. Naplóbejegyzések. Visszaállítási esetek
UNDO naplózás Semmiségi naplózás. A naplóba a régi értéket írjuk ki, azonnal naplózunk. A naplót először a memóriában frissítjük, a (FLUSH LOG) utasításra írjuk a lemezre. Naplóbejegyzések :
Az R halmazt a valós számok halmazának nevezzük, ha teljesíti az alábbi 3 axiómacsoport axiómáit.
2. A VALÓS SZÁMOK 2.1 A valós számok aximómarendszere Az R halmazt a valós számok halmazának nevezzük, ha teljesíti az alábbi 3 axiómacsoport axiómáit. 1.Testaxiómák R-ben két művelet van értelmezve, az
Az adatbázisrendszerek világa
Az adatbázisrendszerek világa Tankönyv: Ullman-Widom: Adatbázisrendszerek Alapvetés Második, átdolgozott kiadás, Panem, 2009 1.1. Az adatbázisrendszerek fejlődése 1.2. Az adatbázis-kezelő rendszerek áttekintése
KOVÁCS BÉLA, MATEMATIKA I.
KOVÁCS BÉLA, MATEmATIkA I. 1 I. HALmAZOk 1. JELÖLÉSEk A halmaz fogalmát tulajdonságait gyakran használjuk a matematikában. A halmazt nem definiáljuk, ezt alapfogalomnak tekintjük. Ez nem szokatlan, hiszen
Csima Judit október 24.
Adatbáziskezelés Funkcionális függőségek Csima Judit BME, VIK, Számítástudományi és Információelméleti Tanszék 2018. október 24. Csima Judit Adatbáziskezelés Funkcionális függőségek 1 / 1 Relációs sémák
7. Előadás. Megyesi László: Lineáris algebra, oldal. 7. előadás Elemi bázistranszformáció
7. Előadás Megyesi László: Lineáris algebra, 57. 61. oldal. Gondolkodnivalók Bázis, dimenzió 1. Gondolkodnivaló Legyenek a v vektor koordinátái a v 1,..., v n bázisban: (1, α 2,..., α n ). Igazoljuk, hogy
A számítógépes nyelvészet elmélete és gyakorlata. Automaták
A számítógépes nyelvészet elmélete és gyakorlata Automaták Nyelvek és automaták A nyelvek automatákkal is jellemezhetőek Automaták hierarchiája Chomsky-féle hierarchia Automata: új eszköz a nyelvek komplexitásának
Adatbázismodellek. 1. ábra Hierarchikus modell
Eddig az adatbázisokkal általános szempontból foglalkoztunk: mire valók, milyen elemekből épülnek fel. Ennek során tisztáztuk, hogy létezik az adatbázis fogalmi modellje (adatbázisterv), amely az egyedek,
Algoritmuselmélet. Mélységi keresés és alkalmazásai. Katona Gyula Y.
Algoritmuselmélet Mélységi keresés és alkalmazásai Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem 9. előadás Katona Gyula Y. (BME SZIT) Algoritmuselmélet
Véges állapotú gépek (FSM) tervezése
Véges állapotú gépek (FSM) tervezése F1. A 2. gyakorlaton foglalkoztunk a 3-mal vagy 5-tel osztható 4 bites számok felismerésével. Abban a feladatban a bemenet bitpárhuzamosan, azaz egy időben minden adatbit
Tranzakciók, nézettáblák, indexek. Párhuzamos folyamatok irányítása Virtuális és materializált nézettáblák Az adathozzáférés felgyorsítása
Tranzakciók, nézettáblák, indexek Párhuzamos folyamatok irányítása Virtuális és materializált nézettáblák Az adathozzáférés felgyorsítása 1 Miért van szükség tranzakciókra? Az adatbázis rendszereket általában
3. előadás. Programozás-elmélet. A változó fogalma Kiterjesztések A feladat kiterjesztése A program kiterjesztése Kiterjesztési tételek Példa
A változó fogalma Definíció Legyen A = A 1 A 2... A n állapottér. A pr Ai projekciós függvényeket változóknak nevezzük: : A A i pr Ai (a) = a i ( a = (a 1, a 2,..., a n ) A). A változók jelölése: v i =
Függvények július 13. f(x) = 1 x+x 2 f() = 1 ()+() 2 f(f(x)) = 1 (1 x+x 2 )+(1 x+x 2 ) 2 Rendezés után kapjuk, hogy:
Függvények 015. július 1. 1. Feladat: Határozza meg a következ összetett függvényeket! f(x) = cos x + x g(x) = x f(g(x)) =? g(f(x)) =? Megoldás: Összetett függvény el állításához a küls függvényben a független
22. GRÁFOK ÁBRÁZOLÁSA
22. GRÁFOK ÁBRÁZOLÁSA A megoldandó feladatok, problémák modellezése során sokszor gráfokat alkalmazunk. A gráf fogalmát a matematikából ismertnek vehetjük. A modellezés során a gráfok több változata is
Ellenőrző kérdések. 1. Kis dolgozat kérdései
Ellenőrző kérdések 1. Kis dolgozat kérdései 1. Mit hívunk statikus, mit dinamikus adatbázisnak? (1 pont) Egy statikus adatbázis esetében ritkábban fordulnak elő módosítások, a lekérdezések gyorsasága fontosabb.
Adatbázisok elmélete 12. előadás
Adatbázisok elmélete 12. előadás Katona Gyula Y. Budapesti Műszaki és Gazdaságtudományi Egyetem Számítástudományi Tsz. I. B. 137/b kiskat@cs.bme.hu http://www.cs.bme.hu/ kiskat 2005 ADATBÁZISOK ELMÉLETE
M. 33. Határozza meg az összes olyan kétjegyű szám összegét, amelyek 4-gyel osztva maradékul 3-at adnak!
Magyar Ifjúság 6 V SOROZATOK a) Három szám összege 76 E három számot tekinthetjük egy mértani sorozat három egymás után következő elemének vagy pedig egy számtani sorozat első, negyedik és hatodik elemének
15. LINEÁRIS EGYENLETRENDSZEREK
15 LINEÁRIS EGYENLETRENDSZEREK 151 Lineáris egyenletrendszer, Gauss elimináció 1 Definíció Lineáris egyenletrendszernek nevezzük az (1) a 11 x 1 + a 12 x 2 + + a 1n x n = b 1 a 21 x 1 + a 22 x 2 + + a
Chomsky-féle hierarchia
http://www.cs.ubbcluj.ro/~kasa/formalis.html Chomsky-féle hierarchia G = (N, T, P, S) nyelvtan: 0-s típusú (általános vagy mondatszerkezet ), ha semmilyen megkötést nem teszünk a helyettesítési szabályaira.
Java és web programozás
Budapesti M szaki Egyetem 2013. november 20. 10. El adás SQLite SQLite: Adatbázis kezel rendszer SQL standardokat nagyrészt követi Nagyon elterjedt, pl böngész kben is használt Nehéz olyan programnyelvet
1. ábra ábra
A kifejtési tétel A kifejtési tétel kimondásához először meg kell ismerkedni az előjeles aldetermináns fogalmával. Ha az n n-es A mátrix i-edik sorának és j-edik oszlopának kereszteződésében az elem áll,
Algoritmusok és adatszerkezetek 2.
Algoritmusok és adatszerkezetek 2. Varga Balázs gyakorlata alapján Készítette: Nagy Krisztián 1. gyakorlat Nyílt címzéses hash-elés A nyílt címzésű hash táblákban a láncolással ellentétben egy indexen
DETERMINÁNSSZÁMÍTÁS. Határozzuk meg a 1 értékét! Ez most is az egyetlen elemmel egyezik meg, tehát az értéke 1.
DETERMINÁNSSZÁMÍTÁS A (nxn) kvadratikus (négyzetes) mátrixhoz egyértelműen hozzárendelhetünk egy D R számot, ami a mátrix determinánsa. Már most megjegyezzük, hogy a mátrix determinánsa, illetve a determináns
út hosszát. Ha a két várost nem köti össze út, akkor legyen c ij = W, ahol W már az előzőekben is alkalmazott megfelelően nagy szám.
1 Az utazó ügynök problémája Utazó ügynök feladat Adott n számú város és a városokat összekötő utak, amelyeknek ismert a hossza. Adott továbbá egy ügynök, akinek adott városból kiindulva, minden várost
Műveletek mátrixokkal. Kalkulus. 2018/2019 ősz
2018/2019 ősz Elérhetőségek Előadó: (safaro@math.bme.hu) Fogadóóra: hétfő 9-10 (H épület 3. emelet 310-es ajtó) A pontos tárgykövetelmények a www.math.bme.hu/~safaro/kalkulus oldalon találhatóak. A mátrix
Egyenletek, egyenlőtlenségek VII.
Egyenletek, egyenlőtlenségek VII. Magasabbfokú egyenletek: A 3, vagy annál nagyobb fokú egyenleteket magasabb fokú egyenleteknek nevezzük. Megjegyzés: Egy n - ed fokú egyenletnek legfeljebb n darab valós
0,424 0,576. f) P (X 2 = 3) g) P (X 3 = 1) h) P (X 4 = 1 vagy 2 X 2 = 2) i) P (X 7 = 3, X 4 = 1, X 2 = 2 X 0 = 2) j) P (X 7 = 3, X 4 = 1, X 2 = 2)
Legyen adott a P átmenetvalószín ség mátrix és a ϕ 0 kezdeti eloszlás Kérdés, hogy miként lehetne meghatározni az egyes állapotokban való tartózkodás valószín ségét az n-edik lépés múlva Deniáljuk az n-lépéses
Adatbázis rendszerek megvalósítása 1. Irodalom: Molina-Ullman-Widom: Adatbázisrendszerek megvalósítása
Adatbázis rendszerek megvalósítása 1. Irodalom: Molina-Ullman-Widom: Adatbázisrendszerek megvalósítása Az adatbázis-kezelő rendszer alkotórészei (1) Az ábrán egy teljes adatbázis-kezelő rendszer vázát
Minden egész szám osztója önmagának, azaz a a minden egész a-ra.
1. Számelmélet Definíció: Az a egész szám osztója a egész számnak, ha létezik olyan c egész szám, melyre = ac. Ezt a következőképpen jelöljük: a Tulajdonságok: Minden egész szám osztója önmagának, azaz
1.1. Definíció. Azt mondjuk, hogy a oszója b-nek, vagy más szóval, b osztható a-val, ha létezik olyan x Z, hogy b = ax. Ennek jelölése a b.
1. Oszthatóság, legnagyobb közös osztó Ebben a jegyzetben minden változó egész számot jelöl. 1.1. Definíció. Azt mondjuk, hogy a oszója b-nek, vagy más szóval, b osztható a-val, ha létezik olyan x Z, hogy
Diszkrét matematika 2.
Diszkrét matematika 2. 2018. szeptember 21. 1. Diszkrét matematika 2. 2. előadás Fancsali Szabolcs Levente nudniq@cs.elte.hu www.cs.elte.hu/ nudniq Komputeralgebra Tanszék 2018. szeptember 21. Gráfelmélet
5 = hiszen és az utóbbi mátrix determinánsa a középs½o oszlop szerint kifejtve: 3 7 ( 2) = (példa vége). 7 5 = 8. det 6.
A pivotálás hasznáról és hatékony módjáról Adott M mátrixra pivotálás alatt a következ½ot értjük: Kijelölünk a mátrixban egy nemnulla elemet, melynek neve pivotelem, aztán az egész sort leosztjuk a pivotelemmel.
KOVÁCS BÉLA, MATEMATIKA I.
KOVÁCS BÉLA MATEmATIkA I 6 VI KOmPLEX SZÁmOk 1 A komplex SZÁmOk HALmAZA A komplex számok olyan halmazt alkotnak amelyekben elvégezhető az összeadás és a szorzás azaz két komplex szám összege és szorzata
Branch-and-Bound. 1. Az egészértéketű programozás. a korlátozás és szétválasztás módszere Bevezető Definíció. 11.
11. gyakorlat Branch-and-Bound a korlátozás és szétválasztás módszere 1. Az egészértéketű programozás 1.1. Bevezető Bizonyos feladatok modellezése kapcsán előfordulhat olyan eset, hogy a megoldás során
Véges automaták, reguláris nyelvek
Véges automaták, reguláris nyelvek Kiegészítő anyag az lgoritmuselmélet tárgyhoz (a Rónyai Ivanyos Szabó: lgoritmusok könyv mellé) Friedl Katalin BME SZIT friedl@cs.bme.hu 27. augusztus 3. véges automata
... S n. A párhuzamos programszerkezet két vagy több folyamatot tartalmaz, melyek egymással közös változó segítségével kommunikálnak.
Párhuzamos programok Legyen S parbegin S 1... S n parend; program. A párhuzamos programszerkezet két vagy több folyamatot tartalmaz, melyek egymással közös változó segítségével kommunikálnak. Folyamat
11. Előadás. 11. előadás Bevezetés a lineáris programozásba
11. Előadás Gondolkodnivalók Sajátérték, Kvadratikus alak 1. Gondolkodnivaló Adjuk meg, hogy az alábbi A mátrixnak mely α értékekre lesz sajátértéke a 5. Ezen α-ák esetén határozzuk meg a 5 sajátértékhez
ÁTVÁLTÁSOK SZÁMRENDSZEREK KÖZÖTT, SZÁMÁBRÁZOLÁS, BOOLE-ALGEBRA
1. Tízes (decimális) számrendszerből: a. Kettes (bináris) számrendszerbe: Vegyük a 2634 10 -es számot, és váltsuk át bináris (kettes) számrendszerbe! A legegyszerűbb módszer: írjuk fel a számot, és húzzunk
9. Előadás. Megyesi László: Lineáris algebra, oldal. 9. előadás Mátrix inverze, Leontyev-modell
9. Előadás Megyesi László: Lineáris algebra, 75. 84. oldal. Gondolkodnivalók Mátrix rangja 1. Gondolkodnivaló Tegyük fel, hogy egy elemi bázistranszformáció kezdetekor a sor- és oszlopindexek sorban helyezkednek
A sorozat fogalma. függvényeket sorozatoknak nevezzük. Amennyiben az értékkészlet. az értékkészlet a komplex számok halmaza, akkor komplex
A sorozat fogalma Definíció. A természetes számok N halmazán értelmezett függvényeket sorozatoknak nevezzük. Amennyiben az értékkészlet a valós számok halmaza, valós számsorozatról beszélünk, mígha az
4. SOROK. a n. a k (n N) a n = s, azaz. a n := lim
Példák.. Geometriai sor. A aq n = a + aq + aq 2 +... 4. SOROK 4. Definíció, konvergencia, divergencia, összeg Definíció. Egy ( ) (szám)sorozat elemeit az összeadás jelével összekapcsolva kapott a + a 2
Gráfelméleti modell alkalmazása épít ipari kivitelezés ütemezésére
Tamaga István Gráfelméleti modell alkalmazása épít ipari kivitelezés ütemezésére modell Készítsük el egy épít ipari kivitelezés gráfelméleti modelljét! Ekkor a kivitelezést megfeleltetjük egy gráfnak,
A szimplex algoritmus
. gyakorlat A szimplex algoritmus Az előző órán bevezetett feladat optimális megoldását fogjuk megvizsgálni. Ehhez új fogalmakat, és egy algoritmust tanulunk meg. Hogy az algoritmust alkalmazni tudjuk,
Diszkrét matematika 2.C szakirány
Diszkrét matematika 2.C szakirány 2017. ősz 1. Diszkrét matematika 2.C szakirány 2. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Komputeralgebra Tanszék 2017.
Tranzakciók az SQL-ben
Tranzakciók az SQL-ben Tankönyv: Ullman-Widom: Adatbázisrendszerek Alapvetés Második, átdolgozott kiadás, Panem, 2009 6.6. Tranzakciók az SQL-ben (Gyakorlaton csak SAVEPOINT, COMMIT és ROLLBACK lesz. Ez
Dinamikus programozás - Szerelőszalag ütemezése
Dinamikus programozás - Szerelőszalag ütemezése A dinamikus programozás minden egyes részfeladatot és annak minden részfeladatát pontosan egyszer oldja meg, az eredményt egy táblázatban tárolja, és ezáltal
5. Előadás. (5. előadás) Mátrixegyenlet, Mátrix inverze március 6. 1 / 39
5. Előadás (5. előadás) Mátrixegyenlet, Mátrix inverze 2019. március 6. 1 / 39 AX = B (5. előadás) Mátrixegyenlet, Mátrix inverze 2019. március 6. 2 / 39 AX = B Probléma. Legyen A (m n)-es és B (m l)-es
Feladatunk, hogy az alábbiakban látható tízgépes elrendezésre meghatározzuk az operátorok optimális kiosztását a vevői igények függvényében.
Kosztolányi János Operátorkiosztás tervezése Feladatunk, hogy az alábbiakban látható tízgépes elrendezésre meghatározzuk az operátorok optimális kiosztását a vevői igények függvényében. Első lépésként
Függvények határértéke, folytonossága
Függvények határértéke, folytonossága 25. február 22.. Alapfeladatok. Feladat: Határozzuk meg az f() = 23 4 5 3 + 9 a végtelenben és a mínusz végtelenben! függvény határértékét Megoldás: Vizsgáljuk el
Mátrixjátékok tiszta nyeregponttal
1 Mátrixjátékok tiszta nyeregponttal 1. Példa. Két játékos Aladár és Bendegúz rendelkeznek egy-egy tetraéderrel, melyek lapjaira rendre az 1, 2, 3, 4 számokat írták. Egy megadott jelre egyszerre felmutatják
FPI matek szakkör 8. évf. 4. szakkör órai feladatok megoldásokkal. 4. szakkör, október. 20. Az órai feladatok megoldása
4. szakkör, 2004. október. 20. Az órai feladatok megoldása Most csak három önmagában nem nehéz feladatot kapsz, és a feladatot magadnak kell általánosítani, szisztematikusan adatot gyűjteni, általános
L'Hospital-szabály. 2015. március 15. ln(x 2) x 2. ln(x 2) = ln(3 2) = ln 1 = 0. A nevez határértéke: lim. (x 2 9) = 3 2 9 = 0.
L'Hospital-szabály 25. március 5.. Alapfeladatok ln 2. Feladat: Határozzuk meg a határértéket! 3 2 9 Megoldás: Amint a korábbi határértékes feladatokban, els ként most is a határérték típusát kell megvizsgálnunk.
Gráfelmélet. I. Előadás jegyzet (2010.szeptember 9.) 1.A gráf fogalma
Készítette: Laczik Sándor János Gráfelmélet I. Előadás jegyzet (2010.szeptember 9.) 1.A gráf fogalma Definíció: a G=(V,E) párt egyszerű gráfnak nevezzük, (V elemeit a gráf csúcsainak/pontjainak,e elemeit
SQL jogosultság-kezelés. Privilégiumok Grant és Revoke Grant Diagrammok
SQL jogosultság-kezelés Privilégiumok Grant és Revoke Grant Diagrammok 1 Jogosultság-kezelés Egy fájlrendszer általában jogosultságokat rendel az általa kezelt objektumokhoz. Tipikusan olvasható, írható,
Taylor-polinomok. 1. Alapfeladatok. 2015. április 11. 1. Feladat: Írjuk fel az f(x) = e 2x függvény másodfokú Maclaurinpolinomját!
Taylor-polinomok 205. április.. Alapfeladatok. Feladat: Írjuk fel az fx) = e 2x függvény másodfokú Maclaurinpolinomját! Megoldás: A feladatot kétféle úton is megoldjuk. Az els megoldásban induljunk el
Diszkrét matematika 2.C szakirány
Diszkrét matematika 2.C szakirány 2015. tavasz 1. Diszkrét matematika 2.C szakirány 1. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu Komputeralgebra Tanszék 2015. tavasz Gráfelmélet Diszkrét
Aritmetikai kifejezések lengyelformára hozása
Aritmetikai kifejezések lengyelformára hozása Készítették: Santák Csaba és Kovács Péter, 2005 ELTE IK programtervező matematikus szak Aritmetikai kifejezések kiértékelése - Gyakran felmerülő programozási
Haladók III. kategória 2. (dönt ) forduló
Haladók III. kategória 2. (dönt ) forduló 1. Tetsz leges n pozitív egész számra jelölje f (n) az olyan 2n-jegy számok számát, amelyek megegyeznek az utolsó n számjegyükb l alkotott szám négyzetével. Határozzuk
IBM WebSphere Adapters 7. változat 5. alváltozat. IBM WebSphere Adapter for Email felhasználói kézikönyv 7. változat 5.kiadás
IBM WebSphere Adapters 7. változat 5. alváltozat IBM WebSphere Adapter for Email felhasználói kézikönyv 7. változat 5.kiadás IBM WebSphere Adapters 7. változat 5. alváltozat IBM WebSphere Adapter for
24. szakkör (Csoportelméleti alapfogalmak 3.)
24. szakkör (Csoportelméleti alapfogalmak 3.) D) PERMUTÁCIÓK RENDJE Fontos kérdés a csoportelméletben, hogy egy adott elem hanyadik hatványa lesz az egység. DEFINÍCIÓ: A legkisebb olyan pozitív k számot,
Bevezetés a programozásba I 4. gyakorlat. PLanG: Szekvenciális fájlkezelés. Szekvenciális fájlkezelés Fájlok használata
Pázmány Péter Katolikus Egyetem Információs Technológiai Kar Bevezetés a programozásba I 4. gyakorlat PLanG: 2011.10.04. Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto Fájlok
SQL DDL-2 (aktív elemek) triggerek
SQL DDL-2 (aktív elemek) triggerek Tankönyv: Ullman-Widom: Adatbázisrendszerek Alapvetés Második, átdolgozott kiadás, Panem, 2009 7.fej.: Megszorítások és triggerek 7.4. Önálló megszorítások 7.5. Triggerek
Diszkrét matematika 1. estis képzés
Diszkrét matematika 1. estis képzés 2019. tavasz 1. Diszkrét matematika 1. estis képzés 9. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Mérai László diái alapján
Struktúra nélküli adatszerkezetek
Struktúra nélküli adatszerkezetek Homogén adatszerkezetek (minden adatelem azonos típusú) osztályozása Struktúra nélküli (Nincs kapcsolat az adatelemek között.) Halmaz Multihalmaz Asszociatív 20:24 1 A
22. szakkör (Csoportelméleti alapfogalmak 1.)
22. szakkör (Csoportelméleti alapfogalmak 1.) A) A PERMUTÁCIÓK CIKLIKUS SZERKEZETE 1. feladat: Egy húsztagú társaság ül az asztal körül. Néhányat közülük (esetleg az összeset) párba állítunk, és a párok
1000 forintos adósságunkat, de csak 600 forintunk van. Egyetlen lehetőségünk, hogy a
A merész játékok stratégiája A következő problémával foglalkozunk: Tegyük fel, hogy feltétlenül ki kell fizetnünk 000 forintos adósságunkat, de csak 600 forintunk van. Egyetlen lehetőségünk, hogy a még
A félév során előkerülő témakörök
A félév során előkerülő témakörök rekurzív algoritmusok rendező algoritmusok alapvető adattípusok, adatszerkezetek, és kapcsolódó algoritmusok dinamikus programozás mohó algoritmusok gráf algoritmusok
Gauss-eliminációval, Cholesky felbontás, QR felbontás
Közelítő és szimbolikus számítások 4. gyakorlat Mátrix invertálás Gauss-eliminációval, Cholesky felbontás, QR felbontás Készítette: Gelle Kitti Csendes Tibor Somogyi Viktor London András Deák Gábor jegyzetei
ÍTÉLETKALKULUS (NULLADRENDŰ LOGIKA)
ÍTÉLETKALKULUS SZINTAXIS ÍTÉLETKALKULUS (NULLADRENDŰ LOGIKA) jelkészlet elválasztó jelek: ( ) logikai műveleti jelek: ítéletváltozók (logikai változók): p, q, r,... ítéletkonstansok: T, F szintaxis szabályai
Diszkrét matematika 2.C szakirány
Diszkrét matematika 2.C szakirány 2015. ősz 1. Diszkrét matematika 2.C szakirány 3. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Komputeralgebra Tanszék 2015.