Tải bản đầy đủ (.docx) (27 trang)

Tìm Hiểu BTree, Ứng Dụng và Cài Đặt

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (437.85 KB, 27 trang )

B-Tree
Mục Lục:
I. Mở đầu
Thế giới ngày càng phát triển với sự ứng dụng mạnh mẽ công nghệ thông
tin(CNTT) vào mọi mặt đời sống. Từ chăm sóc sức khỏe con người, mua
sắm, tra cứu thông tin, cho đến các lĩnh vực kinh doanh, sản xuất, … .
Cũng vì thế mà các ứng dụng CNTT thu thập được một lượng lớn dữ liệu,
nhưng dữ liệu về thông tin người dùng, những dữ liệu về những đối tượng
khác như là: thời tiết, chứng khoán, giao thông, … . Những dữ liệu đó được
gọi với thuật ngữ “dữ liệu lớn”, hay là “Big Data”.
Con người luôn muốn mọi thứ “thông minh hơn”, nên những nguồn
dữ liệu như vậy rất quý giá, nó sẽ được phân tích và “khai thác”. Nhưng nó
quá lớn, vậy nên trước khi tính đến lợi ích từ việc “khai thác”, nó phải được
tổ chức, lưu trữ làm sao để có thể khai thác một cách nhanh nhất, dễ dàng
nhất nhưng phải đảm bảo phù hợp với nguồn tài nguyên của các thiết bị
xử lý hiện nay, điển hình là máy tính.
Có nhiều cách để tổ chức lưu trữ 1 lượng dữ liệu lớn, đơn giản và phổ
biến như là: Hash, Heap, Index và B-Tree. Và B-Tree là cấu trúc được lựa
chọn để trình bày trong đồ án này.

B-Tree
II. Mô tả bài toán
1. Giới thiệu B-Tree
1.1. Các dạng cây thông thường
Trước khi đi vào B-Tree cần phải biết cấu trúc của một số loại cây đơn giản
khác trước.
Cây
• Cây là một tập hợp T các phần tử (gọi là nút (node) của cây) trong
đó có 1 nút đặc biệt được gọi là gốc, các nút còn lại được chia thành
những tập rời nhau T
1


, T
2
, , T
n
theo quan hệ phân cấp trong đó T
i

cũng là một cây.
• Cấu trúc cây không chứa chu trình.
• Khái niệm một số thành phần của cây:
o Bậc của một nút: Là số cây con của nút đó.
o Bậc của một cây: Là bậc lớn nhất của các nút trong cây. Cây
có bậc n thì gọi là n-phân. Ví dụ: Nhị phân, tam phân… .
o Nút gốc (Root Node): Là nút không có nút cha.
o Nút lá (Leaf Node): Là nút có bậc bằng 0
o Nút nhánh: Là nút có bậc khác 0 và không phải nút gốc
o Mức của một nút: Nút gốc có mức =0, các nút có nút được
tăng lên 1.

B-Tree
Hình 1.1 Một cây đơn giản tam phân
Hình 1.2 Một đồ thì không phải là cây vì chứa chu trình
Cây nhị phân
Là cây mà bậc của mỗi nút tối đa là 2, tức là có tối đa 2 cây con.
Hình 1.3: Một cây nhị phân
Cây nhị phân tìm kiếm

B-Tree
• Cây nhị phân tìm kiếm (CNPTK) là cây mà tại mỗi nút, giá trị của nút
đó luôn lớn hơn (hoặc bằng) giá trị của nút con bên trái và nhỏ hơn

(hoặc bằng) giá trị nút con bên phải.
• Nhờ cấu trúc như vậy nên tìm kiếm trên cây có đinh hướng, và
phương pháp tìm kiếm nhị phân thường được áp dùng nhất.
• Nếu số nút trên cây là N thì chi phí tìm kiếm trung bình chỉ khoảng
log
2
N, xấu nhất n.
Hình 1.4: Một cây tìm kiếm nhị phân.
Cây AVL
• Là cây nhị phân tìm kiếm, nhưng tại một nút có thêm một hệ số cân
bằng(HSCB), đại diện cho sự chênh lệch chiều cao giữa nhánh trái
và phải, và sự chênh lệch này không quá 1.
• Độ phức tạp tìm kiếm là: O(log
2
n).
A B
Hình 1.5:
A: cây nhị phân tìm kiếm, nhưng không phải cây AVL do có một node
HSCB>2
B : Cây AVL, tất cả các node đều có HSCB từ -1 đến 1

