Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Aktivní databáze Šípek, Chudoba 15.10.2013. Obsah ●Zdroj ●Aktivní databáze - definice ●Reálné systémy ○ Starburst ○ Oracle ○ DB2 ○ Chimera ●Příklady použití.

Podobné prezentace


Prezentace na téma: "Aktivní databáze Šípek, Chudoba 15.10.2013. Obsah ●Zdroj ●Aktivní databáze - definice ●Reálné systémy ○ Starburst ○ Oracle ○ DB2 ○ Chimera ●Příklady použití."— Transkript prezentace:

1 Aktivní databáze Šípek, Chudoba 15.10.2013

2 Obsah ●Zdroj ●Aktivní databáze - definice ●Reálné systémy ○ Starburst ○ Oracle ○ DB2 ○ Chimera ●Příklady použití ●Základní pojmy - shrnutí ●Závěr

3 Zdroj Advanced Database Systems (The Morgan Kaufmann Series in Data Management Systems) Carlo Zaniolo Stefano Ceri Christos Faloutsos Richard T. Snodgrass V. S. Subrahmanian Roberto Zicari

4 Aktivní databáze - definice ●Klasické databáze mají pouze možnost integritních omezení ○ne vždy dostatečné ●Aktivní databáze poskytují navíc aktivní prvky - Triggery ○Událost - podmínka - akce ●Původně plánováno v SQL92, nakonec až v SQL3

5 Důvody použití ●Pravidla mohou být komplexnější než integritní omezení ●Usnadňují programátorskou práci

6 Reálné systémy ●Starburst ●Oracle ●DB2 ●Chimera

7 Starburst - historie ●Vyvinuto IBM ●Jednoduchá syntaxe i sémantika

8 Starburst - Syntax ●ECA model ○Událost - podmínka - akce ●Události ○INSERT, DELETE, UPDATE ●Podmínka ○booleovský predikát vyjádřený v SQL ●Akce ○SQL dotazy (SELECT, INSERT, DELETE, UPDATE) + ROLLBACK

9 Starburst - Syntax CREATE RULE ON WHEN ]> [IF ] THEN [PRECEDES ] [FOLLOWS ]

10 Starburst - Sémantika ●Triggery jsou volány po transakčním příkazu COMMIT ●Triggery, které jsou navázány na události v probíhající transakci tvoří tzv. “konfliktní množinu” ●Pro volání je použitý následující algoritmus Dokud je konfliktní množina neprázdná: 1) Vezmi trigger T s nejvyšší prioritou z konfliktní množiny 2) Vyhodnoť podmínku triggeru T 3) Pokud je podmínka triggeru T splněna, vykonej akci triggeru T

11 Starburst - Sémantika ●Priority triggerů jsou určeny sekcemi FOLLOWS a PRECEDES ○Acyklicita je pouze na programátorovi ●Pokud mají 2 triggery stejnou prioritu, je první vyhodnocen ten, který byl dřív nadefinován ●Pomocné tabulky INSERTED, DELETED, OLD-UPADTED, NEW- UPDATED

12 Starburst - Net effect ●Každá n-tice změněných dat se objeví v pomocných tabulkách pouze jednou ●Pokud se vložíme n-tici t1 a následně ji pomocí příkazu update změníme na t2, v tabulce INSERTED se objeví n-tice t2 ●Pokud vložíme n-tici t a následně jí smažeme, tak to bude mít nulový efekt

13 Starburst - Příklad CREATE RULE KontrolaVyplat ON zam WHEN INSERTED, DELETED, UPDATED (plat) IF(SELECT AVG(plat) FROM zam) > 100 THEN UPDATE zam SET plat =.9 * plat ZamestnanecPlat Adam90 Bedrich90 Cyril110

14 Starburst - Příklad ●Vložíme 2 řádky: (David,150) a (Emil, 120) ZamestnanecPlat Adam90 Bedrich90 Cyril110 ZamestnanecPlat Adam81 Bedrich81 Cyril99 David135 Emil108 ZamestnanecPlat Adam73 Bedrich73 Cyril89 David121 Emil97 1. zavolání triggeru Prumer je 112 2. zavolání triggeru Prumer je 101

