Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% found this document useful (0 votes)
6 views

Lecture 5 Trees

tq
Copyright
© © All Rights Reserved
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
6 views

Lecture 5 Trees

tq
Copyright
© © All Rights Reserved
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 47

Tree-Structured

Indexes
CS 186, Spring 2006, Lectures
5 &6
R & G Chapters 9 & 10

“If I had eight hours to


chop down a tree, I'd spend
six sharpening my ax.”

Abraham Lincoln
Review: Files, Pages,
Records
• Abstraction of stored data is “files” of “records”.
– Records live on pages
– Physical Record ID (RID) = <page#, slot#>
• Variable length data requires more sophisticated
structures for records and pages. (why?)
– Records: offset array in header
– Pages: Slotted pages w/internal offsets & free
space area
• Often best to be “lazy” about issues such as free
space management, exact ordering, etc. (why?)
• Files can be unordered (heap), sorted, or kinda
sorted (i.e., “clustered”) on a search key.
– Tradeoffs are update/maintenance cost vs. speed
of accesses via the search key.
– Files can be clustered (sorted) at most one
way.
• Indexes can be used to speed up many kinds of
accesses. (i.e., “access paths”)
Indexes: Introduction
• Sometimes, we want to retrieve records by specifying the
values in one or more fields, e.g.,
– Find all students in the “CS” department
– Find all students with a gpa > 3
• An index on a file is a disk-based data structure that
speeds up selections on the search key fields for the
index.
– Any subset of the fields of a relation can be the search
key for an index on the relation.
– Search key is not the same as key (e.g. doesn’t have to
be unique ID).
• An index contains a collection of data entries, and
supports efficient retrieval of all records with a given
search key value k.
– Typically, index also contains auxiliary information
that directs searches to the desired data entries
Indexes: Overview
• Many indexing techniques exist:
– B+ trees, hash-based structures, R trees,

• Can have multiple (different) indexes per
file.
– E.g. file sorted by age, with a hash index
on salary and a B+tree index on name.
• Index Classification
– What selections does it support
– Representation of data entries in index
• i.e., what kind of info is the index actually
storing?
• 3 alternatives here
– Clustered vs. Unclustered Indexes
– Single Key vs. Composite Indexes
– Tree-based, hash-based, other
Indexes: What Selections do

they support?
Selections of form field <op> constant
• Equality selections (op is =)
– Either “tree” or “hash” indexes help here.
• Range selections (op is one of <, >, <=, >=, BETWEEN)
– “Hash” indexes don’t work for these.

• More exotic selections:


– 2-dimensional ranges (“east of Berkeley and west of
Truckee and North of Fresno and South of Eureka”)
• Or n-dimensional
– 2-dimensional distances (“within 2 miles of Soda
Hall”)
• Or n-dimensional
– Ranking queries (“10 restaurants closest to
Berkeley”)
– Regular expression matches, genome string matches,
etc.
– Keyword/Web search - includes “importance” of words
in documents, link structure, …
Example Tree Index
• Index entries:<search key value,
page id> they direct search for
data entries in leaves.
• Example where each node can hold 2
entries; Root
40

20 33 51 63

10* 15* 20* 27* 33* 37* 40* 46* 51* 55* 63* 97*
Alternatives for Data Entry k*
in Index
• Question: What is actually stored in the
leaves of the index for key value “k”?
(i.e., what are the “data entries”?)

• Three alternatives:
1. Actual data record(s) with key value k
2. {<k, rid of matching data record>}
3. <k, list of rids of matching data
records>

• Choice is orthogonal to the indexing


technique.
– e.g., B+ trees, hash-based structures, R
trees, …
Alternatives for Data
Entries (Contd.)
• Alternative 1:
Actual data record (with key
value k)
– If this is used, index structure is a
file organization for data records (like
Heap files or sorted files).
– At most one index on a given collection
of data records can use Alternative 1.
– This alternative saves pointer lookups
but can be expensive to maintain with
insertions and deletions.
Alternatives for Data
Entries (Contd.)
Alternative 2
{<k, rid of matching data record>}
and Alternative 3
<k, list of rids of matching data records>

• Easier to maintain than Alt 1.


• If more than one index is required on a
given file, at most one index can use
Alternative 1; rest must use Alternatives
2 or 3.
• Alternative 3 more compact than
Alternative 2, but leads to variable sized
data entries even if search keys are of
fixed length.
• Even worse, for large rid lists the data
entry would have to span multiple blocks!
Index Classification
(continued)

• Clustered vs. unclustered: If order of


