1 / 22

Structuri de indecși

Structuri de indecși. Introducere. Mecanismele de indexare sunt utilizate pentru a mari viteza accesului la datele dorite. Exemplu: O structură de index pentru un fișier al bazei de date funcționează într-o manieră asemenătoare indexului unui cărți. Există două tipuri de indecși:

keira
Download Presentation

Structuri de indecși

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Structuri de indecși

  2. Introducere • Mecanismele de indexare sunt utilizate pentru a mari viteza accesului la datele dorite. • Exemplu: O structură de index pentru un fișier al bazei de date funcționează într-o manieră asemenătoare indexului unui cărți. • Există două tipuri de indecși: • Indecși ordonați-valorile sunt ordonate. • Indecși dispersați-valorile sunt distribuite uniform în cadrul unui grup pe baza unei funcții de dispersie.

  3. Concepte de bază • Cheie de căutare- un atribut (sau un set de atribute) folosit pentru a căuta înregistrările într-un fișier. • Cheia de căutare este diferită de cheia primară sau cheia candidat sau supercheia • Fișierul de index este de dimensiune mult mai mică decât fișierul original. • Fișierul index conține înregistrări de forma: pointer cheie de căutare

  4. Metrici de evaluare a indecșilor • Tipurile de acces: tipurile de acces care sunt suportate eficient. • Timpul de acces: timpul necesar căutării unor date. • Timpul de inserare: timpul necesar inserării unei noi date; aceasta include timpul necesar inserării corecte a noii date împreună cu timpul necesar modificării structurii de index. • Timpul de ștergere: timpul necesar ștergerii unei date; aceasta include timpul necesar ștergerii datei respective împreună cu timpul necesar modificării structurii de index. • Spațiul ocupat de index

  5. Indecși ordonați • Fiecare structură de index este asociată cu o cheie de căutare. Înregistrările dintr-un fișier indexat ordonat sunt ordonate după cheia de căutare. • Un fișier poate avea mai mulți indecși asociați cu mai multe chei de căutare. • Index grupat (clustering index) este indexul a cărui cheie de căutare definește chiar ordinea în fișierul de date. • Indecșii grupați sunt numiți și indecși primari; • Cheia indexului primar este de obicei, dar nu necesar, cheia primară a fișierului. • Indecși secundari- Indecșii a căror cheie de căutare este diferită de cheia după care este ordonat fișierul.

  6. Indecși denși și rari • Indecși denși: • există o înregistrare în fișierul de index pentru fiecare cheie de căutare din fișier; • restul înregistrărilor cu aceeași valoare a cheii sunt stocate secvențial după prima înregistrare.

  7. Indecși denși și rari • Indecși rari: o înregistrare din fișierul de index apare numai pentru anumite valori ale cheii de căutare. • Pentru a localiza o înregistrare din fișier cu valorea cheii de cautare K: • se caută intarea din index cu valoarea cheii de căutare cea mai mare sau egală < K; • se începe căutarea de la înregistrarea adresată de intrarea găsită în fișierul de index, urmărind pointerii din index până la găsirea înregistrării dorite.

  8. Indecși denși și rari

  9. Indecși multinivel • Chiar dacă se folosește index rar, fișierul index poate deveni prea mare pentru a fi procesat eficient. • Dacă indexul este suficient de mic să fie stocat în memorie, timpul de căutare a unei înregistrari este mic. • Dacă indexul este mare și trebuie stocat pe disk, o căutare pentru o anumită intrare necesită citirea a câtorva blocuri. • Căutarea binară poate fi folosită pentru a găsi intrarea dorită, dar va avea costuri destul de mari.

  10. Indecși multinivel • Exemplu: Dacă am avea un fișier cu 100000 de înregistrări, cu 10 înregistrări în fiecare bloc, și o intrare în index fiecare bloc, fișierul index va avea 10000 de înregistrări. Inregistrările din index sunt mai mici ca dimensiune decât cele din fișier, deci presupunem că avem 100 de înregistrări index în fiecare bloc. Astfel, indexul va avea 100 de blocuri. • De exemplu, pentru b blocuri in fișierul de index, căutarea binară necesită [log2b] blocuri pentru a fi citite. • Pentru fișierul de index care conține 100 de blocuri, vor fi citite 7 blocuri; într-un sistem în care citirea unui bloc dureaza 30 milisecunde, căutarea va dura 210 milisecunde, ceea ce este mult. • Pentru a rezolva această problemă, fișierul de index poate fi tratat ca orice fișier secvențial și se poate construi un index rar pe un index grupat ca în figură.

  11. Indecși multinivel • Pentru a căuta o înregistrare, se face o căutare binară în fișierul indexului extern pentru a găsi înregistrarea a cărei cheie de căutare are valorea cea mai mare sau egală cu cheia căutată. • Pointerul va adresa blocul din indexul interior. Se va scana acest bloc până când se găsește înregistrarea dorită. • Pointerul asociat cu această înregistrare va adresa blocul dorit din fișierul care conține înregistrarea pe care o căutăm. Folosind indexarea cu 2 nivele s-a citit numai un bloc în fișierul de index în loc de 7 blocuri. Se pot construi oricâte nivele avem nevoie. • Căutarea înregistrărilor într-un index multinivel necesită mult mai puține operații de I/O decât ar necesita căutarea binară. Fiecare nivel din index corespunde unei unități fizice de stocare.

  12. Modificarea indecsilor-Inserarea • Inserarea. Prima dată, sistemul efectuează o căutare folosind cheia de căutare care apare în înregistrarea care trebuie inserată. Acțiunile pe care sistemul trebuie să le ia sunt: • Dacă indexul este dens: 1. Dacă cheia de căutare nu apare in îndex, sistemul inserează o înregistrare cu noua cheie de inserare în poziția potrivită. 2. Altfel, înregistrarea din index memorează un pointer la prima înregistrare din fișier cu valoarea cheii de căutare. Sistemul plasează noua înregistrare după celelalte înregistrări cu aceeași valoare a cheii de căutare. • Dacă indexul este rar: indexul memorează o intrare pentru fiecare bloc. • Dacă sistemul creează un nou bloc, se inserează prima cheie de căutare din bloc în fișierul de index. • Pe de altă parte dacă noua înregistrare are cea mai mică cheie de căutare din bloc, sistemul trebuie să modifice fișierul de index. Dacă nu, sistemul nu face nici o modificare.

  13. Modificarea indecsilor-Ștergerea • Pentru a șterge o înregistrare, sistemul caută mai întâi înregistrarea care trebuie ștearsă. Operațiile pe care sistemul le va face sunt în funcție de tipul indexului: • Dacă indexul este dens: • Dacă înregistrarea de șters este unică după cheia de căutare, atunci sistemul șterge înregistrarea corespunzătoare din fișierul de index. • Altfel, următoarele operații trebuie efectuate: • Dacă înregistrarea din index memorează pointeri la toate înregistrările care au aceeași cheie de căutare, sistemul șterge doare pointerul la înregistrarea care trebuie ștearsă. • Altfel, înregistrarea din index memorează un pointer numai la prima înregistrare din blocul de înregistrări care au aceeași cheie de căutare cu înregistrarea care trebuie ștearsă. În acest caz, dacă ănregistrarea de șters este prima înregistrare din bloc, sistemul modifică înregistrarea din index să adreseze următoarea înregistrare.

  14. Modificarea indecsilor-Ștergerea • Dacă indexul este rar: • Dacă indexul nu conține nicio înregistare cu cheia de căutare a înregistrării de șters, atunci nu trebuie făcută nicio modificare în index. • Altfel, sistemul trebuie să facă următoarele operații: • Dacă înregistrarea de șters este unică după cheia de căutare, sistemul înlocuiește înregistrarea din index corespunzătoare cu următoarea înregistrare a următoarei chei de căutare. Dacă cheia de căutare următoare este deja inserată în fișierul de index, intrarea din index corespunzătoare înregistrării de șters este doar ștearsă fără a mai fi înlocuită. • Altfel, dacă înregistrarea din index a cheii de căutare de șters memorează un pointer chiar la înregistrarea care trebuie ștearsă, sistemul modifică înregistrarea din index să adreseze următoarea înregistrare cu aceeași valoare a cheii de căutare.

  15. Indecsi secundari • Indecșii secundari trebuie să fie denși, cu o intrare în fișierul de index pentru fiecare cheie de căutare și un pointer pentru fiecare înregistrare din fișier . • Indecșii secundari au o altă structură față de indecșii grupați. • Dacă cheia de căutare a indexului grupat nu este o cheie candidat, este suficient dacă indexul adresează prima înregistrare dintr-un bloc de inregistrări, deoarece celelalte vor fi găsite secvențial.

  16. Indecsi secundari • În cazul indecșilor secundari, dacă cheia de căutare nu este cheie candidat, nu este suficient ca indexul să adreseze prima înregistrare a unui bloc de înregistrăre, deoarece celelalte înregistrări cu aceeași valoare a cheii de căutare pot fi oriunde în fișier; înregistrările din fișierul de date sunt ordonate numai după cheia de căutare a indexului grupat, și nu după cheia de căutare a indexului secundar. • Astfel, indecșii secundari trebuie să conțină pointeri la toate înregsitrările din fișierul de date. • Pentru a implementa indecșii secundari a căror cheie de căutare nu este cheie candidat, se poate folosi un nivel intermediar de indirectare. Astfel, pointerii indexului nu adresează direct înregistrările din fișier, ci un bloc care conține pointeri la fișier.

  17. Indecsi arbori B+ • Dezavantajul folosirii indecșilor organizați în fișiere secvențiale este aceea a scăderii performanței odată cu creșterea fișierului de date și a celui de index. • Structura de arbore B+ a indexului este cea mai răspândită datorită faptului că indecșii astfel construiți iși mențin eficiența în ciuda inserărilor și ștergerilor din fișierul de date. • Indexul B+ va fi un arbore echilibrat în care fiecare cale de la rădăcina arborelui la frunze are aceeași lungime. • Micile dezavantaje ale indecșilor cu structură de arbori B + sunt multiplele inserări și ștergeri și dimensiunea mare a spațiului alocat necesar indexului.

  18. Structura fisierelor de index B+ • Un index cu structură de arbore B+ este multinivel, dar organizarea lui diferă de cea a indecșilor multinivel secvențial prezentați • Structura: • Fiecare cale de la rădăcina arborelui la frunze are aceeași lungime • Un nod care nu este frunză are între n/2și n copii, unde n este fixat pentru un arbore particular. • Un nod frunză are între (n–1)/2 și n–1 valori. • Dacă rădăcina nu este frunză are cel puțin 2 copii. • Dacă rădăcina este frunză are între 0 și (n–1) valori. • Nodul frunză are următoarele proprietăți: • pointerii Pi (i = 1, 2, . . ., n–1 ) adresează fie câte o înregistrare din fișierul de date cu valoarea cheii de căutare egală cu Ki, sau dacă cheia de căutare nu este cheie candidat, un bloc de pointeri la înregistrările din fișier cu valoarea cheii de căutare egala Ki • Pn adresează frunza care urmează în ordinea cheii de căutare.

  19. Indecși cu chei multiple de acces • Indecșii cu chei multiple sunt folosiți în următoarele tipuri de interogări: • Exemplu: select nrCont fromContwhereFiliala = “ING1” and Balanta = 1000 • Posibilitățile pentru a procesa această interogare folosind index definit pe un singur atribut sunt: 1. Se definește indexul după atributul Filiala pentru a căuta conturile cu numele ING1 și se testează dacă Balanta =1000. 2. Se definește indexul după atributul Balanta pentru a căuta conturile cu balanțele de 1000 euro și se testează dacă Filiala = “ING1”. 3. Se folosește indexul după atributul Filiala pentru a găsi pointerii la înregistrările care au filiala “ING1”. De asemenea, se folosește indexul după atributul Balanta = 1000. Se ia rezultatul intersecției celor două mulțimi de înregistrări. • Cheile de căutare compuse conțin mai mult de un atribut: • De exemplu: (Filiala, Balanta). • Relația de ordonare: (a1, a2) < (b1, b2) înseamnă: a1 < b1, or a1=b1 și a2 < b2

More Related