Sunteți pe pagina 1din 14

IndexuricustructurdinamicarboridecutaredetipB+.Formatul nodurilor.Algoritmidecutareideinserare.Exemple.

(textpreliminar) Anteriorconceperiistructurilordinamicedeindexarendomeniulbazelordedate,unadinmetodelecele mai rspndite pentru realizarea accesului la informaie a fost cea a accesului secvenial indexat (ASI). Aceastmetod,dezvoltatiniialnmediulIBMcuinteniaextrageriirapideainformaiilormemoratede calculatoareletipmainframe,echipatelanceputcumemoriiexternepebenzimagnetice,continufie folositncpescarlargnsistemeledebazededate,fieelerelaionalesaunu. MetodaASIprevedememorareasecvenialanregistrrilordefiier,ceeaceeranormalncazulfolosirii debenzimagnetice.Extragereanregistrrilorindividualeserealizeazcuajutorulunuisistemdeindicatori deadres(pointeri)orientaictrenregistrri.Indicatoriideadressuntmemoraintabelededispersie (tabele hash), tabele ce poart numele de indexuri. Aceast manier de acces permite extragerea nregistrrilorfrafinecesarunprocesdecutarenntregulvolumdeinformaie. Pe de alt parte, vom remarca faptul c n bazele de date de tip navigaional, pointerii ctre alte informaiieraumemoraichiarninteriorulnregistrrilordincareseiniiazprocesuldecutare.Avantajul utilizriimetodeiASIconstnlungimearedusaindexurilori,prinurmare,ntimpulscurtdecutarela acestnivel.nacestmod,bazadedatevaefectuaoperaiunideaccesnumailanregistrriledorite. n contextul folosirii metodei ASI, realizarea bazelor de date relaionale impune meninerea valabilitii legturilor ntre relaii (tabele), deziderat care se realizeaz prin mijloace logice corespunztoare. n practic, pentru o cutare rapid, se indexeaz un element (cmp) din nregistrare (tuplu), ce poart numele de cheie extern (strin). n aceast abordare, viteza de acces va fi mai mic dect atunci cnd pointerii ctre datele cutate sunt depui direct n nregistrri. Pe de alt parte, modificrile n aranjarea fizicadatelornufacnecesaractualizareapointerilor. ntructmetodaASIconstnaccesulsecvenialdirectlafiierelebazeidedate,implementareasa,cai nelegereaeiconceptual,nuridicproblemenmajoritateacazurilor,faptceconduceilauncostredus al folosirii metodei. Totui, n unele situaii, ca, de exemplu, n configuraiile clientserver, fiecare sistem client trebuie s gestioneze propria sa legtur cu fiecare fiie la care realizeaz un acces, fapt care face posibileoperaiuniconflictualedeinseraredetuplurinacestefiierei,nconsecin,strideincoerena bazeidedate.Problemamenionatestesoluionatdesistemelecurentedegestiuneabazelordedate, careconinunmoduldereglementareclientserver. Ulterior,pentrunlocuireametodeiASI,afostpropustehnicametodeideaccescumemorievirtual(IBM), careestemetodadeaccesfiziclainformaiefolositnsistemulDB2.