data records is the same as, or `close
to’, order of index data entries, then
called clustered index.
– A file can be clustered on at most one
search key.
– Cost of retrieving data records through
index varies greatly based on whether
index is clustered or not!
– Alternative 1 implies clustered, but not
vice-versa.
Clustered vs. Unclustered
Index
• Suppose that Alternative (2) is used for data
entries, and that the data records are stored
in a Heap file.
– To build clustered index, first sort the
Heap file (with some free space on each
block for future inserts).
– Overflow blocks may be needed for inserts.
(Thus, order of data recs is `close to’,
Index entries but
UNCLUSTERED
CLUSTERED direct search for
not identical data
to,entries
the sort order.)

Data entries Data entries


(Index File)
(Data file)

Data Records Data Records


Unclustered vs. Clustered
Indexes
• What are the tradeoffs????
• Clustered Pros
– Efficient for range searches
– May be able to do some types of
compression
– Possible locality benefits (related
data?)
– ???
• Clustered Cons
– Expensive to maintain (on the fly or
sloppy with reorganization)
Cost of B:
R:
The number of data pages
Number of records per page
Operations
D: (Average) time to read or write disk

Heap File Sorted File Clustered File


(67% Occupancy)
Scan all BD BD 1.5 BD
records

Equality 0.5 BD (log2 B) * D


