B+ stablo Ramakrishnan Raghu, Gehrke Johannes - Database Management Systems (2000)(2nd ed.)

Slides:



Advertisements
Similar presentations
Database Management Systems, R. Ramakrishnan and J. Gehrke1 Tree-Structured Indexes Chapter 9.
Advertisements

B + Trees Dale-Marie Wilson, Ph.D.. B + Trees Search Tree Used to guide search for a record, given the value of one of its fields Two types of Nodes Internal.
1 B+ Trees. 2 Tree-Structured Indices v Tree-structured indexing techniques support both range searches and equality searches. v ISAM : static structure;
CS4432: Database Systems II
Database Management Systems, R. Ramakrishnan and J. Gehrke1 Tree-Structured Indexes Chapter 9.
Introduction to Database Systems1 B+-Trees Storage Technology: Topic 5.
 B+ Tree Definition  B+ Tree Properties  B+ Tree Searching  B+ Tree Insertion  B+ Tree Deletion.
Database Management 8. course. Query types Equality query – Each field has to be equal to a constant Range query – Not all the fields have to be equal.
2-3 Trees Extended tree.  Tree in which all empty subtrees are replaced by new nodes that are called external nodes.  Original nodes are called internal.
Database Management Systems, R. Ramakrishnan and J. Gehrke1 Tree-Structured Indexes.
Database Management Systems, R. Ramakrishnan and J. Gehrke1 Tree-Structured Indexes Chapter 9.
B+ Tree Index tuning--. overview B + -Tree Scalability Typical order: 100. Typical fill-factor: 67%. –average fanout = 133 Typical capacities (root at.
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 B+-Tree Index Chapter 10 Modified by Donghui Zhang Nov 9, 2005.
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 Tree-Structured Indexes Content based on Chapter 10 Database Management Systems, (3 rd.
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 Tree-Structured Indexes Chapter 10.
Database Applications (15-415) DBMS Internals- Part III Lecture 13, March 06, 2016 Mohammad Hammoud.
COMP261 Lecture 23 B Trees.
Multiway Search Trees Data may not fit into main memory
B+-Trees j a0 k1 a1 k2 a2 … kj aj j = number of keys in node.
Tree-Structured Indexes
Tree-Structured Indexes
Binary search tree. Removing a node
Database System Architecture and Implementation
CS522 Advanced database Systems
CISC220 Fall 2009 James Atlas Lecture 13: Binary Trees.
CPSC-629 Analysis of Algorithms
Data Structures and Algorithms
B Tree Adhiraj Goel 1RV07IS004.
Database Applications (15-415) DBMS Internals- Part III Lecture 15, March 11, 2018 Mohammad Hammoud.
Teorema o 4 boje(Four color theorem)
Lecture 26 Multiway Search Trees Chapter 11 of textbook
Petlje FOR - NEXT.
Explore-plots Katarina Jeremić 143/2011 Jovana Vulović 33/2011
Height Balanced Trees 2-3 Trees.
CPSC-310 Database Systems
Elektrotehnički fakultet – Podgorica Operativni sistemi
B-Trees CSE 373 Data Structures CSE AU B-Trees.
Mere položaja z vrednost (ili statndardna vrednost)
B-Trees.
Vežba 1. Formatiranje teksta korišćenjem stilskih šablona
Tree-Structured Indexes
CS222/CS122C: Principles of Data Management Notes #07 B+ Trees
Tree-Structured Indexes
Element form Milena Kostadinović.
MessageBox.
predavanja v.as.mr. Samir Lemeš
Fizičke strukture podataka i pristupne metode: indeksiranje
Organizacija invertovano-indeksnih datoteka
6. Apstraktne tipovi podatka
Osnovni simboli jezika Pascal
Tree-Structured Indexes
B+Trees The slides for this text are organized into chapters. This lecture covers Chapter 9. Chapter 1: Introduction to Database Systems Chapter 2: The.
Tree-Structured Indexes
Adapted from Mike Franklin
Naredbe u php-u.
Programski jezik Python
B-Trees CSE 373 Data Structures CSE AU B-Trees.
Tree-Structured Indexes
CSE 373, Copyright S. Tanimoto, 2002 B-Trees -
Tree-Structured Indexes
2-3 Trees Extended tree. Tree in which all empty subtrees are replaced by new nodes that are called external nodes. Original nodes are called internal.
B+-Trees j a0 k1 a1 k2 a2 … kj aj j = number of keys in node.
B-Trees CSE 373 Data Structures CSE AU B-Trees.
CPSC-608 Database Systems
Tree-Structured Indexes
Tree-Structured Indexes
Ponavljanje Pisana provjera
CS222/CS122C: Principles of Data Management UCI, Fall 2018 Notes #06 B+ trees Instructor: Chen Li.
Kako zaštititi privatnost na facebooku
CS222P: Principles of Data Management UCI, Fall Notes #06 B+ trees
Presentation transcript:

B+ stablo Ramakrishnan Raghu, Gehrke Johannes - Database Management Systems (2000)(2nd ed.)

B+ stablo Varijanta B stabla (i sinonim) Podaci samo u listovima Unutrašnji čvorovi samo usmeravaju pretragu Stranice-listovi ne alociraju se sekvencijalno kao kod ISAM indeksa (statičan primarni skup tj. DP), već dinamički Pokazivačima stranica listovi se ulančavaju radi efikasne pretrage u poretku atributa indeksiranja

B+ stablo Kao i B-stablo: Dodatno: B+ stablo je balansirana drvolika indeksna struktura na disku Može dinamički da se ažurira i sastoji se od stranica Podržava operacije pojedinačnog pretraživanja, unošenja i brisanja u O(logpn) I/O operacija, pri čemu je n broj slogova u stablu a p – kapacitet strane izražen brojem slogova Dodatno: Podržava operacije intervalnog pretraživanja u O(logpn + t ∕p) I/O operacija, pri čemu je t broj slogova u rezultatu upita.

B+ stablo: ilustracija strukture

B+ stablo: osobine Struktura stabla: čvorovi stabla su stranice; visina balansiranog stabla je h ≥ 0; svaka stranica, osim korena i listova, ima najmanje d + 1 neposrednih sledbenika (d > 0); koren je ili list ili ima najmanje dva neposredna sledbenika; svaka stranica ima najviše 2d + 1 neposrednih sledbenika.

B+ stablo: struktura stranice – čvora stabla: svaka stranica koja nije list predstavlja niz (p0, (k1, p1), (k2, p2),...,(km, pm)), gde je uređeni par (ki, pi) – indeksni element, koji se sastoji od vrednosti iz domena atributa indeksiranja (ki) i pokazivača na stranicu neposrednog sledbenika (pi), i = 1, 2,...,m. Pokazivač na stranicu – neposrednog sledbenika je i p0; svaka stranica koja nije list, osim korena, ima najmanje d indeksnih elemenata, a koren koji nije list – najmanje jedan. Svaka stranica koja nije list ima najviše 2d indeksnih elemenata;

B+ stablo: struktura stranice – čvora stabla: za svaku vrednost ki iz indeksnog elementa važi sledeće: pokazivač koji joj prethodi (pi-1) pokazuje na podstablo u kome za svaku vrednost kj iz domena atributa indeksiranja važi kj < ki; pokazivač koji za njom sledi (pi) pokazuje na podstablo u kome za svaku vrednost kj iz domena atributa indeksiranja važi kj ≥ ki; stranice – listovi sadrže niz elemenata podataka – parova oblika (ki,bi), gde su ki kao i u indeksnom elementu, a bi – pridruženi podaci. List sadrži najmanje d’ a najviše 2d’ (d’ > 0) elemenata podataka; elementi stranice (indeksni i elementi podataka) sortirani su u rastućem redosledu vrednosti iz domena atributa indeksiranja; sve stranice-listovi uvezane su pokazivačima u rastućem poretku vrednosti atributa indeksiranja

B+ stablo: primer

B+ stablo: tačna pretraga (bez duplikata) ulaz: vrednost k iz domena atributa indeksiranja; izlaz: skup podataka b pridružen vrednosti k ako par (k, b) postoji u indeksu, inače poruka “u indeksu ne postoji vrednost k”; BEGIN neka je tekuća stranica – koren B+ stabla; WHILE tekuća stranica nije list DO BEGIN pretražiti tekuću stranicu; IF za neko i, k  ki, THEN neka je i’ najmanje takvo i; tekuća stranica neka je stranica na koju pokazuje pokazivač pi’-1 END ELSE tekuća stranica neka je stranica na koju pokazuje pokazivač pm END; pretražiti list stabla; IF pronađen par (k, b) THEN rezultat je b ELSE poruka “u indeksu ne postoji vrednost k” END.

B+ stablo: tačna pretraga – rekurzivna pseudofunkcija (Ramakrishnan, Johannes) func find (search key value K) returns nodepointer // Given a search key value, finds its leaf node return tree_ search(root, K); // searches from root endfunc func tree_search (nodepointer, search key value K) returns nodepointer // Searches tree for entry if *nodepointer is a leaf, return nodepointer; else, if K <K1 then return tree_search(P0, K); if K  Km then return tree_search(Pm, K); // m = # entries find i such that Ki  K < Ki+1; return tree_search(Pi, K)

B+ stablo: pretraga - primer U prethodnom B+ stablu tražimo ključeve 4, 14, 15, 24, redom.

B+ stablo: intervalna pretraga - primer tražimo ključeve >= 4, < 22

B+ stablo: unošenje Unosi se slog sa zadatom vrednošću ključa k Unošenje uvek u list BEGIN algoritmom tačne pretrage pronaći stranicu-list za unošenje, s; IF stranica s nije maksimalno popunjena uneti element podataka (k,b); ELSE BEGIN stranica s se cepa, alocira se nova stranica-list s’ i s povezuje sa s’; u staroj stranici s ostavlja se d’ elemenata podataka, u novoj d’+1 element podataka; IF stranica-prethodnik nije maksimalno popunjena u stranicu-prethodnik upisuje se indeksni element (k’, p’), gde je k’ - najmanja vrednost na novoj stranici s’, a p’- pokazivač na novu stranicu s’– “copy up”

B+ stablo: unošenje (nast.) ELSE BEGIN stranica-prethodnik s se cepa, alocira se nova stranica s’ sortira se niz od 2d+1 indeksnih elemenata u stranici s ostaje pokazivač p0 i d manjih indeksnih elemenata u stranicu s’ upisuje se d+1-vi pokazivač pd+1 i d indeksnih elemenata – od d+2-og do 2d+1-og u prethodnika stranice s unosi se indeksni element (kd+1, p’) gde je p’ pokazivač na stranicu s’ – “push up” (ponavlja se po potrebi) END END END.

B+ stablo: unošenje - primer Unosimo ključ 8: Korak 1: cepanje lista - ključ “5” se “kopira” umesto da se samo “penje” kao kod B stabla, jer svi podaci moraju da se nađu među elementima podataka (sledeća slika) Korak 2 – cepanje unutrašnjeg čvora - indeksni element “17, *” se samo “penje” – kao i kod B-stabla (sledeća slika) Alocira se novi koren i visina stabla raste za 1

B+ stablo: unošenje – primer – grafički prikaz

B+ stablo: unošenje – rekurzivna pseudofunkcija (Ramakrishnan, Johannes) proc insert (nodepointer, entry, newchildentry) // Inserts entry into subtree with root //*nodepointer'; degree is d; `newchildentry' is null initially, and null upon return unless // child is split if *nodepointer is a non-leaf node, say N, find i such that Ki  entry's key value < Ki+1; // choose subtree insert(Pi, entry, newchildentry); // recursively, insert entry if newchildentry is null, return; // usual case; didn't split child else, // we split child, must insert *newchildentry in N if N has space, // usual case put *newchildentry on it, set newchildentry to null, return; else, // note difference with splitting of leaf page! split N: // 2d + 1 key values and 2d + 2 nodepointers first d key values and d + 1 nodepointers stay, last d keys and d + 1 pointers move to new node, N2; // *newchildentry set to guide searches between N and N2 newchildentry = & (d+1-st key, pointer to N2); if N is the root, // root node was just split create new node with (pointer to N, *newchildentry); make the tree's root-node pointer point to the new node; return;

B+ stablo: unošenje – pseudofunkcija, nast. if *nodepointer is a leaf node, say L, if L has space, // usual case put entry on it, set newchildentry to null, and return; else, // once in a while, the leaf is full split L: first d entries stay, rest move to brand new node L2; newchildentry = & (smallest key value on L2, pointer to L2); set sibling pointers in L and L2; return; endproc

B+ stablo: unošenje – redistribucija Ideja B* stabla, primenjena na B+ stablo Unošenje u brata, izmena indeksnog elementa u neposrednom prethodniku (NE preko neposrednog prethodnika kao u B* stablu)

B+ stablo: brisanje Briše se slog sa zadatom vrednošću ključa Brisanje elementa podataka iz lista Pretraga: pronalaženje lista i brisanje elementa podataka (nema duplikata ključa!!!) Ako je list nedovoljno popunjen: redistribucija ključeva sa susednim bratom uz ažuriranje indeksnog elementa u neposrednom prethodniku, zamenom vrednosti u indeksnom elementu koji pokazuje na desni čvor najmanjom vrednošću u tom čvoru ili spajanje stranica – braće, uz ažuriranje neposrednog prethodnika brisanjem indeksnog elementa za drugi čvor (operacija inverzna operaciji “copy up”) Ako je unutrašnji čvor nedovoljno popunjen: redistribucija ključeva kao za list ili spajanje suseda na ne-list nivou: spuštanje elementa iz čvora-prethodnika (“drag down” – operacija inverzna operaciji “push up”) moguće smanjenje visine B+ stabla

B+ stablo: brisanje – rekurzivna pseudofunkcija (Ramakrishnan, Johannes) proc delete (parentpointer, nodepointer, entry, oldchildentry) // Deletes entry from subtree with root `*nodepointer'; degree is d; // `oldchildentry' null initially, and null upon return unless child deleted if *nodepointer is a non-leaf node, say N, find i such that Ki  entry's key value < Ki+1; // choose subtree delete(nodepointer, Pi, entry, oldchildentry); // recursive delete if oldchildentry is null, return; // usual case: child not deleted else, // we discarded child node remove *oldchildentry from N, // next, check minimum occupancy if N has entries to spare, // usual case set oldchildentry to null, return; // delete doesn't go further else, // note difference with merging of leaf pages! get a sibling S of N: // parentpointer arg used to find S if S has extra entries, redistribute evenly between N and S through parent; set oldchildentry to null, return; else, merge N and S // call node on rhs M oldchildentry = & (current entry in parent for M); pull splitting key from parent down into node on left; move all entries from M to node on left; discard empty node M, return;

B+ stablo: brisanje – pseudofunkcija, nast. if *nodepointer is a leaf node, say L, if L has entries to spare, // usual case remove entry, set oldchildentry to null, and return; else, // once in a while, the leaf becomes underfull get a sibling S of L; // parentpointer used to find S if S has extra entries, redistribute evenly between L and S; find entry in parent for node on right; // call it M replace key value in parent entry by new low-key value in M; set oldchildentry to null, return; else, merge L and S // call node on rhs M oldchildentry = & (current entry in parent for M); move all entries from M to node on left; discard empty node M, adjust sibling pointers, return; endproc

B+ stablo: brisanje – primer Izbrisati 19, 20 :

B+ stablo: brisanje – primer izbrisati 24 – spajanje listova, spajanje unutrašnjih čvorova:

B+ stablo: brisanje – primer redistribucije unutrašnjih čvorova Izbrisati 24 iz drugog stabla:

B+ stablo: duplikati dodavanje podataka uz ključ uvezivanje u liste, kao kod ISAM