Structuridinamicedeindex.ArboriB+. ASI inconvenient lanuri lungi de overflow apar cnd fiierul crete, deci > performane mai slabe. Consecin> au aprut structuri dinamice, mai flexibile, care se adapteaz uor operaiilor de inserare i eliminare.Unadinacestestructuri:arboriidecutareB+.nesen,arboreleB+esteunarborebalansat,n carenodurileinternedirecioneazprocesuldecutare,iarnodurilefrunz(terminale)coninintrrilede date. nmodelulASI,alocarea(adugarea)depaginifrunzsefceastatic,secvenial.ncazularborilor B+, structura arborilor se dezvolt (crete) i se reduce n mod dinamic, deci nu este posibil ca paginile frunzsfiealocatesecvenialstatic.Pentruaextragepaginilefrunznmodeficient(decirapid!Defapt, este vorba de extragerea informaiilor din pagin, ceea ce presupune extragerea paginii din memoria secundar > cea central), acestea trebuie legate (ntre ele) prin pointeri de pagin. O cale de a lega paginileesteorganizarealornolistdublunlnuit.nacestmod,vomputeatraversasecvenapaginilor noricedirecie.Ostructurdeacestgenmaijosnfig.1. ASIesteostructurstatic.Incazulstructuriidimnamice: Intrrideindex (cutaredirect) Intrridedate Fig.1StructuraunuiarboreB+ PrintrecaracteristicilefundamentalealearborilorB+: Operaiile(inserare,eliminare)meninechilibrularborelui. Graddeocuparedeminimum50%garantatpentrufiecarenod.Excepienodulrdcin,dacse folosete un algoritm de eliminare specific. Remarcm, totui, c eliminarea se implementeaz adeseaprinsimplalocalizareaintrriidedateiaeliminriiacesteia,frajustareaarborelui,aa cum ar cere garantarea unui grad de ocupare de 50%. Cauza arborii cresc de obicei, nu se diminueaz. Cutarea unei nregistrri reclam numai o traversare a arborelui de la rdcin pn la frunza corespunztoare.nlimeaarboreluiestelungimeauneicidelardcinpnlaofrunz(pnla orice frunz, arborele fiind echilibrat. Arborii B+ au coeficient de ramificare la ieire (fanout) mare,deaceeanlimealoresterareori>ca3sau4. 2 Fiierindex

PentruarboriiB+notm: d=ordinularboreluiB+,careesteomsuracapacitiiunuinodalarborelui m=numruldeintrrinfiecarenodpentruarboriiB+pecareistudiemaici ngeneral,avem:d<=m<=2d. Pentrunodulrdcin:1<=m<=2d. Consideraiicalitative: ngeneral,estemaiavantajossfolosimunindexcuarboreB+cunregistrridedatememorateca intrridedate,nlocdeafolosiunfiiersortat.Pentruoverheaduldespaiunecesitatdememorarea intrrilorindexului,seobinavantajelefiierelorsortate,lacareseadaugalgoritmieficienideinserarei eliminare.Deobicei,arboriiB+asigurcca67%graddeocupareaspaiuluidememorie. Arborii B+ sunt preferai, de obicei, indexrii ASI, deoarece asigur inserarea fr nlnuiri de overflow. Remarcm, totui, c dac dimensiunile i distribuirea volumului de date rmn ndeajuns de statice, nlnuirile de overflow pot s nu constituie o dificultate. n astfel de cazuri, AIS este recomandabil. Regulgeneral:arboriiB+auperformanemaibunecaAIS. Formatulunuinod Esteacelaicuformatulunuinod(pagindeindex!)AISvezifig.2
Intraredeindex Fig.2 fig.2

P0K1P1 K2P2 Km Pm

Formatul uneipagini deindex.

Aici:nodurileinternecumintrrideindexconinm+1pointerictresuccesori(copii).PointerulPi indicspreunsubarborencaretoatevaloriledecheieKsunta..:Ki<=K<Ki+1. 3

Cazurispeciale: P0indicspreunarborencaretoateK<K1 PmindicspreunarborencaretoateK>=Km Pentrunodurilefrunz(terminale),intrrilesuntnotateK*uzual.narboriiB+,nodurilefrunz(i numai ele!) conin intrri de date (data entries). n cazul obinuit al folosirii alternativelor (2) i (3), intrrile frunz sunt perechi <K, I(K)>, exact ca i intrrile interne (neterminale). Mai observm c indiferent de alternativa aleas pentru intrrile frunz, paginile frunz sunt nlnuite n o list dublu nlnuit. Aadar, frunzele formeaz o secven, care poate fi folosit pentru a rspunde eficient la interogrilecareprimescintervaledevalori. Esteinteresantdeaanalizacumsepoateajungelaoorganizareanoduluidearborecaceademai sus, folosind alte formate de nregistrri (cu lungime fix, cu lungime variabil). De fapt, fiecare pereche cheiepointer poate fi vzut ca o nregistrare. Dac fiierul care se indexeaz este de lungime fix a nregistrrilor,intrriledinindexvoravealungimefix.ncazulcontrar,arfidelungimevariabil.nambele cazuri, arborele B+ poate fi vzut el nsui ca un fiier de nregistrri. Dac paginile frunz (terminale) nu coninnregistrrileautenticededate,atunciarboreleB+esteefectivunfiierdenregistrri,adicdistinct defiierulcareconinedatele.Dacnspaginilefrunz(terminale)coninnregistrridedate,atunciun fiierconineattarboreleB+ctidatele. Procesuldecutare

Algoritmuldecutaregsetenodulfrunzcruiaiaparineointrarededateanumit.nceleceurmeaz (caipentrualgoritmuldeinserareieliminarepentruarboriiB+)sepresupunecnuexistduplicate.Cu altecuvinte,nupotexistadouintrridedatecuaceeaivaloareacheii.npractic,potapreaduplicate. Notaiifolosite: Ptrvariabilpointer; *ptrvaloareactrecareindicpointerulptr &(valoare)adresapentruvaloare Vomremarcafaptulc,pentruagsiinprocesuldecutarenarbore,trebuiesefectumo cutareninteriorulnodului,ceeacesepoaterealizafieprinocutareliniar,fieprinocutarebinar(n funciedenumruldeintrrinnod). Algoritmuldecutareprezentatnpseudocodulcareurmeaz: 4

funcgsete(valoareaKacheiidecutare)returnspointerdenod //Fiinddatovaloaredecheiedecutare,gsetenodulsaufrunza returncutarenarbore(rdcina,K); endfunc funccutarennod(pointerdenod,valoareKacheiidecutare)returnspointerdenod //Cautnarborepentruintrare if*pointerdenodesteofrunz,returnpointerdenod; else, ifK<K1thenreturncutarenarbore(P0,K); else, ifK>=Kmthenreturncutarenarbore(Pm,K);//m=#intrri else, findiastfelnctKi<=K<Ki+1; returncutarenarbore(Pi,K)

endfunc Fig.3Algoritmpentrucutarepseudocod Pentruailustrafuncionarea(parcurgerea)algoritmuluidecutarefieexemplularboreluiB+din Fig.4.Remarcmcordinularboreluiested=2,adicfiecarenodconinentre2i4intrri.Fiecareintrare intern (nefrunz !) este conine o pereche <valoare de cheie, pointerdenod>. La nivelul frunzelor (nodurilorterminale),intrrilesuntnregistrridedate,notatecuR*. 5


Rdcin 13 17 24 30

2* 3* 5* 7* 14* 16* 19
*

20
*

22
*

24*

27*

29*

33*

34*

38*

39*

Fig.4ArboreB+deordinuld=2

Presupunem c dorim s efectum o cutare pentru intrarea 5*. n acest scop, vom urmri pointerul succesorului(copilului)dinextremastng,deoarece5<13.Dacvomcutaintrrile14*sau15*,urmrim al doilea pointer, deoarece 13<=14<17, iar 13<=15<17. Deoarece nu gsim n paginile frunz 15*, putem trageconcluziacaceastvaloarenuesteprezentnarbore!Pentruagsi24*,vomfolosipointerulcelui dealpatruleasuccesor(copil),deoarece24<=24<30. Procesuldeinserare Algoritmuldeinserarelaointrare(dinindex),gsetenodulfrunzcruiaiaparineiinsereaz acolonregistrarea. Ideea algoritmului de nserare st n aceea c inserm recursiv o intrare apelnd algoritmul de inserarelanivelulnoduluisuccesor(copie)corespunztor.Deobicei,aceastprodcedurneconducejos, lafrunzacreiaiaparineintrarea,amplasndintrareaacoloirevenindapoilanodulrdcin. Remarcmcuneoriunnodestecomplet(plin)i,caurmare,trebuiesecionat.Atuncicndeste secionatnodul,nprintelesutrebuieinseratointrarecarevaindicasprenodulcreatprinsecionare. Ctre aceast intrare, la rndul su, va indica o variabila pointer numit copiinoi, sau succesori noi.. Prinsecionareavechiuluinodicreareaunuinounodrdcin,nlimeaarboreluicretecuounitate. Pseudocodul algoritmului n Fig. 5. Pentru a ilustra procesul de inserare, vom folosi arborele prezentatanteriorFig.4,pentruprocesuldecutare. Admitem c dorim s inserm intrarea 8*. Aceasta aparine, evident, frunzei (nodului frunz) din extremastngcareestedejaplin.Potrivitalgoritmului,proceduradeinserarevaefectuaosecionarea paginiifrunz.PaginilerezultateprinsecionaresuntprezentatenFig.6.ntregularboretrebuieacum 6

ajustat, pentru a lua n consideraie noua pagin frunz care a aprut. n acest scop, inserm o intrare careconst dinperechea<5,pointer ctrepagina nou>,nnodulprinte. Aici,observmn cenod este copiatcheia5,caredescriediferenantrepaginafrunzsecionatisora(saufratele)sucreat.Nu putemcapurisimplu,smpingem(deplasm)nsus(pushup)valoarea5,deoarecefiecareintrare dedatetrebuiesaparnopaginfrunz. Deoarece nodul printe este, de asemenea, plin, apare o alt secionare. n general, trebuie s secionmunnodnefrunzatuncicndestepliniconine2dcheii2d+1pointeri,respectivtrebuies adugmoaltintraredeindexcarescorespunduneisecionridenodcopil.Avem,nacestmoment, 2d+1cheii2d+2pointeri,cudounodurinefrunzpline(nmodminimal!!),fiecaredinacesteaconinnd dcheiid+1pointeri.Deasemenea,maiavemocheienplus,pecareofacemcheiedemijloc(median). Aceastcheieiunpointerctrealdoileanodnecheieconstituieointraredeindexcaretrebuieinseratn printelenoduluinefrunzsecionat.nacestfel,cheiademijlocestempins(deplasat)sprepartea desusaarborelui(pushedup),spredeosebiredecazulsecionriiuneipaginifrunz. PaginilesecionatedinexemplultratatsevdnFig.7.Intrareadeindexcareindicsprenoulnod nefrunzesteperechea<17,pointersprenouapaginlaniveldeindex>;trebuieremarcatcvaloarea17a cheii este mpins n sus pe arbore, spre deosebire de valoarea 5 a cheii de secionare n seciunea frunzei,careafostcopiatnparteasuperioar.
Procinsereaz(pointerdenod,intrare,copiinoi) //Insereazointrarentrunsubarborecurdcina*pointerdenod; //gradulested;copiinoiesteiniialnul,itotnullareturndac //nuestesecionatunnodcopil if*pointerdenodesteunnodnefrunz,sspunem(fie)N, findiastfelnctKi<=valoareacheiiintrrii<Ki+1;//alegeunsubarbore insert(Pi,intrare,copiinoi); ifcopiinoiisnull,return; else, //recursiv,insereazonregistrare

//cazuzual;nusasecionatnodcopil

//amsecionatnodulcopil,trebuieinserat*copiinoinN

ifNarespaiu, else pune*copiinoinel,punecopiinoilazero,return; //noteazdiferenawrtsecionareapaginiifrunz!

secioneazN://2d+1valoridecheiei2d+2pointeridenod primeledvaloridecheieid+1pointeridenodrmn,


ultimeledcheiid+1pointerisedeplaseazlaunnodnou,N2; //*copiinoipuspentruorientareacutrilorntreNiN2 copiinoi=&(<ceamaimicvaloaredecheielaN2,pointerulctreN2>); ifNesterdcina, return; //rdcinaafostsecionatadineauri

creazunnodnoucu<pointerulctreN,*copiinoi>; forezpointeruldenodalrdciniiarboreluisindicesprenoulnod;

if*pointerdenodesteunnodfrunz,fieL, ifLarespaiu //cazuzual

puneointrarenel,punecopiinoilazero,return; else, secioneazL:primeledintrrirmn,restulse deplaseazsprenodulnouL2;

copiinoi=&(<ceamaimicvaloaredecheielaL2, pointerulctreL2>);

punepointeriifrainLiL2; return

endproc.

Fig.5,AlgoritmpentruinserarenarboreB+deordind Diferena n tratarea secionrilor la nivel de frunz i la nivel de index, provine din cerina ca la arboriiB+,toateintrrilededateR*sfieamplasatenfrunze.Aceastcerinnempiedicsmpingem nsusvaloarea5iconducelaouoarredundan,avndunelevaloridecheiecareaparattlanivelde frunz,ctilaniveldeindex.Totui,lainterogrilecaresolicitvaloripeinterval(rangequeries),se poate rspunde eficient prin simpla extragere a secvenei de pagini frunz; redundana este un pre mic pentru eficiena realizat. n procesul de tratare a nivelurilor de index, avem o flexibilitate mai mare, i mpingemnsusvaloarea17,pentruaevitaprezenaadoucopiialevalorii17laniveldeindex.


5 Intrarecareseinsereazntrunnodprinte(Denotatc5estecopiat nsusicontinusaparinfrunz). 2* 3* 5* 7* 8*

Fig.6Secionareapaginilorfrunznprocesul inserriiintrrii8*

17 Rdcin Intrarecareseinsereazntrunnodprinte(Denotatc17este mpinsnsusicapreodatnindex.Devzutaceastancontrastcu secionareauneifrunze). 5 13 24 30

Fig.7Secionareapaginilordeindexnprocesul deinserareaintrrii8.


Rdcin 1 7

5 1 3 24 30

2* 3* 5* 7* 8* 14* 16* 19* 20* 22* 24* 27* 29* 33* 34* 38* 39*

Fig.8ArboreleB+dupinserareaintrrii8*

Rdcin 8 17 24 30

2* 3* 5* 7* 8* 14* 16* 19* 20* 22* 24* 27* 29* 33* 34* 38* 39*

Fig.9ArboreleB+dupinserareaintrrii8* folosindredistribuirea
n continuare, deoarece nodul de secionare a fost vechea rdcin, trebuie s crem un nod rdcin, pentru a conine intrarea care distinge ntre ele cele dou pagini de index secionate (de secionare).Arboreleobinutdupinserareaintrrii8*esteprezentatnFig.8. 10

O alt variant a algoritmului de inserare ncearc s redistribuie intrrile unui nod N cu un frate(al acestuia), nainte de secionarea nodului. Pe aceast cale se poate nbunti gradul mediu de ocupareaspaiului(dememorie!).ncontextuldeaici,unfrate(sibling)alunuinodNesteunnodaflat imediat la stnga nodului N i avnd acelai printe ca N. Procedura de redistribuire (pe care nu o mai descriemndetaliu)conducelarezultatuldinFig.9. Alteprobleme:algoritmuldeeliminarecuindexcuarboreB+,cheiduplicate,arboriiB+npractic compresiacheilor,procesulbulkloadingnarboriB+,conceptuldeordine. ArboriiB+nsistemelereale:IBMDB2,Informix,MicrosoftSQLServer,Oracle,SybaseASEtoate auindexuricuarboriB+clusterediunclustered. FolosireaindexurilornOracle(SQLOracle) Oracleare2metodedeaaccesaliniintruntabel:accessecvenialiaccesdirectcametode. Accessecvenialdescriscelmaibinecarsfoireaunuitabellinieculinie.Oraclecitetefiecare liniedintabel.Dacsecautdoarolinieitabelularemulteliniicutarea=ineficient,timpmult.Esteca icumsartreceprinocartedetelefon,pagincupagin.Dacnoicautmnumruldetelefonalcuivaal cruinumencepecuL,nuvomncepecutareadelaA!! Cnd Oracle folosete metoda de acces direct, citete numai liniile care au anumite proprieti cerute.Pentruaceastansestenecesarunindex. nOracleindexulconstruitcaunarbore,formatdinnodurivezifigura: 11


44 112 7 27 44 95 112 2 6 7 8 27 28 39 44 57 83 95 100 104 112 JUCATORNO 6 44 83 2 27 104 7 57 39 112 8 100 28 95 NUME Paul Baciu Hila Enescu Colan Motru Scumpu Boldea Beraru Barbu Neagu Panait Cotru Mihai

Fig.10 nstngastructuradeindex.ndreaptadoucoloanealeunuitabelJuctori(!!!). Nodul din extrema stnga rdcin. Fiecare nod conine un maximum de 3 valori ordonate din coloana JUCATORNO. Fiecare valoare ntrun nod indic spre un alt nod sau spre o linie din tabela JUCATORI. (not n figur nu am indicat fiecare destinaie de pointer). De asemenea, observm c fiecare linie n tabel este referit prin cel puin un nod. Un nod care indic spre o linie este pagin frunz. Valorile n noduri: ordonate. Pentru fiecare nod, afar de rdcin, valorile sunt totdeauna <= valoareacareindicspreacelnod.Paginilefrunzsuntelenselelegateunelecualtele.Opaginfrunzare 12

unpointersprepaginafrunzcumulimeavecindevalori(vecin,nsensulde>).Acetiultimipointeri culiniegroas. Oracle2algoritmipentrulucrulcuindexuri: primulcautliniilencareapareovaloareparticular aldoilearsfoiesteprinontreagtabelsauprinoparteauneitabele,prinintermediulunei coloaneordonate. Maijosexemple.PrimularatcumOraclefoloseteunindexpentruaselectaolinie(tuplu) particular. Ex.1sgsimtoateliniilecareconinjuctorulcuno.44. Pas1secautnrdcinaindexului.Rdcinadevinenodulactiv. Pas2Estenodulactivopaginfrunz?Dacda>Pasul4.Dacnu>Pasul3. Pas3Nodulactivconine44?Dacda,nodulctrecareindicaceastvaloaredevinenodactiv;apoi ntoarcerelaPas2. Dacnu,alegeceamaimicvaloarecareeste>44nnodulactiv.Nodulctrecareindicaceast valoaredevinenodactiv;apointoarcerelaPas2. Pas 4 Se caut valoarea 44 n nodul activ. Aceast valoare indic acum spre toate liniile n tabela JUCTORI n care coloana JUCATORNO are valoarea 44. Se extrag toate aceste linii din BD, pentru prelucrare.NOTputemaveajuctoricuacelainume,darnumerediferite. <<. Ex.2extragetoijuctorii(numele)ordonaidupnumr. Astfel,saugsitliniilecutatefrasersfoiprintoateliniile.Timpuldecutarecuindexeste

Pas1Secautpaginilefrunzcuvaoloareaceamaimic.Eadevinenodactiv. Pas2Extragetoateliniilectrecareindic(points)valoriledinnodulactiv,pentruprelucrareulterioar eventual. Pas3Dacexistopaginfrunzurmtoare,estefcutnodactivisecontinudelaPasul2. Etc.,Etc. 13

Creareaindexurilor UnindexsedefinetenOraclepeocoloansaupeocombinaiedecoloane. Exemplu:CREATEINDEXGOLURIINDEXON REZULTATE(NRGOLURI).

Maisus,comandadefineteunindexnumitGOLURIINDEXpecoloanaNRGOLURIaleunuitabel REZULTATE. Comandaajutlaointerogareca: SELECT* *toate!

FROMREZULTATE WHERENRGOLURI=15

nexempluldemaisus,OracleexamineaznumailiniiledinBDcaresatisfaccondiiaWHEREi decirspunsrapid.Indexulasigurunaccesdirectlaliniiledintabelainspectat. Cheiedecutare(Searchkey) Cheiadecutareesteocoleciedecmpuri(unulsaumaimulte)alefiieruluidenregistrripentru careseconstruieteunindex.Fiecareindexareocheiedecutareasociat.Oricesubmulimedecmpuri poatefiocheiedecutare. ntrunfiierindex,paginilesuntorganizateastfelnctsfieposibillocalizareaacelorintrridin indexcareauovaloaredatacheiidecutare.Observmcocheiedecutarenutrebuiesidentificen modunicnregistrrile. Alteelementeimportante:formatulpaginii,formatedenregistrri. NOTunindexnuesteniciodatreferitexplicitncomandSELECT.

14