15 Starburst - Příklad 2 CREATE RULE VysocePlaceni ON zam WHEN INSERTED IFEXISTS(SELECT * FROM INSERTED WHERE Plat > 100 ) THEN INSERT INTO VysocePlaceniZam (SELECT * FROM INSERTED WHERE Plat > 100 ) FOLLOWS KontrolaVyplat Při commitu stejné transakce jako v předešlém případě bude v tabulce VysocePlaceniZam pouze řádek (David, 121) kvůli Net efektu

16 Starburst - Další příkazy ●Aktivace / deaktivace triggerů ○(DE)ACTIVATE RULE ON ●Zahození triggeru ○DROP RULE ON ●Sdružování pravidel ○CREATE RULESET ○ALTER RULESET [ADDRULE ] [DELRULE ]

17 Starburst - Další příkazy ● Explicitní volání triggerů ○PROCESS RULESET ○PROCESS RULE

18 Reálné systémy ●Starburst ●Oracle ●DB2 ●Chimera

19 Oracle Triggery implementovány na základě předběžné verze standardu SQL3 Akce jsou psány v jazyce PL/SQL o Poměrně silný vyjadřovací prostředek Narozdíl od Starburstu jsou triggery vykonávány ihned, nečeká se na commit o Díky tomu je možno rozdělit triggery na Before a After

20 Oracle 2 úrovně triggerů o Řádkový (row-level) - je volaný pro každý řádek ovlivněný spouštěcí událostí zvlášť o Příkazový (statement-level) - je volaný na celou ovlivněnou tabulku najednou

21 Oracle- Syntax CREATE TRIGGER { BEFORE | AFTER } [OF ] ON [REFERENCING ] [FOR EACH ROW] [WHEN ] := OLD AS NEW AS

22 Oracle- Syntax Řádkové triggery mohou používat speciální predikáty určující spouštěcí událost o INSERTING, DELETING, UPDATING Řádkové triggery jsou označeny klauzulí FOR EACH ROW o Pokud klauzule není přítomná, trigger je příkazový Podmínka za WHEN se může psát pouze u řádkových triggerů o U příkazových triggerů mohu podmínku psát v PL/SQL kódu za WHERE

23 Oracle- Syntax Proměnné OLD a NEW, popřípadě jejich přejmenování pomocí REFERENCING lze používat pouze u řádkových triggerů o Intuitivně je v nich uložen obsah řádku před a po změně

24 Oracle - Sémantika Pořadí spouštění triggerů je dáno následujícím algoritmem 1) Proveď příkazové triggery prováděné před spouštěcí událostí (BEFORE) 2) Pro každou řádku v příslušné tabulce: a) Proveď řádkové triggery prováděné před spouštěcí událostí (BEFORE) b) Proveď změnu příslušné řádky a zkontroluj, zda platí příslušná integritní omezení na úrovni řádku c) Proveď řádkové triggery prováděné po spouštěcí události (AFTER) 3) Zkontroluj, zda platí příslušná integritní omezení na úrovni příkazu 4) Proveď příkazové triggery prováděné po spouštěcí události (AFTER)

25 Oracle - Sémantika Pořadí triggerů, které jsou spouštěny ve stejném kroku předchozího algoritmu je určeno systémem o neexistuje způsob, kterým může programátor jejich pořadí ovlivnit Triggery mohou spouštět další triggery o maximální hloubka zanoření je 32 - slouží jako kontrola zacyklení o po přesažení této hloubky je vyvolaná vyjímka Po vyvolání vyjímky je zavolán ROLLBACK o pouze na úrovni příkazu, ne celé transakce

26 Oracle - Příklad CREATE TRIGGER Priobjednej AFTER UPDATE OF NaSklade ON Sklad WHEN (New.NaSklade < New.BodPriobjednani) FOR EACH ROW DECLARE NUMBER X BEGIN SELECT COUNT (*) INTO X FROM Objednavky WHERE Soucastka = New.Soucastka IF X = 0 THEN INSERT INTO Objednavky VALUES (New.Soucastka, New.PocetPriobjednani, SYSDATE) ENDIF END