Search (logF 1.5B) * D
Range BD [(log2 B) +
Search #match pg]*D [(logF 1.5B) +
#match pg]*D
Insert 2D ((log2B)+B)D
((logF 1.5B)+1)D
Delete (0.5B+1) D ((log2B)+B)D
(because rd,wrt 0.5
file)
((logF 1.5B)+1)D
Composite Search Keys
• Search on a combination of
fields.
– Equality query: Every field Examples of composite key
value is equal to a constant indexes using lexicographic order
value. E.g. wrt <age,sal>
index: 11,80 11
• age=20 and sal =75
12,10 12
– Range query: Some field name age sal
12,20 12
value is not a constant.
E.g.: 13,75 bob 12 10 13
• age > 20; or age=20 and sal <age, sal> cal 11 80 <age>
> 10 joe 12 20
• Data entries in index sorted by
10,12 sue 13 75 10
search key to support range
queries. 20,12 Data records 20

– Lexicographic order 75,13 sorted by name 75


– Like the dictionary, but on 80,11 80
fields, not letters! <sal, age> <sal>
Data entries in index Data entries
sorted by <sal,age> sorted by <sal>
Tree-Structured Indexes:
Introduction

• Tree-structured indexing techniques


support both range searches and equality
searches.
• ISAM: static structure; early index
technology.
• B+ tree: dynamic, adjusts gracefully
under inserts and deletes.
• ISAM =Indexed Sequential Access Method
A Note of Caution
• ISAM is an old-fashioned idea
– B+-trees are usually better, as we’ll see
• Though not always
• But, it’s a good place to start
– Simpler than B+-tree, but many of the
same ideas

• Upshot
– Don’t brag about being an ISAM expert on
your resume
– Do understand how they work, and
tradeoffs with B+-trees
Range Searches
• ``Find all students with gpa > 3.0’’
– If data is in sorted file, do binary
search to find first such student,
then scan to find others.
– Cost of binary search in a database
can be quite high. Q: Why???
• Simple idea: Create an `index’ file.
k1 k2 kN Index File

Page 1 Page 2 Page 3 Page N Data File

Can do binary search on (smaller) index file!


index entry

P K
ISAM 0 1 P K 2 P K m Pm
1 2

• Index file may still be quite large. But


we can apply the idea repeatedly!

Non-leaf
Pages

Leaf
Pages
Overflow
page
Primary pages

Leaf pages contain data entries.


Example ISAM Tree
• Index entries:<search key value,
page id> they direct search for
data entries in leaves.
• Example where each node can hold 2
entries; Root
40

20 33 51 63

10* 15* 20* 27* 33* 37* 40* 46* 51* 55* 63* 97*
Data Pages

ISAM is a STATIC Structure


• File creation: Leaf (data) pages allocated Index Pages
sequentially, sorted by search key; then
index pages allocated, then overflow pgs.
• Search: Start at root; use key Overflow pages
comparisons to go to leaf. Cost = log F N ;
F = # entries/pg (i.e., fanout), N = # leaf pgs
– no need for `next-leaf-page’ pointers. (Why?)
• 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.

e structure: inserts/deletes affect only l


Example: Insert 23*, 48*,
41*, 42*
Root
Index 40

Pages

20 33 51 63

Primary
Leaf 46* 55*
10* 15* 20* 27* 33* 37* 40* 51* 63* 97*
Pages

Overflow 23* 48* 41*

Pages
42*
... then Deleting
42*, 51*, 97*
Root
Index 40

Pages

20 33 51 63

Primary
Leaf 46* 55*
10* 15* 20* 27* 33* 37* 40* 51* 63* 97*
Pages

Overflow 23* 48* 41*

Pages
42*

te that 51* appears in index levels, but not in le


ISAM ---- Issues?

• Pros
– ????

• Cons
– ????
Administrivia - Exam
Schedule Change

• Exam 1 will be held in class on Tues


2/21 (not on the previous thurs as
originally scheduled).

• Exam 2 will remain as scheduled Thurs


3/23 (unless you want to do it over
spring break!!!).
B+ Tree: The Most Widely
Used Index
• Insert/delete at log F N cost; keep tree height-
balanced.
– F = fanout, N = # leaf pages
• Minimum 50% occupancy (except for root). Each
node contains m entries where d <= m <= 2d entries. “d”
is called the order of the tree.
• Supports equality and range-searches efficiently.
• As in ISAM, all searches go from root to leaves,
but structure is dynamic.

Index Entries
(Direct search)

Data Entries
("Sequence set")
Example B+ Tree

• Search begins at root page, and key


comparisons direct it to a leaf (as in
ISAM).
• Search for 5*, 15*, all data entries >=
Root
24* ...
13 17 24 30

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

sed on the search for 15*, we know it is not in the


A Note on Terminology
• The “+” in B+Tree indicates that it is a
special kind of “B Tree” in which all the data
entries reside in leaf pages.
– In a vanilla “B Tree”, data entries are sprinkled
throughout the tree.

• B+Trees are in many ways simpler to implement


than B Trees.
– And since we have a large fanout, the upper levels
comprise only a tiny fraction of the total storage
space in the tree.
• To confuse matters, most database people (like
me) call B+Trees “B Trees”!!! (sorry!)
B+Tree Pages

• Question: How big should the B+Tree pages


(i.e., nodes) be?
Hint 1: we want them to be fairly large
(to get high fanout).
Hint 2: they are typically stored in
files on disk.
Hint 3: they are typically read from disk
into buffer pool frames.
Hint 4: when updated, we eventually write
them from the buffer pool back to disk.
Hint 5: we call them “pages”.
B+ Trees in Practice

• Typical order: 100. Typical fill-factor:


67%.
– average fanout = 133
• Typical capacities:
– Height 3: 1333 = 2,352,637 entries
– Height 4: 1334 = 312,900,700 entries
• Can often hold top levels in buffer pool:
– Level 1 = 1 page = 8 Kbytes
– Level 2 = 133 pages = 1 Mbyte
– Level 3 = 17,689 pages = 133 MBytes
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.
• Insert index entry pointing to L2 into parent
of L.
• This can happen recursively
– To split index node, redistribute entries evenly,
but push up middle key. (Contrast with leaf
splits.)
• Splits “grow” tree; root split increases height.
– Tree growth: gets wider or one level taller at
top.
Example B+ Tree – Inserting
23*

Root

13 17 24 30

2* 3* 5* 7* 14* 16* 19* 20* 22* 23* 24* 27* 29* 33* 34* 38* 39*
Example B+ Tree - Inserting
8* Root
5 13 17 24 30

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

2* 3* 5* 7* 8* Root
17

5 13 24 30

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

ice that root was split, leading to increase in hei


 In this example, we could avoid split by
re-distributing entries;
Data vs. Index Page Split
(from previous example of inserting
“8”)
Data 2* 3* 5* 7* 8*

• Observe how
Page Entry to be inserted in parent node.
(Note that 5 is
s copied up and


minimum Split 5
continues to appear in the leaf.)
occupancy is
guaranteed in
2* 3* 5* 7* 8*
both leaf and
index pg
splits.
• Note difference Index 5 13 17 24 30
between copy-up Page
Entry to be inserted in parent node.
and push-up; be Split 17 (Note that 17 is pushed up and only
appears once in the index. Contrast
sure you this with a leaf split.)
understand the
reasons for
5 13 24 30
this.
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 has only d-1 entries,
• Try to re-distribute, borrowing from sibling
(adjacent node with same parent as L).
• If re-distribution fails, merge L and
sibling.
• If merge occurred, must delete entry (pointing to
L or sibling) from parent of L.
• Merge could propagate to root, decreasing height.
Example Tree (including 8*)

Delete 19* and 20* ...


Root
Root
17
13 17 24 30

5 13 24 30

2* 3* 5* 7* 14* 16* 19* 20* 22* 24* 27* 29* 33* 34* 38* 39*
2* 3* 5* 7* 8* 14* 16* 19* 20* 22* 24* 27* 29* 33* 34* 38* 39*
Example Tree (including 8*)

Delete 19* and 20* ...


Root
Root 17
17

5 13 24 30
5 13 27 30

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

• Deleting 19* is easy.


• Deleting 20* is done with re-
distribution. Notice how middle key is
copied up.
... And Then
Deleting 24*
• Must merge.
30
• Observe `toss’ of
index entry (on
right), and `pull 22* 27* 29* 33* 34* 38* 39*

down’ of index
entry (below).

Root
5 13 17 30

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


Example of Non-leaf Re-
distribution
• Tree is shown below during deletion of
24*. (What could be a possible initial
tree?)
• In contrast to previous example, can re-
distribute entry from left child of root
to right child.
Root

22

5 13 17 20 30

2* 3* 5* 7* 8* 14* 16* 17* 18* 20* 21* 22* 27* 29* 33* 34* 38* 39*
After Re-distribution
• Intuitively, entries are re-distributed by
`pushing through’ the splitting entry in
the parent node.
• It suffices to re-distribute index entry
with key 20; we’ve re-distributed 17 as
Root
well for illustration.
17

5 13 20 22 30

2* 3* 5* 7* 8* 14* 16* 17* 18* 20* 21* 22* 27* 29* 33* 34* 38* 39*
Prefix Key Compression
• Important to increase fan-out. (Why?)
• Key values in index entries only `direct traffic’; can
often compress them.
– E.g., If we have adjacent index entries with search
key values Dannon Yogurt, David Smith and
Devarakonda Murthy, we can abbreviate David Smith to
Dav. (The other keys can be compressed too ...)
• Is this correct? Not quite! What if there is a data entry
Davey Jones? (Can only compress David Smith to Davi)
• In general, while compressing, must leave each index entry
greater than every key value (in any subtree) to its left.
• Insert/delete must be suitably modified.
Bulk Loading of a B+ Tree
• If we have a large collection of records,
and we want to create a B+ tree on some
field, doing so by repeatedly inserting
records is very slow.
– Also leads to minimal leaf utilization
--- why?
• Bulk Loading can be done much more
efficiently.
Root
• Initialization: Sort allof data
Sorted pages data entries,
entries; not yet in B+ tree

insert pointer to first (leaf) page in a


new (root) page.
3* 4* 6* 9* 10* 11* 12* 13* 20* 22* 23* 31* 35* 36* 38* 41* 44*
Bulk Loading (Contd.)
Root 10 20

• Index entries for


leaf pages always Data entry pages
6 12 23 35
entered into not yet in B+ tree
right-most index
page just above
leaf level. When 3* 4* 6* 9* 10* 11* 12* 13* 20*22* 23* 31* 35* 36* 38*41* 44*

this fills up, it


splits. (Split
may go up right- Root 20
most path to the
root.)
10 35 Data entry pages
• Much faster than not yet in B+ tree
repeated inserts,
especially when 6 12 23 38

one considers
locking!
3* 4* 6* 9* 10* 11* 12* 13* 20*22* 23* 31* 35* 36* 38*41* 44*
Summary of Bulk Loading

• Option 1: multiple inserts.


– Slow.
– Does not give sequential storage of
leaves.
• Option 2: Bulk Loading
– Has advantages for concurrency control.
– Fewer I/Os during build.
– Leaves will be stored sequentially (and
linked, of course).
– Can control “fill factor” on pages.
A Note on `Order’
• Order (d) concept replaced by physical space
criterion in practice (`at least half-full’).
– 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)).
• Many real systems are even sloppier than this ---
only reclaim space when a page is completely empty.
Summary
• Tree-structured indexes are ideal for range-
searches, also good for equality searches.
• ISAM is a static structure.
– Only leaf pages modified; overflow pages needed.
– Overflow chains can degrade performance unless
size of data set and data distribution stay
constant.
• B+ tree is a dynamic structure.
– Inserts/deletes leave tree height-balanced; log F
N cost.
– High fanout (F) means depth rarely more than 3 or
4.
– Almost always better than maintaining a sorted
file.
Summary (Contd.)
– Typically, 67% occupancy on average.
– Usually preferable to ISAM, modulo locking
considerations; adjusts to growth gracefully.
– If data entries are data records, splits can
change rids!
• Key compression increases fanout, reduces height.
• Bulk loading can be much faster than repeated
inserts for creating a B+ tree on a large data set.
• Most widely used index in database management
systems because of its versatility. One of the
most optimized components of a DBMS.
Administrivia - Exam
Schedule Change

• Exam 1 will be held in class on Tues


2/21 (not on the previous thurs as
originally scheduled).

• Exam 2 will remain as scheduled Thurs


3/23 (unless you want to do it over
spring break!!!).

You might also like