250 likes | 485 Views
Fizična organizacija podatkov. Razpored zapisov v datoteki (zapis vrstica tabele) zapisi spremenljivega formata število in tip zapisov ni vnaprej znan redko pri PB, saj konceptualna in notranja shema narekujeta format zapisa
E N D
Fizična organizacija podatkov Razpored zapisov v datoteki (zapis vrstica tabele) • zapisi spremenljivega formata • število in tip zapisov ni vnaprej znan • redko pri PB, saj konceptualna in notranja shema narekujeta format zapisa • nanaša (pojavlja) se pri pol-strukturiranih podatkih kot je XML (znotraj zapisov je zajet tudi format zapisa, t.i. ‘self describing’ data) • zapisi fiksnega formata (naš fokus!) • format zapisa je znan vnaprej (zapisan je v notranji shemi) • ločimo: • zapise, ki imajo polja fiksne dolžine ali • zapise, ki imajo polja spremenljive dolžine
Izhodišče:logična datoteka = možica zapisov istega tipa • zapis – skupina podatkovnih elementov, s katerimi opišemo posamezno dejstvo • podatkovni element - najmanjši del podatkov, ki ga ne moremo razstaviti na dva ali več delov, ne da bi pri tem izgubili pomen (ime, datum rojstva, ..) • istovrstna dejstva predstavljamo z enako oblikovanimi zapisi, ki pripadajo določenemu tipu zapisa • tip zapisa – formalizem, ki ga moramo poznati pri branju in oblikovanju zapisov; s tipom zapisa predstavimo: • strukturo zapisa(kateri podatkovni el. sestavljajo zapis) • vrsto in obliko podatkovnih elementov, ki sestavljajo zapise (kakšni so podatkovni elementi, ki sestavljajo zapis)
Predstavitev podatkovnih elementov • integer (2 bytes); primer 35= • boolean – primer: FALSE TRUE • real, float - n bitov za osnovo; m za eksponent • datum – primer: • Integer (število dni od 1. 1. 1900) • 8 znakov (DDMMLLLL) • čas – primer: • Integer (število sekund od polnoči) • 6 znakov (uummss) • datum & čas – realna števila • znaki – ASCII, Scan Code, Unicode, … - primer (8-bitni ASCII): • A • a • LF
Delitev zapisov glede na strukturo: • zapisi nespremenljivedolžine – primer: rojstni podatki • zapisi spremenljive dolžine- dopustno je ponavljanje posameznih podatkovnih elementov /denimo ponavljanje opravljanja izpitov :)/ v enem zapisu lahko predstavimo več dejstev hkrati – primer: podatki o opravljanju izpitov
Tip zapisa z nespremenljivo dolžino • <ime_tipa_zapisa> • služi za identifikacijo tipa; • z njim poimenujemo tudi logično datoteko, ki jo zapisi tega tipa sestavljajo tip <ime_tipa_zapisa> = (<ime pod el 1>:<tip_1>, <ime_pod_el_2>: tip_2>, ..... <ime_pod_el_n>:<tip_n>) • <tip_pod_el> • podaja način kodiranja in velikost pomnilnega prostora, ki ga pod. el. zaseda (znakovni(n), celoštevilčni, realni, ...) Primer: tip rojstva = ( ime: znakovni(10), datum : datumski, kraj: znakovni(20)) • <ime_podatkovnega_elementa> • služi za sklicevanje na podat. elemente v zapisih in za predstavitev strukture zapisov
Tip zapisa s spremenljivo dolžino • spremenljivost dolžine povzročajo ponavljajoči se podatkovni elementi znotraj enega zapisa • ponovljivost predstavimo z uporabo zavitih oklepajev tip <ime_tipa_zapisa> = (<ime_pod_el_1> : <tip_1>, {<ime_pod_el_2> : <tip_2>, {<ime_pod_el_3> : <tip_3>}}, <ime_pod_el_4> : <tip_4>) Primer: tip izpit = ( ime_dijaka : znakovni(10), { predmet : znakovni(3), ocena : celoštevilski})
zapisa =podatkovni element(i), na osnovi katerih je možna enolična identifikacija posameznih zapisov • dejstva morajo biti predstavljena z zapisi tako, da lahko njihove predstavitve ločimomed seboj ključ= <ime_pod_el_1>,..<ime_pod_el_m>):<vrsta_ključa> vrste ključev: • razločevalni(v datoteki ne smeta obstajati dva zapisa z enako vrednostjo ključa) – EMŠO, davčna številka • nerazločevalni -priimek • pri nekaterih vrstah fizičnih datotek ključ zapisa predstavlja osnovo za urejanje zapisov
Logična datoteka Fizična datoteka • logična datoteka • obstaja le kot koncept • nima neposredne fizične predstavitve • zapisi logičnih datotek sshranjujejo s pomočjo blokov fizičnih datotek • povezava med logičnimi in fizičnimi datotekami je preslikava: LD -> FD; • možnosti za preslikavo: • 1:1 • M:1 (MSAccess) • 1:M (Paradox) • M:N
Preslikava logični zapis fizični zapis logični zapisi – zapisi logičnih datotek – shranjujejo se v blokih fizičnih datoteke s pomočjo fizičnih zapisov struktura fizičnega zapisa: • je lahko enaka strukturi logičnega zapisa • je razširjena z meta podatki (kazalci, števci ponovljivosti podatkovnih elementov) • obsega le del podatkovnih elementov logičnega zapisa (logični zapis je predstavljen z dvema ali več fizičnimi zapisi)
logični zapis nespremenljive dolžine fizični zapisnespremenljive dolžine logični zapis spremenljive dolžine 2.1. fizični zapis spremenljive dolžine: pred ponavljajočimi podatkovnimi elementi oziroma skupinami ponovljivih podatkovnih elementov dodamo števce ponovljivosti tip <ime_tipa_zapisa> = (<ime_pe1> : <tip_1>, <števec_1> {<ime_pe2> : <tip_2>, <števec_2> {<ime_pe3> : <tip_3>}}, <ime_pe4> : <tip_4>) tip <ime_tipa_zapisa> = (<ime_pe1> : <tip_1>, {<ime_pe2> : <tip_2>, {<ime_pe3> : <tip_3>}}, <ime_pe4> : <tip_4>)
2.2. fizični zapis nespremenljive dolžine: 2.2.1. ponavljajo se celotni zapisi 2.2.2. uporabimo povezovanje zapisov s kazalci tip <FZ1> = (<ime_pe1> : <tip_1>, K1 : kazalec, <ime_pe3> : <tip_3>) tip <ime_tipa_zapisa> = (<ime_pe1> : <tip_1>, {<ime_pe2> : <tip_2>}, <ime_pe3> : <tip_3>) tip <FZ2> = (<ime_pe2> : <tip_2>, K2 : kazalec) primer ponavljanja celotnih zapisov
primer uporabe kazalcev Del logičnega zapisa, ki je fiksne dolžine + kazalec na del zapisa spremenljive dolžine Del logičnega zapisa, ki je spremenljive dolžine + kazalec na ostanek zapisa
Zapisi s podatkovnimi elementi fiksne dolžine => fizični zapis nespremenljive dolžine • dolžine in offseti (odmiki) podatkovnih elementov so konstantni, to lahko vnaprej izračunamo iz sheme • primer: CREATE TABLE Oseba (Sifra INT, Ime CHAR(10), Priimek CHAR (10)); // predpostavimo, da je int 4 bytno celo število Ime Priimek Sifra Zapis tabele Oseba
Shranjevanje zapisov nespremenljive dolžine v fizične bloke • posamezen fizičniblok razdelimo na enako velika polja • dolžina polj je prilagojena dolžini zapisov • fizičnega bloka (največkrat) ni mogoče razdeliti na polja brez ostanka v bloku ostane tudi nekaj neizkoriščenega prostora • to jefiksna delitev(relativne lege polj v vseh blokih so enake)
Zapisi s podatkovnimi elementi spremenljivke dolžine => fizični zapis spremenljive dolžine • Dolžin in odmikov podatkovnih elementov ne moremo izračunati iz sheme ( so ‘nepredvidljivi’) • Več možni pristopov • Pomembno: vsa polja (podatkovne elemente) spremenljive dolžine postavi na konec zapisa! • primer: CREATE TABLE Oseba (Sifra INT, Ime VARCHAR(10), Priimek VARCHAR (10)); • Pristop 1: uporabi ločila med pod. elementi • Pristop 2: uporabi tabelo odmikov
Fizični zapisi spremenljive dolžine (nad.) • Spreminjanje podatkov, če se s tem spreminja tudi dolžina podatkovnega elementa, je zahtevno • Razvrstitev (postavitev) zapisov v komercialnih DB • DB2, SQL Server, Informix, Sybase inačice uporabljajo tabele odmikov (DBMS v fiksni del zapisa shrani offset in dolžino polj spremenljive dolžine, odmik kaže na začetek polja v delu zapisa, ki je spremenljive dolžine) • Oracle: zapisi so strukturirani tako, kot da bi bila vsa polja potencialno spremenljive dolžine (zapis je zaporedje: (dolžina,podatki) parov, pri čemer posebna vrednost dolžine opredeljuje NULL vrednost) • Podatkovni elementi tipa LOB (large objects) – slike, glasba, … CREATE TABLE Oseba (Sifra INT, Ime CHAR(10), Priimek CHAR (10), Slika BLOB(32000)); • DBMS samodejno shrani LOB podatek na neko ‘drugo’ mesto, ta postopek je uporabniku neviden; konceptualno gledano, DBMS razdeli tabelo na dva dela: Oseba (Sifra, Ime, Priimek, ID_slika) in Slika(ID_slika, slika)
polje1 polje2 polje3 polje4 polje5 p61 p62 polje7 Shranjevanje zapisov spremenljive dolžine v fizične bloke – dinamična delitev • če želimo izkoristiti blok v celoti • če shranjujemo zapise spremenljive dolžine • če shranjujemo zapise, ki so daljši od fizičnih blokov nekatera polja se delijo preko dveh ali več logično sosednjih blokov. polje8 polje1 polje2 p31 p32 polje4 fizični blok 1 fizični blok 2 • to jedinamična delitev • izvede se ob vpisu posameznega zapisa v fizično datoteko
Označevanje prostih zapisov znotraj bloka • status polja: zasedeno (vsebuje zapis) / prosto a) uporabimo posebno oznako • oznako zapiši na začetek prostega polja • pozor: z uporabo oznake je omejena dopustna vrednost zapisa - veljaven zapis se ne sme pričeti z vrednostjo, ki pripada omenjeni oznaki! • b) uporabimo bitno sliko • vsakemu polju priredi bit:(1 - polje zasedeno; 0 – prosto) • bitna slika sodi med meta podatke, ki so zapisani na začetku (koncu) bloka metapodatki zmanjšajo efektivno kapaciteto fizičnega bloka
NSM oz. N-ary Storage Model • Uporablja ga večina komercialnih SUPB-jev • Zapisi se shranjujejo od začetka bloka naprej • Na koncu vsakega bloka je t.i. ‘slot directory’, namen: • Lociranje (iskanje) zapisov in upravljanje z nezasedenim prostorom bloka • Določitev začetka/konca podatkovnih elementov spremenljive dolžine • Opcije pri spreminjanju podatkov • Reorganizacija po izvedbi vsakega brisanja / spreminjanja podatkov izognemo se ‘luknjam’ med podatki v povprečju moramo prepisati ½ bloka • Za zapise fiksne dolžine: reorganizacija po brisanju ( v slot direktoriju imej kazalec na prvo prosto polje) • Sploh ne izvajaj reorganizacije: v slot direktoriju hrani bitno sliko, ki kaže zasedenost/nezasedenost posameznih zapisov
Zvrsti datotek (1)goste / redke Glede na pojavljanje prostih polj v fizični datoteki ločimo: • goste datoteke - prosta polja se pojavljajo le v zadnjem delu logično zadnjega fizičnega bloka, sicer pa vsa polja vsebujejo zapise, • redke datoteke- prosta polja se lahko pojavljajo v kateremukoli fizičnem bloku Pri istem številu zapisov obsega gosta datoteka v splošnem manj fizičnih blokov kot redka datoteka.
Zvrsti datotek (2)vezani / nevezani zapisi Glede na to, ali smemo zapis, ki je bil ob dodajanju v datoteko shranjen v določeno polje, premakniti kdaj kasneje v kako drugo polje, s čimer mu spremenimo naslov ločimo: • vezane zapise- zapisi so vezani na polje, v katerega so shranjeni, ker so naslovi polj v katerih se nahajajo shranjeni kot kazalci v drugih zapisih. Če bi vezani zapisi zamenjali svoj naslov, bi bili s pomočjo prvotnega naslova izgubljeni (denimo, če je ključ zapisa podatek tipa autoincrement in velja, da je fizični naslov enak logičnemu naslovu) • nevezane zapise- pri nevezanih zapisi ni omejitve glede zamenjave polj. Po potrebi se lahko premaknejo v katerokoli polje, le da ostanejo v zanje namenjenih blokih.
Operacije nad zapisi ažuriranje = spreminjanje vsebine logičnih datotek • obsega dodajanje novih zapisov ter spreminjanje in brisanje obstoječih zapisov. • Logična datoteka ima svojo fizično predstavitev v obliki ene ali več fizičnih datotek posamezna operacija ažuriranja logične datoteke se dejansko izvede kot eno ali več ažuriranj fizičnih datotek. Štiri osnovne operacije nad zapisi fizičnih datotek: • iskanje • dodajanje • spreminjanje • brisanje
1. iskanje • osnovna operacija • sestavni del vseh operacij ažuriranj • iskanje = iskanje naslova polja, v katerem se (naj bi se) nahajal iskani zapis oz. iskanje naslova polja, v katerega želimo shraniti zapis, ki se dodaja datoteki. • k iskanju prištevamo tudi branje fizičnega bloka, v katerem se polje s poiskanim naslovom nahaja, v datotečni vmesnik • osnova za iskanje zapisa je lahko: • vrednost enega ali več podatkovnih elementov, pogosto ključa, ki jih iskani zapis ali zapis, ki ga dodajamo datoteki vsebuje • naslov polja ali fizičnega bloka ali skupine fizičnih blokov, ki vsebuje ali naj bi vseboval zapis • kombinacija vrednosti podatkovnih elementov in naslovov
2. dodajanje • poišči ustrezno prosto polje, v katerega (po kriteriju urejenosti datoteke) sodi novi zapis • vpiši zapis v poiskano polje v fizičnem bloku, ki se je v okviru iskanja prenesel v datotečni vmesnik • prepiši fizični blok iz datotečnega vmesnika na prejšnjo lokacijo na disku 3. brisanje • poišči polje z zapisom • v fizičnem bloku označi, da je polje prazno • prepiši fizični blok iz datotečnega vmesnika nazaj na disk 4. spreminjanje • podobno brisanju - polje z zapisom se ne označi kot prosto, pač se vanj vpiše nova vsebina • (pogoj: da ne spremenimo vrednosti ključa zapisa; če nameravamo spremeniti vrednost ključa, izvedemo najprej brisanje prvotnega zapisa in nato dodajanje novega/spremenjenega zapisa)