27 Oracle - Příklad SKLAD: Události: T1:UPDATE SkladT2:UPDATE Sklad SET NaSklade = NaSklade - 70SET NaSklade = NaSklade- 60 WHERE Soucastka = 1WHERE Soucastka >= 1 SoucastkaNaSkladeBodPriobjednaniPocetPriobjednani 1200150100 2780500200 3450400120

28 Oracle - Příklad Oba příkazy T1 a T2 probíhají nezávisle o Příkaz T2 je prováděn již nad upravenou tabulkou Sklad Výsledek v tabulce Objednavky po T1 a T2 bude: SoučástkaPočetPriobjednaniDatum 11002013-10-15 31202013-10-15

29 Reálné systémy ●Starburst ●Oracle ●DB2 ●Chimera

30 DB2 - historie Vytvořeno IBM Snaha o precizní jednoznačnou sémantiku Využíva zkušeností ze staršího projektu Starburst

31 DB2 - Syntax Každý trigger smí být navázán pouze na jednu událost UPDATE smí být navázán na konkrétní sloupce Dělení triggerů je jako u Oracle o řádkové/příkazové o BEFORE/AFTER

32 DB2 - Syntax CREATE TRIGGER { BEFORE | AFTER } [ OF ] ON [ REFERENCING ] FOR EACH { ROW | STATEMENT } WHEN ( ) := { OLD | NEW | OLD_TABLE | NEW_TABLE} AS

33 DB2 - Syntax Proměnné OLD a NEW zastupují jako v Oracle aktualní řádek ( pří řádkovém triggeru ) před a po změně Proměnné OLD_TABLE a NEW_TABLE zastupují tabulku změněných řádků ( pří příkazovém triggeru ) před a po změně

34 DB2 - Sémantika BEFORE triggery mohou měnit data před jejich aktualizací, ale nemohou měnit obsah databáze Na jednu událost může být navázáno více triggerů, volány jsou pak podle data vytvoření

35 DB2 - Sémantika Pokud se triggery volají navzájem, použije se následující algoritmus: Pro příkaz S v akci A triggeru, který vyvolá událost E: 1) Pozastav provádění A a ulož její pracovní data na zásobník 2) Spočítej OLD a NEW vzhledem k E 3) Vykonej všechny BEFORE triggery vzhledem k E, popřípadě změň NEW 4) Aplikuj změny z NEW do databáze 5) Vykonej všechny AFTER triggery vzhledem k E. Pokud jejich akce spustí další triggery, celý proces rekurzivně opakuj 6) Vyber ze zásobníku pracovní data pro A a pokračuj v jejím vyhodnocování

36 DB2 - Sémantika V bodě 4 se při aplikování změn z NEW do databáze mohou porušit integritní omezení, které mohou opět vyvolat další triggery o postupuje se velmi podobně, jako v bodě 5 - rekurzivní zpracování triggerů

37 DB2 - Příklad Uvažme schéma s 3 tabulkami - Soucastky, Distributori a Audit. Tabulka Audit je na začátku prázdná V tabulce Soucastky je primární klíč Soucastka, v tabulce Distributori je primární klíč Distributor. SoucastkaDodavatelCena 1Adam150 2Bedrich500 3Megasklad400 4Adam800 DistributorMěstoStát AdamPitsburghPensilvánie BedrichMinneapolisMinnesota MegaskladAtlantaGeorgia

38 DB2 - Příklad Defaultním dodavatelem je Megasklad Je definován cizí klíč FOREIGN KEY (Dodavatel) REFERENCES Distributor ON DELETE SET DEFAULT

39 DB2 - Příklad CREATE TRIGGER JedenDodavatel BEFORE UPDATE OF Dodavatel ON Soucastky REFERENCING NEW AS N FOR EACH ROW WHEN (N.Dodavatel IS NULL) SIGNAL SQLSTATE ‘70005’ (‘Dodavatel nesmi byt NULL’)

