AP12 Organizace souborů
Zadání
(Schémata organizace souborů. Statické organizace souborů, sekvenční soubory, indexové a přímé organizace souborů, statické hašování. Implementace souborů. Dynamické organizace souborů, dynamické hašování, B-stromy a jejich varianty. Základy teorie informace, komprese dat)
Schémata organizace souborů
Cíl = umožnit optimálně řešit operace nad záznamy souboru nezávisle na konkrétním fyzickém zařízení vnější paměti
Schéma organizace souborů = způsob, jak jsou zakódovaná data počítačem uložená do paměti. Schéma organizace souboru je popis logické paměťové struktury, do níž lze zobrazit logický soubor, spolu s algoritmy operací nad touto strukturou. Ta je obvykle tvořena z logických stránek (bloků pevné délky) a může popisovat více provázaných log. souborů, z nichž primární soubor je ten, který obsahuje uživatelská data. Operace definované nad schématem org. souboru jsou kromě operací nad soubory ještě build, reorganization, open a close.
Proti němu stojí fyzické schéma souboru - struktura nad fyzickými soubory, nejblíže hardwaru je implementační schéma souboru.
Zajištění Vyváženosti struktury znamená zajištění omezení cesty při vyhledávání nějakým výrazem (zaručení asymptotické složitosti), navíc zaručení rovnoměrnosti zaplnění struktury - faktor naplnění stránek. Schémata, která splňují obě podmínky, se nazývají dynamická, ostatní jsou označována jako statická.
Logické schéma souboru – Obsahuje primární soubor a pomocné soubory (indexy, rejstříky…). Výběrem vhodného logického schématu souboru se snažíme dosáhnout minimalizace počtu přístupů do sekundární paměti (na disky) – ideální stav je 1 požadavek = 1 přístup.
Fyzické schéma souboru – Zobrazuje logické soubory do paměťových jednotek konkrétního použitého typu paměti.
Implementační schéma – Popisuje rozmístění dat na konkrétním uchovávacím médiu. Standardně řeší OS nezávisle na aplikacích
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.
Indexování v souborech
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 |
Implementace souborů
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
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
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ě.
B stromy a jejich varianty
Definice
strom = souvislý orientovaný acyklický (jednoduchý) graf
B strom = m-ární vyhledávací strom s omezujícími podmínkami (viz dále)
B+ strom = redundantní varianta B stromu
Vyhledávací B stromy a jejich varianty se používají pro efektivní ukládání a zpětné zpřístupňování dat. Nejčastěji jsou používány v databázích. Na B+ stromech jsou také založeny například souborové systémy XFS, ReiserFS či NTFS.
B strom
každý uzel až na kořen a listy má aspoň
potomků
kořen má aspoň 2 potomky, pokud není jediným uzlem stromu
uzel s (g ≤ m) potomky obsahuje (g − 1) vyhledávacích klíčů
všechny listy jsou na stejné úrovni, v listu je max. m − 1 klíčů
klíče se v celém stromu vyskytují právě jednou, záznamy jsou umístěny přímo v uzlech s klíči nebo jsou z nich adresované
vlevo od klíče je ukazatel na podstrom obsahující klíče menší než klíč v uzlu, vpravo od klíče je ukazatel na záznam a vedle něj ukazatel na podstrom obsahující klíče větší než klíč v uzlu
operace přidání, vyjmutí i vyhledávání prvku v B stromě probíhají v logaritmickém čase
B+ strom
záznamy s daty jsou adresovány pouze z listů
vnitřní uzly B+ stromu hrají roli indexu k listům (vytvářejí víceúrovňový řídký index listů)
ve vnitřních uzlech se hraniční klíče mohou opakovat
Výhody oproti B stromům:
uzly jsou menší o ukazatele dat, strom jde více do šířky, průchod stromem je rychlejší
vkládání a rušení záznamů je snadnější, jednodušší je celá implementace B+ stromu
každý list obsahuje odkaz na následující list (tedy listy jsou zřetězené) – umožňuje velice rychlé procházení celým stromem.
B* strom – Obdoba B stromu, která pracuje s uzly naplněnými minimálně do 2/3, místo 1/2 jako u klasického B stromu.
B# strom – Obdoba B+ stromu s povolenou rotací hodnot mezi sousedními uzly.
Trie – Klíče jsou uchovávány na cestách z kořene k externímu uzlu a nikoliv jako celky v jednotlivých uzlech. (Trie není m-ární vyhledávací strom.)
Definice
Teorie informace = větev matematiky zabývající se efektivností a přesností uchovávání, přenosu a reprezentace informace
Informace = to, co přijímáme formou textů, řeči, obrazy… (zprávami)
1 bit = ekvivalent volby mezi dvěma stejně pravděpodobnými zprávami
Entropie
Entropie je míra neurčitosti; snížením neurčitosti získáváme informaci, množství získané informace odpovídá velikosti odstraněné neurčitosti.
Vzorec na výpočet entropie
je pravděpodobnost výskytu symbolu s měřenou informací
je počet symbolů
je překvapení z výskytu daného symbolu i
Maximální neurčitost
Při stejné pravděpodobnosti výstupu každého z M symbolů je
Maximální neurčitost potom je
Kódování
Kódování = nahrazování jedné posloupnosti symbolů jinou posloupností symbolů (pořizování dat, šifrování, opravné kódy, komprese…).
Pro zobrazení každého symbolu zprávy potřebujeme alespoň
bitů, pokud nechceme snížit množství informace v zobrazené zprávě.
Kompresní teorém: Je-li H entropie zdroje, pak lze neztrátově komprimovat zdrojový text až do vyjádření každého symbolu v průměru H bity.
Shannon-Fanovo kódování – využívá pravděpodobnosti výskytu jednotlivých prvků a rekurzivně rozděluje vždy na dvě skupiny s prefixem 0 či 1
Huffmanovo kódování – symboly s vyšší pravděpodobností výskytu mají kratší kódová slova
Další kódování: Brailovo písmo, RLE kódování (náhrada opakujících se symbolů), Aritmetické kódování (pro malé abecedy)
Komprese dat
Definice
komprese dat = proces identifikace a odstraňování redundance v datech
Cílem komprese je minimalizovat velikost komprimovaných dat, ať už pro ukládání nebo přenášení po síti.
Dělení 1
neztrátová komprese – dekompresí se získají původní data (Huffmanovo kódování, Run-Length kódování…)
ztrátová komprese – za cenu zefektivnění komprese se snižují nároky na přesnost rekonstrukce (MP3, JPEG…)
Dělení 2
statická komprese – neměnný algoritmus, probíhá nezávisle na komprimovaných datech
adaptivní komprese – dynamicky se měnící algoritmus, specifický pro komprimovaná data
Dělení 3
fyzická komprese – ignoruje význam dat, odstraňuje se pouze formální redundance
logická komprese – zohledňuje význam komprimovaných dat, obvykle se jedná o ztrátovou kompresi
Typy kompresních metod
základní (intuitivní) techniky – Braillovo písmo, Run-Length kódování…
statistické metody – Huffmanovo kódování, Shannon-Fanovo kódování…
slovníkové metody – LZ77, LZ78, LZW…
další – MP3, JPEG, MPEG…
Předměty
Použitá literatura
Kam dál
Animace
Vypracuje
Otázku si přečetl pan RNDr. Vlastislav Dohnal a rámcově prošel. Jeho podněty pro doplnění textu, opravy nesrovnalostí a odstranění matoucích či k otázce se nevztahujících textů byly do otázky zaneseny. Tato kontrola je jen rámcová, stále se může stát, že v otázce zůstala zapomenutá chybka či nesrovnalost, vyučující za toto nenese odpovědnost, berte tuto rámcovou kontrolu jako formu pomoci od vyučujících pro studenty.
Nahoru
Diskuze
Co je to tedy to „schéma organizace souborů“ nějak jsem toasi nepochopil? chtělo by to možná v této části otázky pár příkladů. Takže, pokud někdo víte co a jak, pls doplňte. Díky
Diky.. :)
neplete se tady náhodou obrázek u „uspořádaný sekvenční soubor“ s „indexovaný soubor“?
jj.. na to uz upozornoval i pan Dohnal… zatim jsem u „usporadaneho sekvencniho souboru“ nechala ten obrazek oznaceny jako keysort, ktery je ve skriptech opravdu uveden u usporadaneho sekvencniho souboru a ktery zde v otazce puvodne byl, ale pridala jsem tam radeji i ten s oznacenim „retezene struktury“, ktery snad vice odpovida „usporadanemu sekvencnimu souboru“… a jeste to znovu resim s panem Dohnalem, jak to opravdu ma byt… brzy dam vedet vice info.
tak ten text a struktura odrazek byla opravena, snad je to ted u usporadaneho sekvencniho souboru uz v pohode a je jasne, co je co a proc.
Jinak pan Dohnal se jeste zminil, ze by bylo dobre u linearniho hasovani napsat zakladni princip, je tam ted dopsane tak nejak vsechno kolem, jen ten hlavni princip ne. Tedy jeste jsem na jeho podnet doplnila ten rozdil oproti rozsiritelnemu hasovani, ten je podstatny.
Ja jsem koukala na ty obrazky a chapu to, ale priznam se, ze ne natolik, abych to nejak strucne a jasne vystihla – takze ten princip kdyztak doplnte, kdo vi.
Mně osobně přijde, že je toho tady fakt halda a dá fušku najít to, co je fakt důležitý, takže osobně nejsem příznivcem dopisování čehokoliv, spíš bych byl pro odmazání
no asi to bude tim, ze tam to „fakt dulezity“ zrovna u toho linearniho hasovani chybi a proto by se to tam melo pridat
Osobne bych taky odmazavala, jenze to jen tak snadno nejde… kazdy to bude vysvetlovat po svem a to, co ty si zrovna odmazes, muze nekomu chybet a naopak (jen si vsimni, jak se treba jen my dva kolikrat u databazi neshodnem na tom, co je fakt dulezity :) ). Bohuzel tahle otazka je az moc rozsahle zadana, ale s tim uz asi nic nenadelame.
Asi máš pravdu
Celkom k veci materialy: http://www.ksi.mff.cuni.cz/~zemlicka/vyuka/DBI007/prednasky.html
Dovolil jsem si presunout „typy souboru“ o par podotazek vys. V hlave mi kompilator hlasil ze nezna pojmy homogeni a nehomogeni soubor, ptotoze tyhle pojmy byly nejprve v textu pouzivany a az pak deklarovany, tak snad je to ted trosku logictejsi.
A vubec cely text jsem trochu poprehazoval aby jedna lip odpovidal zadani otazky a jednak mi prislo ze to bylo takove rozhouskovane. Chvili se mluvilo o indexovani, pak o dynamicke organizaci a hasovani a pak zase skok zpet na indexovani a tak… Pokud to nekomu nedava smysl tak jak to je ted, tak se ozvete proc.
nie je ne Wikipedii = neexistuje?
Ku každej otázke som si doteraz čítal články na Wikipédii a prišli mi ako veľmi dobrá pomôcka ako naozaj pochopiť látke. Ťažko sa mi učí zo skrípt, kde sú iba pojmy a definície, či príklady, a chýba širší praktický kontext. Hlavne to, kde sa konkrétna vec využíva/využívala nebýva nikde zmienené.
S touto otázkou si neviem rady. Vôbec nesedí k tomu, čo o filesystéme a súboroch zatiaľ viem. A vôbec nesedí k tomu, čo je na danú tému na wikipédii. Konkrétne som našiel iba jeden odstavec (http://en.wikipedia.org/wiki/File_format), v ktorom sú súbory rozdelené podľa štruktúry na:
- Unstructured formats (raw memory dumps) - záznamy z operačnej pamäte priamo naflákané na disk, v súčasnosti sa nepoužíva
- Chunk-based formats - dáta sú uzavreté do chlievikov, každý chlievik obsahuje informáciu o veľkosti dát a podpis dát (hash?). Široko používaný koncept, napr. JPG, PNG obrázky. Hovoria ale, že aj XML môže byť považovaný za tento typ, ale tagy sa nemapujú priamo na záznamy na disku, jedná sa teda asi o čiste logickú štruktúru (?)
- Directory-based formats - adresárová štruktúra vrámci súboru, ISO, TIFF, asi aj ZIP a podobné. Teda stromová štruktúra (?)
Nejak si dávam dokopy, že toto rozdelenie je logická štruktúra súborov. Neviem sa nikde dopátrať k informáciám, ako sa v praxy logická štruktára mapuje na fyzickú. Príklady zo skrípt mi prídu, akoby logickú štruktúru ignorovali a boli ešte z dôb keď boli aplikácie a operačné systémy pevne zviazané s hardwarom.
Nejaké názory?
Ak som len slepý, odkážte ma na nejaký materiál, ktorý to rozoberá.
Budeš se muset spolehnout na slidy pana Staudka. Není náhodou, že se název této otázky shoduje s názvem předmětu PV062, který učí.