Download as pdf or txt
Download as pdf or txt
You are on page 1of 47

Quản trị dữ liệu

Chương 2.2: Chỉ mục và băm


Mục tiêu

Nhằm giới thiệu 2 kỹ thuật rất phổ biến được sử dụng


để tăng hiệu suất truy cập dữ liệu trong các Hệ quản trị
CSDL là chỉ mục (index) và băm (hash)

8/29/20 63
Nội dung

Chỉ mục
n Chỉ mục được sắp
n Chỉ mục B+-cây
Băm
n Băm tĩnh
n Băm động
Tạo chỉ mục trong SQL

8/29/20 64
Chỉ mục (indexing)

Chỉ mục (indexing) và là 1 kỹ thuật phổ biến để tăng


tốc độ tìm kiếm và truy cập thông tin
Tuy nhiên, cái giá phải trả là sự phức tạp của các cấu
trúc dữ liệu đi kèm
Một số thuật ngữ có liên quan:
n Khóa tìm kiếm (search key): là một hoặc nhiều trường
được sử dụng để tìm kiếm các mẫu tin trong 1 tập tin
n Tập tin chỉ mục (index file): là tập tin chứa các khóa
tìm kiếm và vị trí của mẫu tin có khóa tìm kiếm trong
tập tin dữ liệu, thường có kích thước nhỏ

8/29/20 65
Chỉ mục được sắp (Ordered index)

Là chỉ mục lưu trữ các giá trị khoá tìm kiếm trong thứ
tự được sắp và kết hợp từng khoá tìm kiếm với các
mẫu tin chứa khoá tìm kiếm này
Các mẫu tin trong file dữ liệu được chỉ mục có thể
chính chúng cũng được sắp
n Nếu file dử liệu được sắp tuần tự theo khoá tìm kiếm,
chỉ mục theo khoá tìm kiếm này được gọi là chỉ mục sơ
cấp (hay chỉ mục cụm)
n Nếu file dữ liệu không được sắp theo khoá tìm kiếm,
chỉ mục theo khoá tìm kiếm này được gọi là chỉ mục
thứ cấp (hay chỉ mục không cụm)

8/29/20 66
Chỉ mục sơ cấp (Primary index)

Chỉ mục đặc (dense index): có mẩu tin chỉ mục cho
mỗi khóa tìm kiếm
Brighton A-217 750
Downtown A-101 500
Brighton Downtown A-110 600
Downtown Mianus A-215 700
Mianus Perryridge A-102 400
Perryridge Perryridge A-201 900
Redwood Perryridge A-218 700
Round Hill Redwood A-222 700
Round Hill A-305 350 •

8/29/20 67
Chỉ mục sơ cấp (Primary index)

Chỉ mục thưa (sparse index): chỉ có mẩu tin chỉ mục
cho một số khóa tìm kiếm
Brighton A-217 750
Downtown A-101 500
Brighton
Downtown A-110 600
Mianus Mianus A-215 700
Redwood Perryridge A-102 400
Perryridge A-201 900
Perryridge A-218 700
Redwood A-222 700
Round Hill A-305 350 •

8/29/20 68
Chỉ mục thứ cấp (Secondary index)

Brighton A-217 750


Downtown A-101 500
350
Downtown A-110 600
400 Mianus A-215 700
500 Perryridge A-102 400
600 Perryridge A-201 900
700 Perryridge A-218 700
750 Redwood A-222 700
900 Round Hill A-305 350 •

8/29/20 69
Chỉ mục nhiều cấp (Multilevel index)

Sử dụng trong trường hợp tập tin chỉ mục quá lớn
=> xem tập tin chỉ mục như là tập tin dữ liệu và lập
chỉ mục cho tập tin chỉ mục này.

8/29/20 70
File chỉ mục B+-cây

Một trong các nhược điểm của file chỉ mục tuần tự:
hiệu năng giảm khi file lớn lên.

Để khắc phục nhược điểm này, cần phải tổ chức lại


cách thức lưu trữ chỉ mục

B+-cây là một cấu trúc tổ chức chỉ mục được sử dụng


rộng rãi vì nó đảm bảo được tính hiệu quả bất chấp
các hành động xen xoá.

8/29/20 71
File chỉ mục B+-cây