40 DB2 - Příklad CREATE TRIGGER AuditDodavatelu AFTER UPDATE ON Soucastky REFERENCING OLD_TABLE AS OT FOR EACH STATEMENT INSERT INTO Audit VALUES (USER, CURRENT_DATE, (SELECT COUNT(*) FROM OT))

41 DB2 - Příklad Zvažme následující transakci T1 DELETE FROM Distributori WHERE Stat = ‘Pensilvanie’ Vymazání řádku distrubutora Adama způsobí změnu dodavatele u součástek 1 a 4. Trigger JedenDodavatel proběhne pro každý změněný řádek (1 a 4), ale ani u jednoho není splněna podmínka Trigger AuditDodavatelů proběhne pouze jednou a zaznamená, že aktuální uživatel dnes změnil 2 řádky

42 Reálné systémy ●Starburst ●Oracle ●DB2 ●Chimera

43 Chimera Objektově orientovaný databázový jazyk Obstarává tyto 3 základní části o definice datového modelu o dotazovací jazyk o jazyk aktivních pravidel (triggery)

44 Chimera - Definice datového modelu Objektově orientovaný Třídy (object classes) o základní stavební prvek o hierarchicky uspořádány Atributy o zachycují stav třídy o atomické typy (integer,string atd.) o jména tříd o konstruktory set, record a list

45 Chimera - Definice datového modelu define object class Zamestnanec attributes Jmeno: string, Plat: integer end; define object class Oddeleni attributes Nazev: string, Zamestnanci: set-of(Zamestnanec) ‏ end;

46 Chimera - Dotazovací jazyk Deklarativní dotazovací jazyk Základními stavebními prvky termy a formule Termy o atomické - proměnné a konstanty o složené - složené z atomických termů pomocí:  konstruktorů set, list, record  funkcí Chiméry jako jsou atributy, selektory či předdefinované operátory

47 Chimera - Dotazovací jazyk Formule o Atomické - složeny z predikátového symbolu a seznamu termů(jako parametry)  typy - integer(X)  třídy - Zamestnanec(X)  porovnání - X.Jmeno = “Jan”  náležení - Z in X.Oddeleni o Složené - skládány z atomických formulí pomocí disjunkce a negace, kde negaci lze aplikovat pouze na atomické formule Zamestnanec(X),Oddeleni(Y), Y.Nazev = “Hracky”, not ( X in Y.Zamestnanci )

48 Chimera - Procedurální výrazy select(cílový seznam where podmínka) o select(Z where Zamestnanec(Z), Z.jmeno = 'Jan') create(třída, hodnota, výstupní proměnná) o create(Zamestnanec, ['Jan', 55000], Z) delete(třída, proměnná) o delete(Zamestanec, Z) modify(název atributu, proměnná, term) o modify(Zamestnanec.Plat, Z, Z.plat * 0.96)

49 Chimera - Transakční řádky Seznam procedurálních výrazů oddělený čárkami a ukončený středníkem Viditelnost a hodnota proměnných definovaná právě transakční řádkou Jedná se o nejmenší změnu stavu vyvolávající trigger

50 Chimera - Syntaxe triggerů ::= define trigger [ for ] events condition actions [ { before | after } ] //nutno dodržet acyklicitu end ::= [ ] | [ ] ::=[ {event-consuming | event-preserving }] ::= [ {deferred | immediate }] ::= create | delete | modify [( )]

51 Chimera - Sémantika triggerů Targeted o uvedeno jméno třídy po klíčovém slovu for o lze na danou třídu odkazovat pomocí Self o eventy týkající se pouze této třídy, uvadíme pouze jako create, modify, delete Untargeted o eventy se týkají libovolné třídy, nutno uvádět plné znění například create(Zamestanci)