B-Tree
Cây tìm kiếm M-Phân
• Ở mỗi nút có tối đa M nút con.
• Mỗi nút có M-1 Khóa. Vậy nên M càng lớn thì chiều cao cây càng
thấp.
Hình 1.6: Cây M-Phân.
1.2. Định nghĩa B-Tree
Cấu trúc cây là một trong những cấu trúc tốt nhất dùng để biểu diễn đồ thị
và lưu trữ dữ liệu. Vì nó đáp ứng được nhiều yêu cầu khó mà nhiều cấu

trúc khác khác không đáp ứng được như:
• Lưu trữ số phần tử rất lớn
• Lưu trữ trên bộ nhớ ngoài
• Tìm kiếm nhanh
Cấu trúc cây mà ở đây là B-Tree đáp ứng được các yêu cầu đó:
• B-Tree được giới thiệu bởi R. Bayer và E. McGreight vào năm 1972.
Tên B-Tree cũng được lấy theo tên của họ.
• Được phát triển từ ý tưởng của cây 2-3 (2-3 Tree), mỗi nút có nhiều
hơn 1 khóa, và kết hợp với cây tìm kiếm.
• B-Tree là một cây tìm kiếm M-Phân, nên có chiều cao thấp, dữ liệu
được gom thành những block nên giảm số lần truy xuất.
Một cây được gọi là B-Tree bậc m (m>2) thì đó phải đáp ứng được những
điều kiện:
• Nút gốc (nếu không phải nút lá) thì có từ 2 tới tối đa m cây con.

B-Tree
• Ở mỗi nút, ngoại trừ nút gốc và nút lá, thì có từ m/2 đến tối đa m
cây con. Và có từ (m/2)-1 tới tối đa m-1 khóa.
• Cây đã cân bằng, mọi nút là đều nằm cùng một mức.
• Các khóa và cây con được sắp xếp theo cây tìm kiếm.
Ví dụ: B-Tree bậc 4 và không phải B-Tree bậc 4 ở hình 1.7 và hình 1.8.
Hình 1.7: B-Tree bậc 4.
Hình 1.8: Không phải là B-Tree bậc 4 do cây con thứ 3 của nút gốc cho
có 1 con, trong khi mỗi nút của B-Tree bậc 4 có ít nhất là 2 con.
2. Các thao tác và cài đặt B-Tree
2.1. Tìm kiếm một khóa trong B-Tree
Do các khóa các nút trong B-Tree được sắp xếp theo tìm kiếm nhị phân.
Nên sử dụng tìm kiếm nhị phân trong B-Tree.
Ví dụ minh họa:


B-Tree
Hình 2.1: B-Tree ban đầu
Tìm khóa 45:
Hình 2.2: Bắt đầu từ nút gốc.
Hình 2.3: Do 42<45, nên đi tiếp tới cây con thứ 2.
Hình 2.4: 45<59 nên sẽ duyệt tiếp xuống cây con thứ nhất

B-Tree
Hình 2.5: 45<50 nên duyệt xuống cây con thứ nhất, và đây cũng là vị
trí khóa cần tìm.
2.2. Thêm khóa vào B-Tree
Để xây dựng một B-Tree thì phải thêm từng khóa một vào cây.
Ý tưởng: Tìm vị trí khóa có thể thêm vào cây. Việc tìm kiếm sẽ kết thúc
tại một lá. Khóa mới sẽ được thêm vào nút lá:
• Nếu chưa đầy: việc thêm vào hoàn tất.
• Nếu đầy: Phân đôi nút lá cần thêm:
o Tách nút lá ra làm hai nút cạnh nhau trong cùng một mức.
o Chuyển phần tử giữa lên nút cha.
o Quá trình phân đôi các nút có thể được lan truyền ngược về
gốc và kết thúc khi có một nút cha nào đó cần được thêm một
khóa gởi từ dưới lên mà chưa đầy.
Ví dụ bằng hình ảnh: Thêm một khóa có giá trị =38 vào một B-Tree bậc
3:
Hình 2.6: B-Tree ban đầu.