Một nút của B+-cây chứa n-1 giá trị khoá tìm kiếm:
K1, K2, ..., Kn-1 và n con trỏ P1, P2, ..., Pn
Trong một nút, các giá trị khoá được sắp theo thứ tự:
"i < j => Ki < Kj

P1 K1 P2 K2 ....... Pn-1 Kn-1 Pn

n Ki: giá trị khóa tìm kiếm


n Pi: con trỏ đến các nút con hay các mẩu tin trong CSDL

8/29/20 72
File chỉ mục B+-cây

8/29/20 73
File chỉ mục B+-cây

Chỉ mục B+ cây là một dạng cây cân bằng - mọi


đường dẫn từ nút gốc đến nút lá đều có cùng độ dài

Mỗi nút không là lá có số con (pointer) nằm trong


khoảng ém/2ù .. m, m là một số cố định được gọi là
bậc của cây

Mỗi nút lá có số giá trị (key) nằm trong khoảng


é(m-1)/2ù .. m-1

Không có giá trị nào xuất hiện hai lần trong tất cả
các nút lá

8/29/20 74
File chỉ mục B+-cây (m=3)

At least half-full
Sau đây là một ví dụ về B+ cây:
n m=3
n Thứ tự chèn đúng như thứ tự các mẫu tin trong file dữ
liệu

… … …
8/29/20 75
File chỉ mục B+-cây - Xen

1. Tìm nút lá “thích hợp” để đưa khóa mới vào


2. Chèn khóa vào nút lá tìm được:
(a) Trường hợp đơn giản nhất:
w Còn không gian ở nút lá để thêm khóa mới vào
(b) Nút lá bị “tràn”
(c) Nút trung gian (không là lá) bị tràn
(d) Gốc mới

8/29/20 76
(a) Xen khóa 32 n=4

100
30
11

30
31
32
3
5

8/29/20 77
(b) Xen khóa = 7 n=4

100
30
7
57
11

30
31
3
5

8/29/20 78
8/29/20
100
(c) Xen khóa 160

160
150
156 120
179 150
180

160
179
180

180
n=4

200
79
(d) Gốc mới, xen khóa 45 n=4

new root

30
10
20
30

40
10
12

20
25

30
32
40

40
45
1
2
3

8/29/20 80
N=3

Giả sử bây giờ ta chèn thêm record:


Clearview, A-777, 1000
vào trong CSDL

8/29/20 81
8/29/20 82
File chỉ mục B+ cây Bài tập

Dựng một B+-cây bậc 4 đối với tập các giá trị khoá:
(2, 3, 5, 7, 11, 15, 19, 25, 29, 33, 37, 41, 47).
Xóa khóa 19, 25.

Bài giải

8/29/20 83
File chỉ mục B+-cây - Xóa

1. Tìm nút lá chứa khóa cần xóa


2. Xóa khóa trong nút lá tìm được:
(a) Trường hợp đơn giản, cây vẫn đúng cấu trúc.
(b) Nút lá sau khi xóa khóa trống hơn nửa nút à gộp lại
với nút kề (sibling)
(c) Phân phối lại khóa.
(d) Trường hợp b) và c) xảy ra đối với nút trung gian hay
nút gốc.

8/29/20 84
(a) Cây không thay đổi cấu trúc: Xóa khóa 5 n=5

100
30
11

30
31
32
3
5

8/29/20 85
(b) Gộp nút lá: Delete 50
n=5

100
10
40
40
10
20
30

40
50

8/29/20 86
(c) Phân phối lại khóa: Delete 50
n=5

40 35
100
10

35
10
20
30
35

40
50

8/29/20 87
(d) Gộp nút trung gian: Delete 37
n=5

25
new root

40
25
10
20

30
40
30

30
37
10
14

20
22

25
26

40
45
1
3

8/29/20 88
Xoá khóa:
Downtown ra khỏi B+-cây

8/29/20 89
8/29/20 90
Băm (Hashing)

Hạn chế của cơ chế tổ chức file tuần tự là:


n Phải truy cập cấu trúc chỉ mục để định vị dữ liệu
n Hoặc phải sử dụng tìm kiếm nhị phân
n Tốn nhiều thời gian cho các thao tác I/O
Kỹ thuật băm giúp chúng ta bỏ qua các thao tác truy
xuất cấu trúc chỉ mục
Có 2 loại băm:
n Băm tĩnh (static hashing)
n Băm động (dynamic hashing)