52 Chimera - Sémantika triggerů Okamžité(immediate) o volány po dokončení transakční řádky Odložené(deffered) o volány po příkazech commit či savepoint o mohou vyvolávat okamžité triggery, ty jsou v tomto případě zpracovávány jako triggery odložené

53 Chimera - Sémantika triggerů Význam pouze pokud je event vyvolán vícekrát v průběhu jedné transakce Event pohlcující (event-consuming) o prováděn pouze poprvé, poté je již přeskakován Event ponechávající (event-preserving) o prováděn pokaždé v rámci transakce

54 Chimera - zpracování triggerů Množina spuštěných triggerů (conflict set), stejně jako u Starburstu Algoritmus zpracování: o Dokud je množina spuštěných triggerů neprázdná dělej: i.Vyber trigger s nejvyšší prioritou a označ ho za nespuštěný ii.Vyhodnoť podmínku triggeru iii.Pokud je splněna, vykonej akci daného triggeru Upřesnění: Pokud je triggerů s nejvyšší prioritou více, systém použije interní uspořádání (deterministické), které není ovlivnitelné uživatelem. Pokud je trigger zařazen do fronty, máme narozdíl od Startbustu (viz net effect) jistotu, že tento trigger proběhne.

55 Chimera - Occurred and holds Binární predikáty umožňující zjistit identifikátory všech objektů, které byly ovlivněné danými eventy o Occured - vrací všechny ovlivněné objekty (resp. jejich identifikátory) o Holds - vrací pouze podmnožinu těchto objektů, založenou na průběhu net effect ( create, modify, modify, delete => žádný net effect) Syntaxe o ::= {occurred | holds } (, )

56 Chimera - Příklad Datový model define object class Zamestnanec attributes Jmeno: string, Plat: integer, Vedouci : Zamestnanec end; Třída Zaměstnanci { (o1,”Jan”,3500,o2), (o2,”Tomáš”,4500,null), (o3,”Robert”,4300,o2) } Transakce select(X where Zamestnanec(X),X.Jmeno = “Tomáš”),modify (Zamestnanec.Plat,X,5000); select(X where Zamestnanec(X),X.Jmeno = “Jan”),modify (Zamestnanec.Plat,X,5300);

57 Chimera - Příklad Defaultní nastavení - odložené a event pohlcující define trigger UpravPlat for Zamestnanec events create, modify(Plat) condition Self.Plat > Self.Vedouci.Plat actions modify(Zamestnanec.Plat,Self, Self.Vedouci.Plat) end;

58 Chimera - Příklad Okamžité vykonávání define immediate trigger ImmUpravPlat for Zamestnanec events create, modify(Plat) conditionoccurred(create, modify(Plat),Self) // pouze ovlivněné objekty Self.Plat > Self.Vedouci.Plat actions modify(Zamestnanec.Plat,Self,Self.Vedouci.Plat) end;

59 Využití aktivních databází Interní o údržba datové integrity o správa odvozených dat o zálohování dat o méně obvykle - správa verzí, správa zabezpečení či logování Externí (bussiness rules) o logika aplikace, která standardně bývá až na aplikační vrstvě o Alerters - pouze upozorní pověřenou osobu na výjimečnou situaci v databázi

60 Příklady využití Údržba integrity Údržba odvozených dat Zálohování Správa workflow Business rules

61 Údržba integrity Integritní omezení(constraints) vyjádřena predikáty, které musí databáze splňovat Vestavěné omezení - speciální konstrukt jazyka v datové definici (keys, unique,notnull atd.) Obecná omezení - specifikováno libovolným dotazem či predikátem o ne vždy podporováno, simulujeme pomocí aktivních pravidel

62 Údržba integrity událost - podmínka - nápravná akce nápravná akce dvojího typu : o rušící pravidla(abort rules) - zavolán rollback command  jednoduché, ale velmi časté rollbacky o opravná pravidla(repair rules) - definována akce, která opraví integritu dat  SQL 92 - CASCADE, RESTRICT, SET NULL, SET DEFAULT

63 Příklady využití Údržba integrity Údržba odvozených dat Zálohování Správa workflow Business rules

