Toto je starší verze dokumentu!
—-
IN-POS 3. Databáze
Zadání
Kódování dat, kompresní kódování dat, organizace souborů dat.
Indexování a hašování, bitmapové indexy, dynamické hašování.
Vyhodnocení dotazů, transformační pravidla, statistiky a odhady.
Optimalizace dotazů a schématu.
Zabezpečení báze dat, přístupová práva.
Transakce, řízení souběžných transakcí, systémy obnovy transakcí po výpadku.
Vypracování
: doladit, doplnit, zpřehlednit
Kódování dat
Kódování = Proces nahrazování symbolů (resp. jejich posloupností) zprávy symboly (resp. jejich posloupností) nabývajících znaků cílové (kódovací) abecedy.
Množství informace
Množství získané informace odpovídá velikosti odstraněné neurčitosti získáním informace.
Pro
je jednotkou bit.
Entropie
Neurčitost zdroje zprávy je rovna množství informace v ní obsažení. (Neurčitost je přijetím zprávy odstraněna.)
Abeceda = konečná množina znaků (prvků abecedy, písmen,…)
Kódové slovo = slovo (posloupnost znaků) v kódové abecedě
Kódování = funkce
Kód = kódem daného kódování se rozumí obor hodnot zobrazení K
Klasifikace kódů
Kód s kódovými slovy pevné délky.
Kód s kódovými slovy proměnlivé délky.
stupeň (rate) kódu = průměrný počet bitů použitých pro kódování zdrojových znaků v tomto kódu.
optimální kód má stupeň minimálně převyšující množství informace obsažené v symbole zdrojových zpráv.
Nesingulární kód = jeho kódovací funkce je prostá
Jednoznačně dekódovatelný kód = Všechny možné řetězce jsou jednoznačně dekódovatelné
Prefixový kód = Bezprostředně jednoznačně dekódovatelný kód.
Minimální kódování
Př.:
A = 1 , C = 01 , G = 000 a T =001
např. řetětzec 8 symbolů ACATGAAC je kódovaný 14 bity:
10110010001101
tj. v průměru

b/symbol
Kompresní kódování dat
Cílem:
Kraftova nerovnost
Prefixový q-ární kód s délkami kódových slov d1,d2,…,dm existuje právě tehdy, když je splněna Kraftova nerovnost:
McMillanova veta
Kraftova nerovnost platí pro libovolné jednoznačně dekódovatelné kódování.
Eliasovy kódy
Eliasův kód C1
Kódování celých čísel u kterých není předem známá horní hranice.
Zapíšeme číslo dvojkově.
Odečteme 1 od počtu bitů zapsaných v kroku 1 a na začátek připojíme takový počet nul.
Prefix 0 při dekódování určuje délku binární reprezentace.
Př.:
Eliasův kód C2
Přeuspořádání C1.
Př.:

=
00
01
1
Eliasův kód C3
Vyjádření délky kódového slova pomocí C2.
Př.:

(

)

= 6 bitů

=
00110

=
01
00
1