8/29/20 92
Băm tĩnh

Trong kỹ thuật băm, người ta cho đầu vào là một


khoá tìm kiếm, hàm băm trên khoá này sẽ cho ra giá
trị là vị trí của khối đĩa chứa mẫu tin
Nếu gọi
K: tập tất cả các giá trị tìm kiếm
B: Tập tất cả các địa chỉ bucket
h: hàm băm
thì
h: K ® B

8/29/20 93
Băm tĩnh - Các thao tác xen, tìm, xoá

Xen một mẫu tin với giá trị khoá tìm kiếm K:
1. Tính h(K)
2. h(K) là địa chỉ của bucket chứa mẫu tin
3. Nếu có không gian trong bucket cho mẫu tin Þ chèn mẫu
tin vào.
Ngược lại: điều khiển tràn bucket
Tìm kiếm mẫu tin có giá trị khoá K: Tính h(K) Þ tìm được
bucket tương ứng Þ tìm trong bucket này mẫu tin có giá trị
khoá K
Xoá mẫu tin có giá trị khoá K: Tính h(K) Þ tìm được bucket
tương ứng Þ tìm trong bucket này mẫu tin có giá trị khoá K và
xoá nó

8/29/20 94
Băm tĩnh - Điều khiển tràn bucket

Nguyên nhân tràn bucket:


n Không đủ các bucket
n Sự lệch

Khắc phục:
n Băm mở: Sử dụng bucket tràn
n Băm đóng: Băm lại
Dãy các hàm băm thường được sử dụng là:
{ hi(K) = (hi-1(K) + 1) mod nB }

8/29/20 95
h(Account)=(tổng các chữ số trong tài khoản) mod 7

8/29/20 96
Bucket tràn

Ví dụ thêm vào mẫu tin có


khoá tìm kiếm A-200

8/29/20 97
Ví dụ về xoá trong bảng băm

Xóa: 0
a
e 1
b d
f c d
c 2
e
3 f Có thể chuyển
g “g” lên

8/29/20 98
Băm động

Chúng ta đối phó như thế nào khi file dữ liệu phình to
quá khả năng quản lý của bảng băm?

Nếu tràn Þ Nới rộng, chọn hàm băm mới và


tổ chức lại bảng băm Þ Tốn chi phí
Dùng cơ chế băm động

Bảng băm tự nới rộng nhưng hàm băm


không đổi
Kích thước của giá trị băm tăng tuyến
tính theo sự lớn lên của dữ liệu

8/29/20 99
Băm động - Ý tưởng

Chỉ sử dụng i bits trong tổng số b bits chiều dài của kết
quả hàm băm h
b
h(K) ®
00110101
sử dụng i ® tăng theo kích thước của file dữ liệu….

8/29/20 100
Băm động - Ví dụ

Brighton A-217 750


Downtown A-101 500
Downtown A-110 600
Mianus A-215 700
Perryridge A-102 400
Perryridge A-201 900
Perryridge A-218 700
Redwood A-222 700
Round Hill A-305 350
File dữ liệu account
8/29/20 101
Băm động - Ví dụ

Branch-name h(Branch-name)
Brighton 0010 ....
Downtown 1010 ....
Mianus 1100 ....
Perryridge 1111 ....
Redwood 0011 ....
Round Hill 1101 ....

Dùng hàm băm cho khoá Branch-name

8/29/20 102
Băm động - Chèn
Số bit đang sử dụng để
có thể xác định bucket
Hash prefix

Đầu vào
bảng địa chỉ

Bảng địa chỉ


các bucket

Cấu trúc băm động - Khởi tạo

8/29/20 103
Cấu trúc băm động sau 3 hành động xen

8/29/20 104
Cấu trúc băm động sau 4 hành động xen
8/29/20 105
Cấu trúc băm động sau 7 hành động xen
8/29/20 106
Cấu trúc băm động cho file account
8/29/20 107
Băm động - Xoá

Có 2 phương pháp xử lý khi xuất hiện khối trống:


n Không merge các khối trống lại
n Merge các khối trống lại và rút ngắn chiều dài bảng
băm nếu có thể (làm ngược thủ tục chèn)

8/29/20 108
Questions?

8/29/20 109

You might also like