B-Tree
Hình 2.7: Bắt đầu ở nút gốc.
Hình 2.8: Do 17<38<42 nên duyệt vào cây con thứ 2.
Hình 2.9: 36<38 nên duyệt vào cây con thứ 3, đây cũng là nút lá.
Hình 2.10: Thêm khóa vào nút ở lá. Và số khóa trong nút vượt quá giới

hạn
(B-Tree bậc 3 nên số khóa giới hạn là 2)
Hình 2.11: Tách ra làm 2 nút, đưa khóa ở giữa lên nút cha

B-Tree
Hình 2.12: Số khóa ở nút cha mới được thêm vào cũng vượt quá giới hạn
Hình 2.13: Tách ra làm 2 nút và đưa khóa ở giữa lên nút cha. Và số khóa
ở nút cha (nút gốc) cũng vượt quá giới hạn.
Hình 2.14: Nên sẽ lấy khóa ở giữa đưa lên làm nút gốc mới. Và cây hoàn
tất thêm khóa 38.
2.3. Xóa một khóa khỏi B-Tree
• Nếu khóa này thuộc nút lá, đơn giản xóa khóa này khỏi nút lá đó.
• Nếu khóa này thuộc một nút trong:
o Tìm khóa lớn nhất thuộc cây con trái (phải nhất) hoặc khóa
nhỏ nhất thuộc cây con phải (trái nhất) đưa lên thay thế cho
khóa cần xóa.
o Xóa khóa trái nhất hoặc phải nhất ở cây con tương ứng.
Việc xóa 1 khóa khỏi một nút có thể đòi hỏi phải cân bằng lại cây:
o Nếu một trong các nút anh em kế cận nút đang xét có số lượng khóa
nhiều hơn số lượng tối thiểu, đưa một khóa của nút anh em lên nút
cha và đưa một khóa ở nút cha xuống nút đang xét
o Nếu tất cả các nút anh em kế cận nút đang xét đều có số lượng
khóa vừa đủ số lượng tối thiểu, chọn một nút anh em kế cận và hợp

B-Tree
nhất nút anh em này với nút đang xét (và khóa tương ứng ở nút
cha). Nếu nút cha trở nên thiếu khóa, lặp lại quá trình này.
Ví dụ:
Hình 2.15: B-Tree bậc 3
• Xóa một khóa ở nút lá:

Hình 2.16: Xóa khóa 15 ở nút lá
Hình 2.17: B-Tree sau khi xóa một khóa ở nút lá
• Xóa một khóa ở nút trong:
Xóa khóa 18:
Hình 2.18: B-Tree ban đầu.

B-Tree
Hình 2.19: Tìm vị trí khóa 18.
Hình 2.20: Xóa khóa 18 sẽ làm số khóa của nút dưới mức tối thiểu,
nên đưa khóa 19 từ nút con lá lên.
Hình 2.21: B-Tree sau khi xóa khóa 18.
Xóa khóa 19:
Hình 2.22: Tìm vị trí khóa 19
Hình 2.23: Nếu xóa khóa 19 xẽ làm số khóa của nút dưới mức tối thiểu,
Nên đưa khóa 26 từ nút lá lên.

B-Tree
Hình 2.24: Xóa khóa 19, nút sẽ có 2 khóa và 2 con, không hợp lệ,
nên kéo một khóa xuống nút con.
2.4. Cài đặt



 !
""!#
$%&'()*
""!+,&'(*
-*
""!+"*
.+"%/01+.

""!+"%!2$%)""!+3#
""!+1!*
1!42""!+35%2672""!33*
1!8$%&(4$%*
1!84*
1!8,&(4"*
1!8,&(4*
""1!*

B-Tree
-
.+9%$%%::":"%:/+.
$%;%<!2$%):)""!+)
""!+3#
=48*
12=:3#
8$%&='(48$%&=(*
8,&='(48,&=(*
=88*
-
8$%&='(4$%*
8,&='(4*
8''*
-
.+:+.
$:!2$%)+:$%):)""!+)
""!+)""!++1!3#
5%)=*
72: !3
5%4 !'*