=
0100110010
Komprese
Komprese = Kódování zprávy délky P(X) [b] na zprávu délky L(X) [b]
Kompresní poměr = L(X)/O(X)
Kompresní faktor = O(X)/L(X)
Kompresní zisk = (O(X)-L(X))/O(X)
Redundance zprávy = R(X) = O(X) - H(X)
Redundance komprimované zprávy = R'(X) = L(X) - H(X)
Statická komprese
Adaptivní komprese
Fyzická komprese
Logická komprese
Kompresní metody
Základní metody
Brailovo písmo
Baudotův kód: 5bit kód, číslicová/písmenová změna
RLE (Run Length Encoding): náhrada opakujících se sousedních symbolů čítačem opakování a specifikací opakovaného symbolu
Kódování podle Bentleyho (Move-to-Front Coding): Dynamicky se tvořící abeceda
Aritmetické kódování
Nekóduje jednotlivé symboly zprávy, ale používá jedno kódové slovo pro zakódování celé zprávy.
LZW
Používá se samostatný dynamicky vytvářený slovník.
Potenciální elementy slovníku jsou v kódové knize přednastaveny.
Výstupem je jediný údaj – index vzoru ve slovníku.
Organizace souborů dat
Databáze
databáze = kolekce vzájemně explicitně souvisejících dat
pole/položka/atribut základní prvek dat
záznam = strukturovaná kolekce polí
soubor = pojmenovaná kolekce příbuzných záznamů
Systém souborů
Požadavky na systém souborů
umožnit uživatelům/procesům manipulaci s daty na vnějších pamětech
zajišťovat validnost dat, eliminovat ztrátu dat
souběžná činnost více uživatelů/aplikací
podpora různých zařízení pomocí definovaného
API
1. Statické organizace souborů
homogenní soubor – hodnoty položek jsou primitivní typy, všechny záznamy jsou jednoho typu
nehomogenní soubor – hodnoty položek jeho záznamů nejsou primitivní typy nebo záznamy nejsou jednoho typu
Do statické organizace souborů patří:
Ukázka uspořádaného sekvenčního souboru – keysort:
Ukázka uspořádaného sekvenčního souboru – řetězené struktury:
index-sekvenční soubor
části: primární soubor, index a oblast přetečení
primární soubor je seřazený podle primárního klíče, ke kterému je vytvořena struktura indexů
2 možné přístupy – indexový i sekvenční
Indexem se vymezuje oblast stránek v primárním souboru, kde záznam může ležet, tato oblast se prohlíží sekvenčně
buckety pro přesahy, nutná občasná reorganizace
indexovaný soubor
seřadí se index, primární soubor se záznamy je neseřazený
Indexovaný soubor znamená primární soubor plus indexy pro různé vyhledávací klíče. Neindexují se už stránky, ale přímo záznamy, a proto primární soubor nemusí být nutně seřazený. Index může být podobný jako u index-sekvenčního souboru, pro záznamy se stejným klíčem je ale vhodné, aby byly na všech úrovních indexu kromě poslední sloučené. Při aktualizaci se nepoužívá oblast přetečení, mění se pouze index.
2. Dynamické organizace souborů
Motivace: změny dat neznamenají velké (globální) reorganizace, které jsou drahé, ale spíše reorganizace lokální.
B-strom
dynamický haš soubor
Schéma organizace souborů
Logické schéma
logická paměť se člení na logické stránky (sekvenční/hierarchické uspořádání)
logická paměť obsahuje primární soubory i sekundární (pomocné) soubory (indexy, rejstříky)
Fyzické schéma
Implementační schéma
Definice
soubor 1 = pojmenovaná kolekce souvisejících záznamů
soubor 2 = logická paměťová jednotka zobrazovaná operačním systémem do fyzického paměťového zařízení
záznam = kolekce atributů charakterizujících jistý objekt
adresář = kolekce dat obsahující informace o souborech uchovávaných na disku (jméno, typ, adresa, délka, maximální délka, čas posledního přístupu…)
volné formátování – sekvenčně řazené záznamy pevné i proměnlivé délky
komplexní formátování – soubor obsahuje vhodné řídící struktury nebo se k záznamům přistupuje přes přístupové funkce (B-stromy, haše…)
Uložení souborů na disku
souvislá alokace datových bloků
alokace datových bloků pomocí zřetězeného seznamu
alokace datových bloků pomocí tabulky
i-nodes
i-node je struktura, která obsahuje jak atributy souboru, tak adresy datových bloků, ve kterých je uložen obsah souboru
1-úrovňový adresář
Jediný adresář v celém systému.
2-úrovňový adresář
➕ Separace adresářů a uživatelů. (cesta user/soubor)
➕ Uživatelé mohou stejně pojmenovat různé soubory.
➕ efektivní hledání
➖ neřeší se problém seskupování souborů
➖ nelze sdílet
Inode
Řídící struktura obsahující klíčové informace potřebné pro oeprační systém při správě konkrétního souboru.
Implementace systému souborů
File Allocation Table (FAT)
= vázané přidělování diskového prostoru
Indexování a hašování
procházení přímo záznamů je při operacích velice pomalé – indexy mají řádově menší velikost než samotné záznamy a jejich prohledávání je výrazně rychlejší
díky menší velikosti je možné indexy držet v operační paměti bez nutnosti přístupu na disk
často stačí pro vyřešení některých dotazů zpřístupnit pouze malou část záznamů – na základě indexů je možné efektivně provádět filtrování
forma indexu: { vyhledávací klíč ; ukazatel na záznam }
typy indexů:
řádné, lineární indexy – v tabulce uspořádané dvojice { vyhledávací klíč ; ukazatel na záznam } podle hodnoty vyhl. klíče
hašované indexy – využití hašovací funkce vyhledávacího klíče
stromové indexy – využití grafové struktury strom
indexové bitové mapy – pozice bitů v bitovém vektoru určují lokality záznamů
indexy mohou být víceúrovňové – „index do indexu“ – nejnižší úroveň může být přímo primární soubor, výše jsou řídké indexy
Řádné indexy
Obvykle pokud se mluví o indexech, jsou myšleny řádné.
Dělení 1
primární index – podle jeho klíče je uspořádán primární soubor se záznamy; může být hustý nebo řídký
sekundární index – určený pro dotazy založené na jiném vyhledávacím klíči než na primárním; musí být hustý
Dělení 2
hustý – indexový záznam pro každou hodnotu vyhledávacího klíče. Typicky bývá uspořádán podle hodnoty klíče
řídký – indexový záznam pouze pro některé hodnoty vyhledávacího klíče; použitelné pouze v případě, kdy je soubor podle tohoto klíče uspořádán
Příklad
Uložený soubor se záznamy:
ID (2B) | Jméno (20B) | Rok narození (2B) | Místo narození (16B) | Telefon (4B) | Bydliště (16B) |
1 | Bílá Alena | 1972 | Ostrava | xxxxxxxx | Brno |
2 | Novák Jan | 1952 | Praha | 123456789 | Kladno |
3 | Novotný Tomáš | 1987 | Brno | 565656565 | Vyškov |
4 | Procházka Petr | 1964 | Brno | 100001011 | Řestoky |
Hustý index pro atribut jméno:
Jméno | ID |
Bílá Alena | 1 |
Novák Jan | 2 |
Novotný Tomáš | 3 |
Procházka Petr | 4 |
Pokud chceme vyhledat místo narození Tomáše Novotného, pak je při sekvenčním prohledávání nutné načíst 2 · (2 B + 20 B + 2 B + 16 B + 4 B + 16 B) + 2 B + 20 B + 2 B + 16 B = 160 B. Při použití hustého indexu stačí načíst 3 · (20 B + 2 B) + 2 B + 20 B + 2 B + 16 B = 106 B. Pokud je index uložen v operační paměti, pak v obou případech stačí pouze jeden přístup na disk, avšak v prvním případě bude třeba číst výrazně více dat.
Řídký index pro atribut jméno:
Jméno | ID |
Bílá Alena | 1 |
Novotný Tomáš | 3 |
Pokud je požadavek na vyhledání například Jana Nováka, nalezne se poslední záznam v uspořádání před ním (Alena Bílá) a dál se postupuje sekvenčně.
Sekundární index pro atribut místo narození:
Místo narození | ID |
Brno | 3,4 |
Ostrava | 1 |
Praha | 2 |
Hašování
Definice
hašovací funkce (obecně) = převedení libovolně dlouhého vstupu na výstup pevné délky
hašovací funkce (ve smyslu organizace souborů) = funkce řešící přístup k záznamům souboru s konstantní složitostí
kolize = situace, kdy je pro více záznamů spočítána stejná adresa
Perfektní hašovací funkce – hašovací funkce h, která je prostá.
Požadované vlastnosti hašovací funkce:
Statické hašování
používá se u souborů, které procházejí jen minimem změn
případné změny mohou negativně ovlivnit efektivitu hašování – pokud se sejde na stejné adrese více záznamů než je kapacita bucketu, vyhledávání v rámci těchto záznamů má lineární složitost
Dynamické hašování
k výpočtu adresy se používá pouze prvních i bitů z výstupu hašovací funkce; toto i se dynamicky mění – pokud je potřeba více adres, tak se zvyšuje, naopak při malém počtu se i zmenšuje
používá se u souborů s proměnným počtem záznamů
buckety jsou naplněné rovnoměrně – pokud jsou plné, tak se štěpí, pokud jsou prázdné, tak se spojují
Druhy:
hašovací funkce rozmisťuje záznamy do kapes (kapsa = záznamy s jistou podmnožinou klíčů, vymezuje je hašovací funkce)
jako index v adresáři kapes se používá dynamicky určovaný prefix výsledku hašovací funkce h(k)
délku indexu vymezuje globální hloubka adresy kapsy
štěpení
globální hloubka > lokální hloubka – na blok ukazuje více ukazatelů, jednoduše se rozdělí na dva
globální hloubka = lokální hloubka – musí vzniknout nová kapsa a také se zdvojnásobí rozměr adresáře kapes
řeší nedostatky rozšiřitelného hašování za cenu vyšší režie dané manipulací s přetokovými kapsami
počet kapes udržuje tak, aby byly naplněny z např. 80 %
rozdíl oproti rozšiřitelnému hašování: nemusí se vytvářet ani udržovat adresář kapes, přesto počet kapes roste lineárně.
Dotazy
Vyhodnocení dotazu
Postup zpracování a optimalizace dotazu:
dotaz
syntaktický strom dotazu
logický plán dotazu - v pojmech relační algebry
vylepšený logický plán dotazu
logický plán dotazu s velikostmi - v PostgreSQL lze zobrazit příkazem EXPLAIN
fyzický plán dotazu
vyhodnocení
Dotaz se nejprve pomocí parseru převede na syntaktický strom reprezentující strukturu dotazu. Ten se po té zpracuje do výrazů relační algebry (logický plán dotazu). Pomocí transformačních pravidel (kombinace přirozeného spojení, kartézského součinu, sjednocení, selekce a projekce) dále vznikne vylepšený logický plán. Nyní se za pomocí různých statistik (počet záznamů, velikost záznamů v bajtech, počet obsazených bloků, počet unikátních hodnot daného atributu) odhadnou velikosti výsledků, které ovlivňují odhad ceny provedení. Následně se logický plán transformuje na fyzický plán, který určí pořadí operací nutných k vykonání. Porovnají se různé fyzické plány, odhadnou se náklady (velikost výsledků, počet V/V operací) a zvolí se nejlevnější. Nakonec se daný plán provede a tím se získá výsledek.
Selekce
Konjunkci podmínek lze nahradit dvěma následnými selekcemi, nebo průnikem dvou selekcí.
Disjunkci podmínek lze nahradit sjednocením dvou selekcí.
Relace jsou multimnožiny!
Vhodné transformace
selekce co nejdříve; nejblíže relacím
projekce co nejdříve; nejblíže relacím
eliminace společných podvýrazů
eliminace duplicit
Statistiky a odhady
Koncept Iterátoru
➕ výsledek nemusí být vygenerován „naráz“
➕ výsledek nezabírá paměť
➕ výsledek nemusí být ukládán
➕ operace lze řetězit (pipelining)
Optimalizace dotazů a schématu
Ladění dotazu
Optimalizace schématu
1NF
Všechny atributy jsou atomické.
2NF
Všechny atributy závisí na celém klíči.
3NF
Všechny atributy závisí přímo na klíči.
Boyce-Codd NF
Pro všechny funkční závislosti A→B platí jedno z následujících:
Zabezpečení báze dat
Přístupová práva
Uložené procedury
kontext provádění:
vlastník
volající
„určený uživatel“
Transakce
Transakce je posloupnost operací (DML příkazů), které převedou datové schéma z jednoho konzistentního stavu do druhého (zpřístupňuje a aktualizuje data). Platí o ní, že je ACID:
Atomic (atomičnost) – transakce se celá provede nebo se celá zruší
Consistency (konzistence) – po dokončení transakce je databáze konzistentní
Isolation (izolovanost) – různé transakce o sobě vzájemně nevědí
Durability (trvanlivost) – po ukončení transakce jsou data trvale uložena
Více transakcí může být spouštěno současně, může však dojít k uváznutí (deadlocku). Chronologické pořadí provádění instrukcí souběžných transakcí je předem určeno pomocí plánu.
Každá transakce může nabývat těchto stavů: aktivní, částečně potvrzená, chybující, zrušená a potvrzená. Pokud byla transakce zrušena, je možné ji znovu spustit (nedošlo-li k logické chybě) nebo zamítnout.
Řízení souběžných transakcí
Plánovače
Souběžné zpracování (zajišťuje izolovanost)
zámky:
exkluzivní – jen jedna transakce čte a píše,
sdílený (shared) – více čtení, žádný write
(v ideálním případě se rovná idální serializaci)
zámky zpravuje správce zámků a transakce s mím mluví protokolem
Dvoufázový transakční protokol na bázi zamykání (růstová fáze - zamykání, couvací fáze - uvolňování po provedení transakce)
Grafový (stromový) protokol řízení souběhu transakcí (jednofázový, zná pořadí přístupu transakcí k datům)
oba pesimistické plánovače
správa zámků představuje netriviální režii.
Časová razítka – jiné řešení transakce mají čas, kdy vznikly. Nejstarší jde nejdřív. Pesimistické plánování
Protokol řízení souběhu transakcí na bázi validace (optimistický plánovač). Na konci transakce se zvaliduje, zda došlo ke konfliktu, pokud ano, jedna transakce se abortuje.
Systémy obnovy transakcí po výpadku
Klasifikace výpadků
výpadek transakce
zhroucení systému
porucha disku
Pro obnovu výpadku požadujeme, aby tranakce byly atomické, databáze konzistentní.
Žurnálování (log, deník)
O prováděných tranakcích (a jejích operacích) si vedu záznam v žurnálu.
Při výpadku můžu použít žurnál k REDO, UNDO…
Místo žurnálování můžu použít redundanci (RAID)
Undo logging
V případě výpadku se některé operace zruší (z nedokončených transakcí)
Pro každou akci vytvoř v žurnálu záznam obsahující starou hodnotu
Před změnou x na disku musí být na disku záznamy žurnálu týkající se x - Tzv. write ahead logging (WAL)
Před vytvořením záznamu <commit> v žurnálu musí být všechny zápisy transakce uloženy na disku.
Redo logging
V případě výpadku se některé operace dokončí
Změny později provedené transakcí jsou ukládány Tj. při potvrzení (commit) – Ušetření zápisů na disk
Při obnově jsou ignorovány nedokončené transakce
Vyžaduje uložení žurnálu před uložením změn v DB.
Check points
pravidelné ukládání kontrolních stavů databáze pro případné pozdější obnovení
něco jako otisky DB , aby se při obnově nemusely dělat od začátku
také dálají redo, undo
Zdroje
Nahoru