CMU SCS Carnegie Mellon Univ. Dept. of Computer Science 15-415/615 – DB Applications C. Faloutsos & A. Pavlo Lecture#9 (R&G ch. 10) Indexing.

Slides:



Advertisements
Similar presentations
B+-Trees and Hashing Techniques for Storage and Index Structures
Advertisements

CMU SCS : Multimedia Databases and Data Mining Lecture#2: Primary key indexing – B-trees Christos Faloutsos - CMU
Database Management Systems, R. Ramakrishnan and J. Gehrke1 Tree-Structured Indexes Chapter 9.
Data Organization - B-trees. 11.2Database System Concepts A simple index Brighton A Downtown A Downtown A Mianus A Perry.
1 Tree-Structured Indexes Module 4, Lecture 4. 2 Introduction As for any index, 3 alternatives for data entries k* : 1. Data record with key value k 2.
ICS 421 Spring 2010 Indexing (1) Asst. Prof. Lipyeow Lim Information & Computer Science Department University of Hawaii at Manoa 02/18/20101Lipyeow Lim.
CS4432: Database Systems II
B+-tree and Hashing.
Tree-Structured Indexes Lecture 5 R & G Chapter 9 “If I had eight hours to chop down a tree, I'd spend six sharpening my ax.” Abraham Lincoln.
Tree-Structured Indexes Lecture 17 R & G Chapter 9 “If I had eight hours to chop down a tree, I'd spend six sharpening my ax.” Abraham Lincoln.
Tree-Structured Indexes. Introduction v As for any index, 3 alternatives for data entries k* : À Data record with key value k Á Â v Choice is orthogonal.
1 Tree-Structured Indexes Yanlei Diao UMass Amherst Feb 20, 2007 Slides Courtesy of R. Ramakrishnan and J. Gehrke.
1 Tree-Structured Indexes Chapter Introduction  As for any index, 3 alternatives for data entries k* :  Data record with key value k   Choice.
CMU SCS Carnegie Mellon Univ. Dept. of Computer Science Database Applications Lecture#9: Indexing (R&G ch. 10)
Tree-Structured Indexes Lecture 5 R & G Chapter 10 “If I had eight hours to chop down a tree, I'd spend six sharpening my ax.” Abraham Lincoln.
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.
Tree-Structured Indexes. Range Searches ``Find all students with gpa > 3.0’’ –If data is in sorted file, do binary search to find first such student,
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.
Adapted from Mike Franklin
1.1 CS220 Database Systems Tree Based Indexing: B+-tree Slides courtesy G. Kollios Boston University via UC Berkeley.
Tree-Structured Indexes Jianlin Feng School of Software SUN YAT-SEN UNIVERSITY courtesy of Joe Hellerstein for some slides.
Database Management Systems, R. Ramakrishnan and J. Gehrke1 Tree-Structured Indexes.
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 Tree- and Hash-Structured Indexes Selected Sections of Chapters 10 & 11.
Database Management Systems, R. Ramakrishnan and J. Gehrke1 Tree-Structured Indexes Chapter 9.
1 Indexing. 2 Motivation Sells(bar,beer,price )Bars(bar,addr ) Joe’sBud2.50Joe’sMaple St. Joe’sMiller2.75Sue’sRiver Rd. Sue’sBud2.50 Sue’sCoors3.00 Query:
Temple University – CIS Dept. CIS331– Principles of Database Systems V. Megalooikonomou Indexing and Hashing I (based on notes by Silberchatz, Korth, and.
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.
Storage and Indexing. How do we store efficiently large amounts of data? The appropriate storage depends on what kind of accesses we expect to have to.
1 Tree-Structured Indexes Chapter Introduction  As for any index, 3 alternatives for data entries k* :  Data record with key value k   Choice.
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 Tree-Structured Indexes Content based on Chapter 10 Database Management Systems, (3 rd.
I/O Cost Model, Tree Indexes CS634 Lecture 5, Feb 12, 2014 Slides based on “Database Management Systems” 3 rd ed, Ramakrishnan and Gehrke.
Tree-Structured Indexes Chapter 10
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 Tree-Structured Indexes Chapter 10.
Tree-Structured Indexes R & G Chapter 10 “If I had eight hours to chop down a tree, I'd spend six sharpening my ax.” Abraham Lincoln.
Database Applications (15-415) DBMS Internals- Part III Lecture 13, March 06, 2016 Mohammad Hammoud.
Tree-Structured Indexes. Introduction As for any index, 3 alternatives for data entries k*: – Data record with key value k –  Choice is orthogonal to.
Data Organization - B-trees
Tree-Structured Indexes: Introduction
Tree-Structured Indexes
Tree-Structured Indexes
COP Introduction to Database Structures
C. Faloutsos Indexing and Hashing – part I
Database Applications (15-415) DBMS Internals- Part III Lecture 15, March 11, 2018 Mohammad Hammoud.
B+-Trees and Static Hashing
Tree-Structured Indexes
CS222/CS122C: Principles of Data Management Notes #07 B+ Trees
Introduction to Database Systems Tree Based Indexing: B+-tree
Tree-Structured Indexes
Faloutsos - Pavlo CMU SCS /615
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
Tree-Structured Indexes
Indexing 1.
Database Systems (資料庫系統)
Storage and Indexing.
Database Systems (資料庫系統)
General External Merge Sort
15-826: Multimedia Databases and Data Mining
Tree-Structured Indexes
Tree-Structured Indexes
Indexing February 28th, 2003 Lecture 20.
Tree-Structured Indexes
Tree-Structured Indexes
CS222/CS122C: Principles of Data Management UCI, Fall 2018 Notes #06 B+ trees Instructor: Chen Li.
CS222P: Principles of Data Management UCI, Fall Notes #06 B+ trees
Presentation transcript:

CMU SCS Carnegie Mellon Univ. Dept. of Computer Science /615 – DB Applications C. Faloutsos & A. Pavlo Lecture#9 (R&G ch. 10) Indexing

CMU SCS Faloutsos - PavloCMU SCS /6152 Outline Motivation ISAM B-trees (not in book) B+ trees duplicates B+ trees in practice

CMU SCS Reminders Pps of foils: s.S14/slides-pps/ Q: how many want hard copies of foils? Q’: 3-per-page Q’’: punched-holes? Faloutsos - PavloCMU SCS /6153

CMU SCS Faloutsos - PavloCMU SCS /6154 Introduction How to support range searches? equality searches?

CMU SCS Faloutsos - PavloCMU SCS /6155 Range Searches ``Find all students with gpa > 3.0’’ may be slow, even on sorted file What to do? Page 1 Page 2 Page N Page 3 Data File

CMU SCS Faloutsos - PavloCMU SCS /6156 Range Searches ``Find all students with gpa > 3.0’’ may be slow, even on sorted file Solution: Create an `index’ file. Page 1 Page 2 Page N Page 3 Data File k2 kN k1 Index File

CMU SCS Faloutsos - PavloCMU SCS /6157 Range Searches More details: if index file is small, do binary search there Otherwise?? Page 1 Page 2 Page N Page 3 Data File k2 kN k1 Index File

CMU SCS Faloutsos - PavloCMU SCS /6158 ISAM Repeat recursively! Non-leaf Pages Leaf

CMU SCS Faloutsos - PavloCMU SCS /6159 ISAM OK - what if there are insertions and overflows? Non-leaf Pages Leaf

CMU SCS Faloutsos - PavloCMU SCS /61510 ISAM Overflow pages, linked to the primary page Non-leaf Pages Overflow page Primary pages Leaf

CMU SCS Faloutsos - PavloCMU SCS /61511 Example ISAM Tree 2 entries per page 10*15*20*27*33*37* 40* 46* 51* 55* 63* 97* Root

CMU SCS Faloutsos - PavloCMU SCS /61512 ISAM Details format of an index page? how full should a newly created ISAM be? 10*15*20*27*33*37* 40* 46* 51* 55* 63* 97* Root

CMU SCS Faloutsos - PavloCMU SCS /61513 ISAM Details format of an index page? how full should a newly created ISAM be? –~80-90% (not 100%) 10*15*20*27*33*37* 40* 46* 51* 55* 63* 97* Root

CMU SCS Faloutsos - PavloCMU SCS /61514 ISAM is a STATIC Structure that is, index pages don’t change File creation: Leaf (data) pages allocated sequentially, sorted by search key; then index pages allocated, then overflow pgs. 10*15*20*27*33*37* 40* 46* 51* 55* 63* 97* Root

CMU SCS Faloutsos - PavloCMU SCS /61515 ISAM is a STATIC Structure Search: Start at root; use key comparisons to go to leaf. Cost = ?? 10*15*20*27*33*37* 40* 46* 51* 55* 63* 97* Root

CMU SCS Faloutsos - PavloCMU SCS /61516 ISAM is a STATIC Structure Search: Start at root; use key comparisons to go to leaf. Cost = ?? 10*15*20*27*33*37* 40* 46* 51* 55* 63* 97* Root N F

CMU SCS Faloutsos - PavloCMU SCS /61517 ISAM is a STATIC Structure Search: Start at root; use key comparisons to go to leaf. Cost = log F N ; F = # entries/pg (i.e., fanout), N = # leaf pgs 10*15*20*27*33*37* 40* 46* 51* 55* 63* 97* Root

CMU SCS Faloutsos - PavloCMU SCS /61518 ISAM is a STATIC Structure Insert: Find leaf that data entry belongs to, and put it there. Overflow page if necessary. Delete: Find and remove from leaf; if empty page, de-allocate. 10*15*20*27*33*37* 40* 46* 51* 55* 63* 97* Root

CMU SCS Faloutsos - PavloCMU SCS / * Example: Insert 23*, 48*, 41*, 42* 10*15*20*27*33*37* 40* 46* 51* 55* 63* 97* Root Overflow Pages Leaf Index Pages Primary 23* 41* 42*

CMU SCS 21* means + rest of record (it’s a bit more complicated – but we stay with that, for the moment). ‘21’ plain means just 4 bytes, to store integer 21 Faloutsos - PavloCMU SCS / * 21 (name, age, etc) 21 divider ~record

CMU SCS Faloutsos - PavloCMU SCS / * 10*15*20*27*33*37* 40* 46* 51* 55* 63* 97* Root Overflow Pages Leaf Index Pages Primary 23* 41* 42* * Note that 51* appears in index levels, but not in leaf!... then delete 42*, 51*, 97*

CMU SCS Faloutsos - PavloCMU SCS /61522 ISAM ---- Issues? Pros –???? Cons –????

CMU SCS Faloutsos - PavloCMU SCS /61523 Outline Motivation ISAM B-trees (not in book) B+ trees duplicates B+ trees in practice

CMU SCS Faloutsos - PavloCMU SCS /61524 B-trees the most successful family of index schemes (B-trees, B +- trees, B * -trees) Can be used for primary/secondary, clustering/non-clustering index. balanced “n-way” search trees

CMU SCS Faloutsos - PavloCMU SCS /61525 B-trees [Rudolf Bayer and McCreight, E. M. Organization and Maintenance of Large Ordered Indexes. Acta Informatica 1, , 1972.]

CMU SCS Faloutsos - PavloCMU SCS /61526 B-trees Eg., B-tree of order d=1: <6 >6 <9 >9

CMU SCS Faloutsos - PavloCMU SCS /61527 B - tree properties: each node, in a B-tree of order d: –Key order –at most n=2d keys –at least d keys (except root, which may have just 1 key) –all leaves at the same level –if number of pointers is k, then node has exactly k-1 keys –(leaves are empty) v1v1 v2v2 …vnvn p1p1 p n+1

CMU SCS Faloutsos - PavloCMU SCS /61528 Properties “block aware” nodes: each node -> disk page O(log (N)) for everything! (ins/del/search) typically, if d = , then levels utilization >= 50%, guaranteed; on average 69%

CMU SCS Faloutsos - PavloCMU SCS /61529 Queries Algo for exact match query? (eg., ssn=8?) <6 >6 <9 >9

CMU SCS Faloutsos - PavloCMU SCS /61530 JAVA animation! strongly recommended! (with all usual pre- cautions – VM etc)

CMU SCS Faloutsos - PavloCMU SCS /61531 Queries Algo for exact match query? (eg., ssn=8?) <6 >6 <9 >9

CMU SCS Faloutsos - PavloCMU SCS /61532 Queries Algo for exact match query? (eg., ssn=8?) <6 >6 <9 >9

CMU SCS Faloutsos - PavloCMU SCS /61533 Queries Algo for exact match query? (eg., ssn=8?) <6 >6 <9 >9

CMU SCS Faloutsos - PavloCMU SCS /61534 Queries Algo for exact match query? (eg., ssn=8?) <6 >6 <9 >9 H steps (= disk accesses)

CMU SCS Faloutsos - PavloCMU SCS /61535 Queries what about range queries? (eg., 5<salary<8) Proximity/ nearest neighbor searches? (eg., salary ~ 8 )

CMU SCS Faloutsos - PavloCMU SCS /61536 Queries what about range queries? (eg., 5<salary<8) Proximity/ nearest neighbor searches? (eg., salary ~ 8 ) <6 >6 <9 >9

CMU SCS Faloutsos - PavloCMU SCS /61537 Queries what about range queries? (eg., 5<salary<8) Proximity/ nearest neighbor searches? (eg., salary ~ 8 ) <6 >6 <9 >9

CMU SCS Faloutsos - PavloCMU SCS /61538 Queries what about range queries? (eg., 5<salary<8) Proximity/ nearest neighbor searches? (eg., salary ~ 8 ) <6 >6 <9 >9

CMU SCS Faloutsos - PavloCMU SCS /61539 Queries what about range queries? (eg., 5<salary<8) Proximity/ nearest neighbor searches? (eg., salary ~ 8 ) <6 >6 <9 >9

CMU SCS Faloutsos - PavloCMU SCS /61540 B-trees: Insertion Insert in leaf; on overflow, push middle up (recursively) split: preserves B - tree properties

CMU SCS Faloutsos - PavloCMU SCS /61541 B-trees Easy case: Tree T0; insert ‘8’ <6 >6 <9 >9

CMU SCS Faloutsos - PavloCMU SCS /61542 B-trees Tree T0; insert ‘8’ <6 >6 <9 >9 8

CMU SCS Faloutsos - PavloCMU SCS /61543 B-trees Hardest case: Tree T0; insert ‘2’ <6 >6 <9 >9 2

CMU SCS Faloutsos - PavloCMU SCS /61544 B-trees Hardest case: Tree T0; insert ‘2’ push middle up

CMU SCS Faloutsos - PavloCMU SCS /61545 B-trees Hardest case: Tree T0; insert ‘2’ Ovf; push middle

CMU SCS Faloutsos - PavloCMU SCS /61546 B-trees Hardest case: Tree T0; insert ‘2’ Final state

CMU SCS Faloutsos - PavloCMU SCS /61547 B-trees: Insertion Insert in leaf; on overflow, push middle up (recursively – ‘propagate split’) split: preserves all B - tree properties (!!) notice how it grows: height increases when root overflows & splits Automatic, incremental re-organization (contrast with ISAM!)

CMU SCS Faloutsos - PavloCMU SCS /61548 INSERTION OF KEY ’K’ find the correct leaf node ’L’; if ( ’L’ overflows ){ split ’L’, and push middle key to parent node ’P’; if (’P’ overflows){ repeat the split recursively; } else{ add the key ’K’ in node ’L’; /* maintaining the key order in ’L’ */ } Pseudo-code

CMU SCS Faloutsos - PavloCMU SCS /61549 Overview... B – trees –Dfn, Search, insertion, deletion...

CMU SCS Faloutsos - PavloCMU SCS /61550 Deletion Rough outline of algo: Delete key; on underflow, may need to merge In practice, some implementors just allow underflows to happen…

CMU SCS Faloutsos - PavloCMU SCS /61551 B-trees – Deletion Easiest case: Tree T0; delete ‘3’ <6 >6 <9 >9

CMU SCS Faloutsos - PavloCMU SCS /61552 B-trees – Deletion Easiest case: Tree T0; delete ‘3’ <6 >6 <9 >9

CMU SCS Faloutsos - PavloCMU SCS /61553 B-trees – Deletion Case1: delete a key at a leaf – no underflow Case2: delete non-leaf key – no underflow Case3: delete leaf-key; underflow, and ‘rich sibling’ Case4: delete leaf-key; underflow, and ‘poor sibling’

CMU SCS Faloutsos - PavloCMU SCS /61554 B-trees – Deletion Case1: delete a key at a leaf – no underflow (delete 3 from T0) <6 >6 <9 >9

CMU SCS Faloutsos - PavloCMU SCS /61555 B-trees – Deletion Case2: delete a key at a non-leaf – no underflow (eg., delete 6 from T0) <6 >6 <9 >9 Delete & promote, ie:

CMU SCS Faloutsos - PavloCMU SCS /61556 B-trees – Deletion Case2: delete a key at a non-leaf – no underflow (eg., delete 6 from T0) <6 >6 <9 >9 Delete & promote, ie:

CMU SCS Faloutsos - PavloCMU SCS /61557 B-trees – Deletion Case2: delete a key at a non-leaf – no underflow (eg., delete 6 from T0) <6 >6 <9 >9 Delete & promote, ie: 3

CMU SCS Faloutsos - PavloCMU SCS /61558 B-trees – Deletion Case2: delete a key at a non-leaf – no underflow (eg., delete 6 from T0) <3 >3 <9 >9 3 FINAL TREE

CMU SCS Faloutsos - PavloCMU SCS /61559 B-trees – Deletion Case2: delete a key at a non-leaf – no underflow (eg., delete 6 from T0) Q: How to promote? A: pick the largest key from the left sub-tree (or the smallest from the right sub-tree) Observation: every deletion eventually becomes a deletion of a leaf key

CMU SCS Faloutsos - PavloCMU SCS /61560 B-trees – Deletion Case1: delete a key at a leaf – no underflow Case2: delete non-leaf key – no underflow Case3: delete leaf-key; underflow, and ‘rich sibling’ Case4: delete leaf-key; underflow, and ‘poor sibling’

CMU SCS Faloutsos - PavloCMU SCS /61561 B-trees – Deletion Case3: underflow & ‘rich sibling’ (eg., delete 7 from T0) <6 >6 <9 >9 Delete & borrow, ie:

CMU SCS Faloutsos - PavloCMU SCS /61562 B-trees – Deletion Case3: underflow & ‘rich sibling’ (eg., delete 7 from T0) <6 >6 <9 >9 Delete & borrow, ie: Rich sibling

CMU SCS Faloutsos - PavloCMU SCS /61563 B-trees – Deletion Case3: underflow & ‘rich sibling’ ‘rich’ = can give a key, without underflowing ‘borrowing’ a key: THROUGH the PARENT!

CMU SCS Faloutsos - PavloCMU SCS /61564 B-trees – Deletion Case3: underflow & ‘rich sibling’ (eg., delete 7 from T0) <6 >6 <9 >9 Delete & borrow, ie: Rich sibling NO!!

CMU SCS Faloutsos - PavloCMU SCS /61565 B-trees – Deletion Case3: underflow & ‘rich sibling’ (eg., delete 7 from T0) <6 >6 <9 >9 Delete & borrow, ie:

CMU SCS Faloutsos - PavloCMU SCS /61566 B-trees – Deletion Case3: underflow & ‘rich sibling’ (eg., delete 7 from T0) <6 >6 <9 >9 Delete & borrow, ie: 6

CMU SCS Faloutsos - PavloCMU SCS /61567 B-trees – Deletion Case3: underflow & ‘rich sibling’ (eg., delete 7 from T0) <3 >3 <9 >9 Delete & borrow, through the parent 6 FINAL TREE

CMU SCS Faloutsos - PavloCMU SCS /61568 B-trees – Deletion Case1: delete a key at a leaf – no underflow Case2: delete non-leaf key – no underflow Case3: delete leaf-key; underflow, and ‘rich sibling’ Case4: delete leaf-key; underflow, and ‘poor sibling’

CMU SCS Faloutsos - PavloCMU SCS /61569 B-trees – Deletion Case4: underflow & ‘poor sibling’ (eg., delete 13 from T0) <6 >6 <9 >9

CMU SCS Faloutsos - PavloCMU SCS /61570 B-trees – Deletion Case4: underflow & ‘poor sibling’ (eg., delete 13 from T0) <6 >6 <9 >9

CMU SCS Faloutsos - PavloCMU SCS /61571 B-trees – Deletion Case4: underflow & ‘poor sibling’ (eg., delete 13 from T0) <6 >6 <9 >9 A: merge w/ ‘poor’ sibling

CMU SCS Faloutsos - PavloCMU SCS /61572 B-trees – Deletion Case4: underflow & ‘poor sibling’ (eg., delete 13 from T0) Merge, by pulling a key from the parent exact reversal from insertion: ‘split and push up’, vs. ‘merge and pull down’ Ie.:

CMU SCS Faloutsos - PavloCMU SCS /61573 B-trees – Deletion Case4: underflow & ‘poor sibling’ (eg., delete 13 from T0) <6 >6 A: merge w/ ‘poor’ sibling 9

CMU SCS Faloutsos - PavloCMU SCS /61574 B-trees – Deletion Case4: underflow & ‘poor sibling’ (eg., delete 13 from T0) <6 >6 9 FINAL TREE

CMU SCS Faloutsos - PavloCMU SCS /61575 B-trees – Deletion Case4: underflow & ‘poor sibling’ -> ‘pull key from parent, and merge’ Q: What if the parent underflows? A: repeat recursively

CMU SCS Faloutsos - PavloCMU SCS /61576 B-tree deletion - pseudocode DELETION OF KEY ’K’ locate key ’K’, in node ’N’ if( ’N’ is a non-leaf node) { delete ’K’ from ’N’; find the immediately largest key ’K1’; /* which is guaranteed to be on a leaf node ’L’ */ copy ’K1’ in the old position of ’K’; invoke this DELETION routine on ’K1’ from the leaf node ’L’; else { /* ’N’ is a leaf node */... (next slide..)

CMU SCS Faloutsos - PavloCMU SCS /61577 B-tree deletion - pseudocode /* ’N’ is a leaf node */ if( ’N’ underflows ){ let ’N1’ be the sibling of ’N’; if( ’N1’ is "rich"){ /* ie., N1 can lend us a key */ borrow a key from ’N1’ THROUGH the parent node; }else{ /* N1 is 1 key away from underflowing */ MERGE: pull the key from the parent ’P’, and merge it with the keys of ’N’ and ’N1’ into a new node; if( ’P’ underflows){ repeat recursively } }

CMU SCS Faloutsos - PavloCMU SCS /61578 Outline Motivation ISAM B-trees (not in book) –algorithms –extensions B+ trees duplicates B+ trees in practice

CMU SCS Faloutsos - PavloCMU SCS /61579 Variations How could we do even better than the B- trees above?

CMU SCS Faloutsos - PavloCMU SCS /61580 B*-tree In B-trees, worst case util. = 50%, if we have just split all the pages how to increase the utilization of B - trees?..with B* - trees!

CMU SCS Faloutsos - PavloCMU SCS /61581 B-trees and B*-trees Eg., Tree T0; insert ‘2’ <6 >6 <9 >9 2

CMU SCS Faloutsos - PavloCMU SCS /61582 B*-trees: deferred split! Instead of splitting, LEND keys to sibling! (through PARENT, of course!) <6 >6 <9 >9 2

CMU SCS Faloutsos - PavloCMU SCS /61583 B*-trees: deferred split! Instead of splitting, LEND keys to sibling! (through PARENT, of course!) <3 >3 <9 >9 2 7 FINAL TREE

CMU SCS Faloutsos - PavloCMU SCS /61584 B*-trees: deferred split! Notice: shorter, more packed, faster tree It’s a rare case, where space utilization and speed improve together BUT: What if the sibling has no room for our ‘lending’?

CMU SCS Faloutsos - PavloCMU SCS /61585 B*-trees: deferred split! A: 2-to-3 split: get the keys from the sibling, pool them with ours (and a key from the parent), and split in 3. Could we extend the idea to 3-to-4 split, 4- to-5 etc?

CMU SCS Faloutsos - PavloCMU SCS /61586 B*-trees: deferred split! A: 2-to-3 split: get the keys from the sibling, pool them with ours (and a key from the parent), and split in 3. Could we extend the idea to 3-to-4 split, 4- to-5 etc? Yes, but: diminishing returns

CMU SCS Faloutsos - PavloCMU SCS /61587 Outline Motivation ISAM B-trees (not in book) B+ trees duplicates B+ trees in practice

CMU SCS Faloutsos - PavloCMU SCS /61588 B+ trees - Motivation For clustering index, data records are scattered: <6 >6 <9 >9

CMU SCS Faloutsos - PavloCMU SCS /61589 Solution: B + - trees facilitate sequential ops They string all leaf nodes together AND replicate keys from non-leaf nodes, to make sure every key appears at the leaf level (vital, for clustering index!)

CMU SCS Faloutsos - PavloCMU SCS /61590 B+ trees <6 >=6>=6 <9 >=9>=9 713

CMU SCS Faloutsos - PavloCMU SCS /61591 B+ trees <6 >=6>=6 <9 >=9>=9 713

CMU SCS Faloutsos - PavloCMU SCS /61592 B+trees More details: next (and textbook) In short: on split –at leaf level: COPY middle key upstairs –at non-leaf level: push middle key upstairs (as in plain B-tree)

CMU SCS Faloutsos - PavloCMU SCS /61593 Example B+ Tree Search begins at root, and key comparisons direct it to a leaf (as in ISAM). Search for 5*, 15*, all data entries >= 24*... Based on the search for 15*, we know it is not in the tree! Root * 3*5* 7*14*16* 19*20* 22*24*27* 29*33*34* 38* 39* 13

CMU SCS Faloutsos - PavloCMU SCS /61594 B+ Trees in Practice Typical order: 100. Typical fill-factor: 67%. –average fanout = 2*100*0.67 = 134 Typical capacities: –Height 4: = 312,900,721 entries –Height 3: = 2,406,104 entries

CMU SCS Faloutsos - PavloCMU SCS /61595 B+ Trees in Practice Can often keep top levels in buffer pool: –Level 1 = 1 page = 8 KB –Level 2 = 134 pages = 1 MB –Level 3 = 17,956 pages = 140 MB

CMU SCS Faloutsos - PavloCMU SCS /61596 Inserting a Data Entry into a B+ Tree Find correct leaf L. Put data entry onto L. –If L has enough space, done! –Else, must split L (into L and a new node L2) Redistribute entries evenly, copy up middle key. parent node may overflow –but then: push up middle key. Splits “grow” tree; root split increases height.

CMU SCS Faloutsos - PavloCMU SCS /61597 Example B+ Tree - Inserting 8* Root * 3*5* 7*14*16* 19*20* 22*24*27* 29* 13 23*

CMU SCS Faloutsos - PavloCMU SCS /61598 Example B+ Tree - Inserting 8* Root * 3*5* 7* 14*16* 19*20* 22*24*27* 29* 13 23* 2* 3* 14*16* 19*20* 22*24*27* 29* 23* 7*8* 5* * <5 >=5

CMU SCS Faloutsos - PavloCMU SCS /61599 Example B+ Tree - Inserting 21* 2*3* Root 5 14*16* 19*20*22*24*27* 29* 7*5*8* * 2*3* 14*16* 19*20*22*24*27* 29* 7*5*8* 23*

CMU SCS Faloutsos - PavloCMU SCS / Example B+ Tree - Inserting 21* 2*3* Root 14*16* 19*20*22*24*27* 29* 7*5*8* * 2*3* 14*16* 19*20*24*27* 29* 7*5*8* 21*22*23*

CMU SCS Faloutsos - PavloCMU SCS / Example B+ Tree Notice that root was split, increasing height. Could use defer-split here. (Pros/Cons?) 2*3* Root *16* 19*20*21*22* 23*24*27* 29* 135 7*5*8* Old root

CMU SCS Faloutsos - PavloCMU SCS / Example: Data vs. Index Page Split leaf: ‘copy’ non-leaf: ‘push’ why not non-leaves? 2* 3* 5* 7* 8* … 2* 3*5* 7* Data Page Split Index Page Split 8* 5

CMU SCS Faloutsos - PavloCMU SCS / Now you try… 2*3* Root 30 14*16* 135 7*5*8* 20 21*22* 23* … (not shown) 11* Insert the following data entries (in order): 28*, 6*, 25*

CMU SCS Faloutsos - PavloCMU SCS / Now you try… 2*3* Root 30 14*16* 135 7*5*8* 20 21*22* 23* … (not shown) 11* After inserting 28* 28* Insert the following data entries (in order): 28*, 6*, 25*

CMU SCS Faloutsos - PavloCMU SCS / Answer… 2*3* 30 7*8* 14*16* 6*5* … After inserting 28*, 6* 21*22* 23* 28* * 5*7* 8* 11*

CMU SCS Faloutsos - PavloCMU SCS / Answer… 2*3* 30 7*8* 14*16* 6*5* … After inserting 28*, 6* insert 25*: Q1: which pages will be affected: Q2: how will the root look like after that? 21*22* 23* 28* *

CMU SCS Faloutsos - PavloCMU SCS / Answer… 2*3* 30 7*8* 14*16* 6*5* … After inserting 28*, 6* insert 25*: Q1: which pages will be affected: Q2: how will the root look like after that? 21*22* 23* 28* * A1: red arrows A2: (13; 30; _ ; _ )

CMU SCS Faloutsos - PavloCMU SCS / Answer… 2*3* *8* 14*16* 21*22* 23*25* 28* 75 6*5* 30 … 11* After inserting 25* * causes propagated split!

CMU SCS Faloutsos - PavloCMU SCS / Deleting a Data Entry from a B+ Tree Start at root, find leaf L where entry belongs. Remove the entry. –If L is at least half-full, done! –If L underflows Try to re-distribute, borrowing from sibling (adjacent node with same parent as L). If re-distribution fails, merge L and sibling. –update parent –and possibly merge, recursively

CMU SCS Faloutsos - PavloCMU SCS / Example: Delete 19* & 20* Deleting 19* is easy: 2*3* Root *16* 19*20*22*24*27* 29*33*34* 38* 39* 135 7*5*8* 2*3* Root *16* 33*34* 38* 39* 135 7*5*8* 22*24* 27 27*29* 20*22* Deleting 20* -> re-distribution (notice: 27 copied up) 12 3

CMU SCS Faloutsos - PavloCMU SCS / *3* Root *16* 33*34* 38* 39* 135 7*5*8* 22*24* 27 27*29*... And Then Deleting 24* 2*3* Root 17 14*16* 33*34* 38* 39* 135 7*5*8* 22*27* 30 29* Must merge leaves… but are we done?? 3 4

CMU SCS Faloutsos - PavloCMU SCS / Merge Non-Leaf Nodes, Shrink Tree 2*3* Root 17 14*16* 33*34* 38* 39* 135 7*5*8* 22*27* 30 29* 4 2* 3* 7* 14*16* 22* 27* 29* 33*34* 38* 39* 5*8* Root

CMU SCS Faloutsos - PavloCMU SCS / Example of Non-leaf Re- distribution Tree is shown below during deletion of 24*. Now, we can (and must) re-distribute keys Root *16* 17*18* 20*33*34* 38* 39* 22*27*29*21* 7*5*8* 3*2*

CMU SCS Faloutsos - PavloCMU SCS / After Re-distribution need only re-distribute ‘20’; did ‘17’, too why would we want to re-distributed more keys? 14*16* 33*34* 38* 39* 22*27*29* 17*18* 20*21* 7*5*8* 2*3* Root

CMU SCS Faloutsos - PavloCMU SCS / Main observations for deletion If a key value appears twice (leaf + nonleaf), the above algorithms delete it from the leaf, only why not non-leaf, too?

CMU SCS Faloutsos - PavloCMU SCS / Main observations for deletion If a key value appears twice (leaf + nonleaf), the above algorithms delete it from the leaf, only why not non-leaf, too? ‘lazy deletions’ - in fact, some vendors just mark entries as deleted (~ underflow), –and reorganize/compact later

CMU SCS Faloutsos - PavloCMU SCS / Recap: main ideas on overflow, split (and ‘push’, or ‘copy’) –or consider deferred split on underflow, borrow keys; or merge –or let it underflow...

CMU SCS Faloutsos - PavloCMU SCS / Outline Motivation ISAM B-trees (not in book) B+ trees duplicates B+ trees in practice –prefix compression; bulk-loading; ‘order’

CMU SCS Faloutsos - PavloCMU SCS / B+ trees with duplicates Everything so far: assumed unique key values How to extend B+-trees for duplicates? –Alt. 2: –Alt. 3: 2 approaches, roughly equivalent

CMU SCS Faloutsos - PavloCMU SCS / B+ trees with duplicates approach#1: repeat the key values, and extend B+ tree algo’s appropriately - eg. many ‘14’s * 3*5* 7*13*14* 22*24*27* 29* 13 23* 14*

CMU SCS Faloutsos - PavloCMU SCS / B+ trees with duplicates approach#1: subtle problem with deletion: treat rid as part of the key, thus making it unique * 3*5* 7*13*14* 22*24*27* 29* 13 23* 14*

CMU SCS Faloutsos - PavloCMU SCS / B+ trees with duplicates approach#2: store each key value: once but store the {rid list} as variable-length field (and use overflow pages, if needed) * 3*5* 7*13*14* 22* 24*27* 29* 13 23* {rid list} {rid list, cont’d}

CMU SCS Faloutsos - PavloCMU SCS / B+ trees with duplicates approach#2: store each key value: once but store the {rid list} as variable-length field (and use overflow pages, if needed) * 3*5* 7*13*14* 22* 24*27* 29* 13 23* {rid list} {rid list, cont’d} Used in HW3

CMU SCS Faloutsos - PavloCMU SCS / Outline Motivation ISAM B-trees (not in book) B+ trees duplicates B+ trees in practice –prefix compression; bulk-loading; ‘order’

CMU SCS Faloutsos - PavloCMU SCS / Prefix Key Compression Important to increase fan-out. (Why?) Key values in index entries only `direct traffic’; can often compress them. PapadopoulosPernikovskaya

CMU SCS Faloutsos - PavloCMU SCS / Prefix Key Compression Important to increase fan-out. (Why?) Key values in index entries only `direct traffic’; can often compress them. Pap Per

CMU SCS Faloutsos - PavloCMU SCS / Bulk Loading of a B+ Tree In an empty tree, insert many keys Why not one-at-a-time?

CMU SCS Faloutsos - PavloCMU SCS / Bulk Loading of a B+ Tree Initialization: Sort all data entries scan list; whenever enough for a page, pack 3* 4* 6*9*10*11*12*13* 20* 22* 23*31* 35* 36*38*41*44* Sorted pages of data entries; not yet in B+ tree Root

CMU SCS Faloutsos - PavloCMU SCS / Bulk Loading (Contd.) 3* 4* 6*9*10* 11*12*13* 20*22* 23*31* 35* 36*38*41*44* Root Data entry pages not yet in B+ tree * 4* 6*9*10* 11*12*13* 20*22* 23*31* 35* 36*38*41*44* 6 Root not yet in B+ tree Data entry pages Book’s algo (any problems?)

CMU SCS Faloutsos - PavloCMU SCS / Outline Motivation ISAM B-trees (not in book) B+ trees duplicates B+ trees in practice –prefix compression; bulk-loading; ‘order’

CMU SCS Faloutsos - PavloCMU SCS / A Note on `Order’ Order (d) concept replaced by physical space criterion in practice (`at least half-full’). Why do we need the distinction? VARCHAR

CMU SCS Faloutsos - PavloCMU SCS / A Note on `Order’ Order (d) concept replaced by physical space criterion in practice (`at least half-full’). Why do we need it? –Index pages can typically hold many more entries than leaf pages. –Variable sized records and search keys mean different nodes will contain different numbers of entries. –Even with fixed length fields, multiple records with the same search key value (duplicates) can lead to variable-sized data entries (if we use Alternative (3)).

CMU SCS Faloutsos - PavloCMU SCS / A Note on `Order’ Many real systems are even sloppier than this: they allow underflow, and only reclaim space when a page is completely empty. (what are the benefits of such ‘slopiness’?)

CMU SCS Faloutsos - PavloCMU SCS / Conclusions B+tree is the prevailing indexing method Excellent, O(logN) worst-case performance for ins/del/search; (~3-4 disk accesses in practice) guaranteed 50% space utilization; avg 69%

CMU SCS Faloutsos - PavloCMU SCS / Conclusions Can be used for any type of index: primary/secondary, sparse (clustering), or dense (non-clustering) Several fine-tuning extensions on the basic algorithm –deferred split; prefix compression; (underflows) –bulk-loading –duplicate handling