5%4 !*
+1!42""!+35%2672""!33*
=45%'*
12=43#
2+1!38$%&=85%(48$%&=(*
2+1!38,&=85%(48,&=(*

B-Tree
=''*
-
845%*
2+1!38485%*
72:4 !3#
%;%<!2$%):))3*
-#
%;%<!2$%):85%)+1!)3*
-
+:$%48$%&8(*
2+1!38,&(48,&8(*
888*
-
.+$%$%+.
;% !2$%)+:$%)
""!+)""!++3#
:*
72>3#
+:$%4$%*
+4!?@@*
""*

-
72$%8$%&(3#
:4*
-
#
7"2:48*2$%8$%&:(AA:3*:883*

B-Tree
72$%448$%&:(3# :%
:"B2CD:%%1EC3*
""*
-
-
72;% !2$%):$%)8,&:()33#
7283#
%;%<!2+:$%):))+3*
-#
:!2+:$%):$%):))+)3*
""*
-
-
""*
-
.+"$%F8<"+.
$"/2$%3#
G%0)*
""!+*
G%04;% !2$%)A)")A3*
72G%03
"4"%!2)3*

-
.+:H"7"$%+.
$:HI"2""!+5H!):3#
""!+55H*
55H45H!8,&:(*

B-Tree
7"2*55H8,&(>4!?@@*3
55H455H8,&(*
5H!8$%&:(455H8$%&(*
-
.+"5$$%7"50$%"%""%0$%+.
$"5$;%2""!+5H!):3#
4:'*
1245H!83#
5H!8$%&8(45H!8$%&(*
5H!8,&8(45H!8,&(*
''*
-
5H!888*
-
.+J$%7"5:%""0+.
$K0IJ2""!+5H!):3#
""!+L45H!8,&:(*
=4L8*
12=3#
L8$%&='(4L8$%&=(*
L8,&='(4L8,&=(*
-
L8$%&(45H!8$%&:(*

L8,&(4L8,&(*
L8''*
L45H!8,&:8(*

B-Tree
5H!8$%&:(4L8$%&L8(*
5H!8,&:(4L8,&L8(*
L888*
""*
-
.+J$%7"5:%"J+.
$@JIJ2""!+5H!):3#
=4*
""!+L45H!8,&:8(*
L8''*
L8$%&L8(45H!8$%&:(*
L8,&L8(45H!8,&:(8,&(*
L45H!8,&:(*
5H!8$%&:(4L8$%&(*
L8,&(4L8,&(*
L888*
12=4L83#
L8$%&=(4L8$%&='(*
L8,&=(4L8,&='(*
=''*
-
""*
-
.+5"0+.
$5"0!2""!+5H!):3#

=4*

B-Tree
""!+L45H!8,&:()+L45H!8,&:8(*
L8''*
L8$%&L8(45H!8$%&:(*
L8,&L8(45H!8,&(*
12=4L83#
L8''*
L8$%&L8(4L8$%&=(*
L8,&L8(4L8,&=(*
=''*
-
=4:*
12=5H!83#
5H!8$%&=(45H!8$%&='(*
5H!8,&=(45H!8,&='(*
=''*
-
5H!888*
7"2L3*
-
.+%=0$+.
$%=!2""!+5H!):3#
72>:3#
725H!8,&(8 !3#
@JIJ25H!)3*
-#
5"0!25H!)3*
-

-#
725H!8>4:3#

B-Tree
725H!8,&:8(8 !3#
K0IJ25H!):3*
-#
725H!8,&:'(8 !3#
@JIJ25H!):'3*
-#
5"0!25H!):3*
-
-
-#
725H!8,&:8(8 !3
K0IJ25H!):3*

5"0!25H!):3*
-
-
-
.+$%7"5+.
;%M"5!2$%)""!+5H!3#
:)G%04*
725H!3#
72$%5H!8$%&(3#
:4*
G%04*
-#
7"2:45H!8*

2$%5H!8$%&:(AA:3*:883*
72$%445H!8$%&:(3#
G%04*
-#
G%04*

B-Tree
-
-
72G%03#
725H!8,&:8(3#
:HI"25H!):3*
G%04;%M"5!25H!8$%&:()5H!8,&:(3*
72G%0443#
:"B2CN$%%:"F8<"EC3*
-
-#
"5$;%25H!):3*
-
-#
G%04;%M"5!2$%)5H!8,&:(3*
-
725H!8,&:(3#
725H!8,&:(8 !3
%=!25H!):3*
-
-
""G%0*
-
.+$%7"5F8"+.

$/2$%)""!+5H!3#
""!+5:*
72>;%M"5!2$%)5H!33#
:"B2CN$$%:"F8<"EC3*
""*
-#
725H!8443#
5:45H!*

B-Tree
5H!45H!8,&(*
7"25:3*
-
-
"45H!*
""*
-
.+%"$%F8<"+.
$%"02$%)+:)""!+5H!3#
72>5H!3#
""*
-
72$%5H!8$%&(3#
+:4*
- O5:%
")%)5*
"4*
%45H!8*
542"'%3.*
12"4%3

#
725H!8$%&5($%3
"45'*
725H!8$%&5(44$%3
#
:"B2C<5%HP"0F8<"EC)$%3*
""*
-


B-Tree
%458*
542"'%3.*
-
72"%3
+:4%*
-
%"02$%):)5H!8,&+:(3*
""*
-
.+F8<"<"%$"%+.
$"%$"%2""!+5H!3#
*
725H!3#
7"24*5H!8*''3#
"%$"%25H!8,&(3*
:"B2CPC)5H!8$%&'(3*
-
"%$"%25H!8,&(3*
-

-
5%23#
$%)*
123#
:"B2C "/ED/EC3*
:"B2CI%"0E<"%$"%EC3*
:"B2CQLEQ"H"RC3*
%72CPC)A3*
123#
%R

B-Tree
:"B2CQ"H":RC3*
%72CPC)A$%3*
"/2$%3*
"%,*
%R
:"B2CQ"5RC3*
%72CPC)A$%3*
/2$%)"3*
"%,*
%R
:"B2CQ"5%"RC3*
%72CPC)A$%3*
%"02$%)A)"3*
"%,*
%R
"%$"%2"3*
"%,*
%R

L23*
7%R
:"B2C?%$"1"0:/>>EC3*
"%,*
-
:"B2CEC3*
-
-

B-Tree
3. Đánh giá và so sánh
3.1. Đánh giá độ phức tạp
Lưu trữ một lượng lớn dữ liệu trên đĩa cứng, mà tốc độ truy xuất của đĩa
cứng nhỏ hơn rất nhiều bộ nhớ trong của máy tính (RAM), nên số lượng
nút cần duyệt để tìm ra một khóa cũng là điều đáng lưu tâm. Trường hợp
xấu nhất là duyệt từ nút gốc đến tận nút lá. Ở B-Tree do các nút lá đều có
cùng một mức nên số nút cần duyệt qua cũng chính là chiều cao h của
cây.
Để ước lượng được chiều cao của cây thì cần tính được số khóa của
cây, từ các điều kiện của B-Tree. Một B-Tree bậc m thì:
• Nút gốc có ít nhất 1 khóa.
• Ở mức một, có ít nhất 2 nút và mỗi nút có ít nhất (m/2)-1, có tổng
cộng ít nhất 2[(m/2)-1] khóa.
• Mức hai có ít nhất 2(m/2) nút và có ít nhất (m/2)-1 khóa ở mỗi nút,
nên có tổng cộng ít nhất 2(m/2)*[(m/2)-1] khóa ở mức 2.
=>Tổng quát, ở mức i, với 1≤ i ≤ h − 1, sẽ có ít nhất 2(m/2)
i-1
*[(m/2)-1]
khóa.
Ở mức h, tức là ở hàng nút lá, có ít nhất 2(m/2)

h-1
nút và mỗi nút có ít nhất
một khóa.
Vậy với mọi B-Tree bậc m có n nút và chiều cao h>0 thì có bất phương
trình:
( ) ( ) ( )
1
1 1
1
1 2 / 2 / 2 1 2 / 2
h
i h
i
n m m m

− −
=
++ −

≥  


Sau khi rút gọn, chuyển đổi thành:
n ≥ 4_m/2
h-1
– 1
Cũng có nghĩa là chặn trên của chiều cao h của B-Tree bậc m có n nút:
Tính toán và ước lượng trên một „le có 100 triệu khóa:
B-Tree bậc m 50 100 250
Chặn trên của

h
6 5 4


×