64 Údržba odvozených dat Pohled - jedná se o tabulku či třídu, odvozenou z dat v databázi na základě nějakého dotazu Odvozený atribut - atribut jehož hodnota je odvozena derivační formulí, rovnocenný jakémukoliv jinému atributu v databázi Odvozená data o virtuální - data spočítána při každém dotazu o materializovaná - data persistentně uložené v databázi  aktualizace pomocí aktivních pravidel

65 Údržba odvozených dat Materializace o obnova - odvozená tabulka, celá znovu přepočítána  velmi jednoduché - lze generovat automaticky,ale náročné na výpočet o inkrementální přístup - spočívá ve výpočtu negativních a pozitivních přírůstků, které jsou přidány respektive odebrány z daného pohledu  velmi složité - problémy hlavně s rekurzí

66 Příklady využití Údržba integrity Údržba odvozených dat Zálohování Správa workflow Business rules

67 Zálohování V podstatě se jedná o odvozená data, kdy se udržuje několik jejich kopií Distribuované systémy - dva a více databázových serverů udržují stejná data (problém se synchronizací) Primární a sekundární kopie o změny prováděny pouze na primární kopii, sekundární je read-only o capture module tyto změny propaguje na sekundární kopie (změny na kopii prováděny přes apply module) Symetrické zálohování o každý server je zároveň primární i sekundární kopií o při souběžných updatech dochází k nekonzistencím mezi kopiemi

68 Příklady využití Údržba integrity Údržba odvozených dat Zálohování Správa workflow Business rules

69 Správa workflow Pomocí aktivních pravidel lze řídit také například fungování celé společnosti (resp. rozdělování práce) Hledání náhrady za nedostupného zaměstnance pro důležitý úkol define triggger WF for Zamestnanec events modify(Zamestnanec.Dostupnost) condition Zamestnanec(Z), occurred(modify(Zamestnanec.Dostupnost),Z), Z.Dostupnost = FALSE, ukol(U), U.OdpovednyZam = Z, U.Typ =”Důležitý”, Zamestnanec(Z2), Z.Nahrada = Z2, Z2.Dostupnost = TRUE actions modify(Ukol.OdpovednyZam,U,Z2) end;

70 Příklady využití Údržba integrity Údržba odvozených dat Zálohování Správa workflow Business rules

71 Aktivní pravidla mohou nahrazovat skoro celou aplikační logiku Reagují na změny reálného světa Výhoda - logika je sdílena všemi aplikacemi postavenými nad touto databází Nevýhoda - jazyky pro aktivní pravidla, jsou velmi složité a programátorsky nepřívětivé EMS - italská elektrická distribuční síť ❖ veškerá pravidla pro přidávání uzlů či vyvažování toku jsou naprogramovány pomocí aktivních pravidel

72 Základní pojmy - shrnutí Událost – podmínka - akce událost o změna stavu o dotaz do databáze o naplánované události o lze volat i explicitně podmínka o databázový dotaz (TRUE pokud neprázdný výsledek, FALSE při prázdném) o databázový predikát

73 Základní pojmy - shrnutí akce o libovolná úprava dat o externí procedura o typicky: rollback či definovaná opravná akce

74 Základní pojmy - shrnutí Okamžité vykonávání(immediate) o vykonáno ihned po vyhodnocení podmínky Odložené vykonávání (deffered) o akce je vyvolána až na konci transakce (příkazem commit)

75 Závěr Velmi silný nástroj, vhodně rozšiřující možnosti databáze Podporováno všemi moderními databázovými systémy Nutno najít rozumnou míru mezi aplikační a databázovou vrstvou o aktivní pravidla - vhodné psát pouze kratší, jinak velmi nepřehledné


Stáhnout ppt "Aktivní databáze Šípek, Chudoba 15.10.2013. Obsah ●Zdroj ●Aktivní databáze - definice ●Reálné systémy ○ Starburst ○ Oracle ○ DB2 ○ Chimera ●Příklady použití."

Podobné prezentace


Reklamy Google