Lecture 9: File Organization and Indexing

advertisement
CSCI-GA.2433-001
Database Systems
Lecture 9: File Organization and Indexing
Mohamed Zahran (aka Z)
mzahran@cs.nyu.edu
http://www.mzahran.com
Organizes data carefully to support
fast access to desired subsets of records.
Query Optimization
and Execution
DBMS
Layers
Relational Operators
Files and Access Methods
Buffer Management
Disk Space Management
DB
File organization: is a method of arranging
the records in a file when the file is stored on disk.
A relation is typically stored as a file of records.
Tuples/Records
Query Optimization
and Execution
Relational Operators
Files and Access Methods
Buffer Management
Disk Space Management
DB
Relations
Files
Pages
Blocks
Sectors
• Stores records in a file in a collection of disk pages
• Keeps track of pages allocated to each file.
• Tracks available space within pages allocated to the file.
Do you think it is a good idea to sort
the records stored in a file? Why?
Example:
Suppose we have a relation with fields: name, age, and salary.
How will do we sort it?
Index
What is an index?
Records
Index
• It is:
– a data structure
– a pointer (called data entry in the textbook) to a
data record
– organized based on search key
• Three alternatives to indices and data record
interaction
– Put the data record with the index
– Store a record ID in the index to point to the data
record
– Store a list of record IDs of data record with the
same search key value
Special Case: Clustered Indexes
Definition:
The ordering of data records is the same as,
or close to, the ordering of some index.
Why is it important?
Reduces the cost of using an index to answer
a range of search queries.
But:
Too expensive to maintain when the data
is updated.
If data records cannot be kept sorted,
how can we speed-up the search?
Very Un-special case: Heap File!
• The simplest file structure
• It is an unordered file
• Records are stored in a random order
across the pages of the file
Hash-Based Indexing
• Use a hash function h(r) where r is a field
value
• The output of h(r) points to a bucket.
• Bucket = primary page plus zero or more
overflow pages
• The buckets contain <key, rid> or <key, ridlist> pairs.
• Hash-based indexes are best for equality
selections cannot support range searches
Hash-Based Indexing
Hash- based indexes
Index points to data records
Tree-Based Indexing
Example: Find all data entries with 24<age<50
Number of disk I/Os = the length of a path from the root to a leaf
+ the number of leaf pages with qualifying data entries
Example to Show Cost!
• Assume our search key is <age,sal>
• Assume 5 configurations:
–
–
–
–
–
heap file
File sorted on <age,sal>
clustered B+ tree file sorted on <age,sal>
heap file with unclustered B+ tree index on <age,sal>
heap file with an unclustered hash index on <age,sal>
–
–
–
–
–
Scan (fetch all records in a file)
Search with equality selection
Search with range selection
Insert a record
Delete a record
• The operations we consider are:
Example to Show Cost!
• Cost model:
– B: number of data pages
– R: number of records per page
– D: average time to read or write a disk
page (typical 15 msec)
– C: average time to process a record (typical
100 nanosec)
– H: time to apply the hash function (if we
use hashing) (typical 100 nanonsec)
– F: fanout of a tree (if we use a tree)
Example to Show Cost!
(1) Heap
(a) Scan
(b) Equality
(c ) Range
(d) Insert
(e) Delete
BD
0.5BD
BD
2D
Search
+D
Search
+BD
Search
+D
Search
+ 2D
Dlog 2 B +
# matches
1.5BD
(3) Clustered
Dlog F 1.5B Dlog F 1.5B
+ # matches
(4) Unclustered BD(R+0.15) D(1 +
Dlog F
Tree index
log F
0.15B
0.15B)
+ # matches
(5) Unclustered BD(R+0.1 2D
BD
Hash index
25)
(2) Sorted
BD
Dlog 2B
Search
+ BD
Search
+D
D(3 +
log F
0.15B)
4D
Search
+ 2D
The Table above shows and average of the I/O cost only.
Before Choosing Your Index:
Know Your Workload
• For each query in the workload:
–
–
–
Which relations does it access?
Which attributes are retrieved?
Which attributes are involved in selection/join
conditions? How selective are these conditions
likely to be?
• For each update in the workload:
–
–
Which attributes are involved in selection/join
conditions? How selective are these conditions
likely to be?
The type of update (INSERT/DELETE/UPDATE), and
the attributes that are affected.
Index Choice
• What indexes should we create?
–
Which relations should have indexes? What
field(s) should be the search key? Should we
build several indexes?
• For each index, what kind of an index
should it be?
–
–
–
–
Clustered? Hash/tree?
Hash-based are optimized for equality
Tree-based supports equality and range
Sorted file is pretty expensive to maintain
Index Choice
• One approach:
– Consider the most important queries in turn.
– Consider the best plan using the current indexes
– see if a better plan is possible with an additional
index.
– If so, create it.
• Before creating an index, must also consider
the impact on updates in the workload!
– Trade-off: Indexes can make queries go faster,
updates slower. Require disk space, too.
Guidelines
• Attributes in WHERE clause are candidates for index
keys.
– Exact match condition suggests hash index.
– Range query suggests tree index.
• Clustering is especially useful for range queries; can also help on
equality queries if there are many duplicates.
• Multi-attribute search keys should be considered
when a WHERE clause contains several conditions.
–
Order of attributes is important for range queries.
• Try to choose indexes that benefit as many queries
as possible. Since only one index can be clustered per
relation, choose it based on important queries that
would benefit the most from clustering.
Examples
SELECT E.dno
FROM Emp E
WHERE E.age>40
• Clustered
• B+ tree index on E.age can be used to
get qualifying tuples.
Examples
SELECT E.dno, COUNT (*)
FROM Emp E
WHERE E.age>10
GROUP BY E.dno
•
•
If many tuples have E.age > 10, using
E.age index and sorting the retrieved
tuples may be costly.
Clustered E.dno index may be better!
Examples
• To retrieve Emp records with
age=30 AND sal=4000, an index
on <age,sal> would be better
than an index on age or an index
on sal.
• If condition is: 20<age<30 AND
3000<sal<5000:
–
Clustered tree index on <age,sal>
or <sal,age> is best.
• If condition is: age=30
3000<sal<5000:
–
AND
Clustered <age,sal> index much
better than <sal,age> index!
• Composite indexes are larger,
updated more often.
Examples of composite key indexes
11,80
11
12,10
12
12,20
13,75
<age, sal>
10,12
20,12
75,13
name age sal
bob 12
10
cal 11
80
joe 12
20
sue 13
75
12
13
<age>
10
Data records
sorted by name
80,11
<sal, age>
Data entries in index
sorted by <sal,age>
20
75
80
<sal>
Data entries
sorted by <sal>
A Closer look Into Pages
Tuples/Records
• How pages store records?
• How pages are organized into Relations
file?
Files
• A file can span several pages.
Pages
Blocks
Sectors
Pages and Heap Files
• Every record has a unique rid
• Every page in the file has the same size.
• Supported operations include:
–
–
–
–
create and destroy files
insert/delete a record with given rid
get a record with given rid
scan all records in the file
• Given the id or the record, we must be
able to find the id of the page containing
the record
Pages and Heap Files
• We must keep track of the pages in
each heap file to support scans.
• We must keep track of pages with
empty spaces to support efficient
insertions.
How to maintain this info?
Linked List of Pages
Data
Page
Data
Page
Data
Page
Full Pages
Header
Page
Data
Page
Data
Page
Data
Page
Pages with
Free Space
• Doubly linked list of pages
• DBMS remembers where is the first page
(called header page) located
• Each pointer is really a page id
• If new page is required, a request is made to
the disk space manager.
Linked List of Pages
Data
Page
Data
Page
Data
Page
Full Pages
Header
Page
Data
Page
Data
Page
Data
Page
Pages with
Free Space
• Disadvantage: If records are of variable
length:
– virtually all pages will be on the free list!
– Inserting a record may require retrieving
and examining several pages
Directory of Pages
Data
Page 1
Header
Page
Data
Page 2
DIRECTORY
Data
Page N
• DBMS must remember where the first
directory page of each heap file is located.
• The Directory itself is a collection of
pages.
• Each directory entry identify a page or
sequence of pages.
Directory of Pages
Data
Page 1
Header
Page
Data
Page 2
DIRECTORY
Data
Page N
• Size of the directory is likely to be very
small in comparison to the size of the heap
file.
• Each directory entry can indicate whether
the corresponding page has free entry or
the size of free space.
Page Format
• Page abstraction is useful for I/O issues.
• Higher levels of DBMS see data as
collection of records.
• How can a collection of records be
arranged on a page?
–
–
–
–
Think of it as: group of slots
Each slot contains a record
Record identified by: < page ID, slot #>  rid
Other approaches are also possible
Page Format:
Fixed Length Records
• Record slots are uniform and can be
arranged consecutively within a page.
• At any instant: some slots are occupied
by records and some are not.
• How do we keep track of empty slots
and how do we locate all records on a
page?
Page Format:
Fixed Length Records
• Alternative 1:
– Store records in the first N slots
– Whenever a record is deleted move the last
record on the page into the vacated slot.
– Advantage: Can locate the ith record on the
page with simple offset calculation.
– Advantage: All empty slots appear at the end
of the page.
– Disadvantage: Does not work if there are
external references to the record that moved.
Page Format:
Fixed Length Records
• Alternative 2:
– Handle deletion using array of bit
– One bit per slot to keep track of free slots
– When a page is deleted, its bit is turned
off (i.e. 0).
– Locating records on the page requires
scanning the bit array to locate slots whose
bit is on.
Page Format:
Fixed Length Records
Slot 1
Slot 2
Slot 1
Slot 2
Free
Space
...
Slot N
...
Slot N
Slot M
N
PACKED
1 . . . 0 1 1M
number
of records
M ... 3 2 1
UNPACKED, BITMAP
number
of slots
Page Format:
Variable Length Records
• Cannot divide the page into fixed-length
slots
• Challenge: When a new record is to be
inserted, we have to find an empty slot
of just the right length.
• Challenge: We must ensure that the
free space on the page is contiguous.
• So  The ability to move records on a
page becomes very important
Page Format:
Variable Length Records
• Directory of slots
• <record offset, record length> per slot
• record offset: offset in bytes from the
start of the data area to the start of
the record
• Deletion: setting record offset to -1
• rid <page id, slot id> does not change
when a record moves.
Page Format:
Variable Length Records
• Maintain a pointer to the start of the free
space area
• When a new record does not fit into the
remaining free space  move records in
the page to reclaim space deleted earlier.
• Cannot always remove a slot of a deleted
record (or the rid of the other slots will
change).
• When a new record is inserted, the
directory is scanned for an element not
pointing to a record.
Page Format:
Variable Length Records
Rid = (i,N)
Page i
Rid = (i,2)
Rid = (i,1)
20
N
...
16
2
SLOT DIRECTORY
24
N
1 # slots
Pointer
to start
of free
space
Page Format
• Beside slots information, a page usually
contains file-level information (e.g. id of
the next page, etc).
• The slotted page organization used for
variable length records can also be used
for fixed-length records
What about Records?
• How to organize fields within a record?
• Issues we have to take into account:
– Fields of the record are of fixed or
variable length
– cost of various operations on the records
• Information common to all records (e.g.
number of fields, types, …) are stored in
the system catalog
Fixed-Length Records
F1
L1
Base address (B)
F2
F3
F4
L2
L3
L4
Address = B+L1+L2
• Each field has a fixed length
• Number of fields is also fixed
• Fields can be stored consecutively
Variable-Length Records
• Alternative 1:
– Store fields consecutively
– Separate fields by delimiters
– Disadvantage: requires the scan of the whole
record to reach a field
• Alternative 2:
– Reserve space at the beginning of the record
for use as an array of integer offsets
– The ith entry is the starting address of the ith
field relative to the start of the record.
Variable-Length Records
4
Field
Count
$
$
$
$
Fields Delimited by Special Symbols
F1
F2
Array of Field Offsets
F3
F4
Issues in Variable Length
Records
• Modifying a field may cause it to grow  need
to shift subsequent fields to make room.
• A modified record may no longer fit in the
available space on its page
– May need to move to another page
– rid will change  causing problems
– We must leave a forwarding address in the old
place
• A record may grow so large that it cannot fit on
any page
– Break a record into smaller records
– Chain them together
OS does disk space & buffer mgmt:
why not let OS manage these tasks?
• Differences in OS support: portability
issues
• Some limitations, e.g., files can’t span
disks.
• Buffer management in DBMS requires
ability to:
– pin a page in buffer pool, force a page to disk
(important for implementing CC & recovery),
• adjust replacement policy, and pre-fetch
pages based on access patterns in typical
DB operations
Conclusions
• Many alternative file organizations exist,
each appropriate in some situation.
• If selection queries are frequent, sorting
the file or building an index is important.
• Indexes support efficient retrieval of
records based on the values in some fields.
• Understanding the nature of the workload
for the application, and the performance
goals, is essential to developing a good
design.
Download