B-TREE VÀ BỘ NHỚ NGOÀ

Một phần của tài liệu giáo trình cấu trúc dữ liệu 2 (Trang 87 - 89)

Cõy 2-3-4 là một vớ dụ về cõy nhiều nhỏnh, trong cõy nhiều nhỏnh

mỗi node sẽ cú nhiều hơn hai node con và nhiều hơn một mục dữ

liệụ Một loại khỏc của cõy nhiều nhỏnh là B-tree, là cõy rất hiệu

quả khi dữ liệu nằm trong bộ nhớ ngoàị Bộ lưu trữ ngoài tiờu biểu

là loại hệ thống đĩa như đĩa cứng mà ta cú thể nhỡn thấy trờn hầu hết

cỏc mỏy tớnh cỏ nhõn hoặc mỏy chủ.

Trong phần này chỳng ta sẽ bắt đầu với việc mụ tả cỏc khớa cạnh

khỏc nhau trong việc xử lý tập tin. Chỳng ta sẽ xem xột cỏch tiếp

cận đơn giản để tổ chức dữ liệu bờn ngoài: thứ tự tuần tự. Cuối

cựng, chỳng ta sẽ thảo luận về B-tree và vấn đề lưu trữ dữ liệu trờn bộ nhớ ngoàị Kết thỳc chương này là cỏch tiếp cận khỏc của lưu trữ

ngoài: đỏnh chỉ số (icunrrentexing), đõy là cỏch tiếp cận cú thể ỏp

dụng riờng hoặc kết hợp nú với B-treẹ

Một cỏch tiếp cận khỏc với cỏc khớa cạnh khỏc của lưu trữ ngoài, chẳng hạn như cỏc kỹ thuật tỡm kiếm. đú là phộp băm (hashing) trỡnh bàyở chương 2.

Chi tiết của cỏc kỹ thuật lưu trữ ngoài phụ thuộc vào từng hệ điều

hành, từng ngụn ngữ, và thậm chớ cả về phần cứng sử dụng trong

từng việc cài đặt cụ thể. Trong phần này chỳng sẽ thảo luận một

cỏch tổng quỏt hơn so với hầu hết cỏc chủ đề trong cuốn sỏch nàỵ

2.1.Truy xuất dữ liệu trờn bộ nhớ ngoài

Cỏc cấu trỳc dữ liệu mà chỳng tađó thảo luận từ trước đến giờ đa số

dựa trờn lưu trữ dữ liệu trong bộ nhớ chớnh (thường gọi là RAM, viết tắt của Racunrrentom Access Memory). Tuy nhiờn, trong một

lỳc đưa vào bộ nhớ chớnh. Trong trường hợp này cỏc kiểu lưu trữ

khỏc nhau là cần thiết. Thường cỏc tập tin trờn đĩa cú dung lượng

lớn hơn nhiều so với bộ nhớ chớnh; điều này làđỳng bởi vỡ giỏ thành khỏ rẻ của chỳng trờn một đơn vị lưu trữ.

Tất nhiờn, cỏc tập tin trờnđĩa cũng cú thuận lợi khỏc: đú là khả năng lưu trữ lõu dài của chỳng. Khi bạn tắt mỏy (hoặc nguồn điện bị hư), dữ liệu trong bộ nhớ chớnh sẽ bị mất. Cỏc tập tin trờnđĩa cú thể lưu lại dữ liệu vụ thời hạn khi nguồn điện bị tắt. Tuy nhiờn, sự khỏc biệt

chủ yếu là về kớch cỡ mà chỳng ta cần lưu ýở đõỵ

Bất lợi của việc lưu trữ ngoài là sự truy xuất chậm hơn so với bộ

nhớ chớnh. Sự khỏc biệt về tốc độ này cú thể được giải quyết bằng

cỏc kỹ thuật khỏc nhau để làm tăng tớnh tớnh hiệu quả của chỳng.

Một vớ dụ trong việc lưu trữ ngoàiđú là giả sử bạn viết một chương trỡnh cơsở dữ liệu để xử lý dữ liệu trong danh bạ điện thoại của một

thành phố cú kớch thước trung bỡnh; cỡ 500,000 mục. Mỗi mục bao

gồm tờn,địa chỉ, số điện thoại, và cỏc dữ liệu khỏc mà một cụng ty (adsbygoogle = window.adsbygoogle || []).push({});

điện thoại thường sử dụng. Giả sử mỗi mục được lưu trữ nhưlà một

mẩu tin với kớch thước 512 bytẹ Kết quả kớch của tập tin là 500,000*512=256,000,000 byte, vào khoảng 256 mờgabytẹ Chỳng ta giả sử rằng với lượng dữ liệu này là quỏ lớn so với bộ nhớ chớnh

của một mỏy tớnh nàođú, nhưng sẽ trở nờn rất nhỏ để lưu trữ trờn ổ

đĩạ

Kết quả là bạn cú một số lượng lớn dữ liệu trờn đĩạ Làm thế nào bạn cấu trỳc nú để thực hiện cỏc tớnh năng thụng dụng mong muốn:

tỡm kiếm, chốn, xoỏ nhanh? Cú hai vấn đề cần xem xột:

 Việc truy cập dữ liệu trờn đĩa chậm hơn nhiều so với truy

cập trờn bộ nhớ chớnh.

 Thứ hai là việc truy cập nhiều mẩu tin cựng một lỳc.  Truy xuất chậm

Bộ nhớ chớnh của mỏy tớnh làm việc với tớn hiệu điện tử. Bất kỳ byte

nào cũng cú thể truy cập nhanh như cỏc byte khỏc, với một phần

nhỏ của micro giõy (bằng 1/1,000,000 của giõy).

Để truy cập một phần cụ thể dữ liệu trờn ổ đĩa, đầu đọc/ghi trước

tiờn phải dịch chuyển đến rónh phự hợp. Điều này được thực hiện

bởi một mụ tơ, hoặc thiết bị tương tự: đõy là hoạt động cơkhớ chiếm

vài milli giõy (bằng 1/1,000 của giõy).

Kết quả là, thời gian truy cập ổ đĩa thường vào khoảng 10 milli giõỵ

Điều này cú nghĩa là chậm hơn 10,000 lần so với truy cập bộ nhớ

chớnh.

Sự phỏt triển của kỹ thuật đó giảm thời gian truy xuất đĩa theo thời

gian, nhưng thời gian truy xuất bộ nhớ chớnh giảm xuống nhanh hơn so với truy cập đĩa, vỡ thế sự chờnh lệch giữa thời gian truy xuất bộ

chớnh vàổ đĩa sẽ ngày càng lớn trong tương laị

Truy xuất khối (block)

Một khi đóđịnh vị đỳng vị trớ và tiến trỡnh đọc (ghi) bắt đầu, ổ đĩa cú thể chuyển một lượng lớn dữ liệu vào bộ nhớ chớnh một cỏch

nhanh chúng và chớnh xỏc.Để làmđược việc này và cũng nhằm đơn giản cơchế điều khiển ổ đĩa, dữ liệu được lưu trữ trờnđĩa thành cỏc nhúm gọi là block, pages, allocation units, hoặc một vài tờn gọi khỏc

tuỳ thuộc vào hệ điều hành. ở đõy chỳng ta sẽ gọi chỳng là khối

(block).

Kớch cỡ của khối biến đổi tuỳ thuộc vào từng hệ điều hành. Kớch thước của ổ đĩa với cỏc yếu tố khỏc, thường là luỹ thừa của 2. Đối

với vớ dụ về danh bạ điện thoại nhưnờuở trước, giả sử một khối cú

kớch thước là 8,192 byte (213). Kết quả là cơsở dữ liệu danh bạ điện (adsbygoogle = window.adsbygoogle || []).push({});

thoại sẽ cần 256,000,000 byte chia cho 8,192 byte trờn một khối,

nghĩa là sẽ cú 31,250 khốị

Chương trỡnh sẽ hiệu quả khi nú yờu cầu thao tỏcđọc hoặc ghi với

kớch thước là bội số của kớch thước khốị Nếu muốn đọc 100 byte,

sẽ khụng dựng đến. Hoặc nếu muốn đọc là 8,200 byte, hệ thống sẽ

đọc 2 khối hay 16,384 byte nhưng chỉ lấy hơn một nửa của số byte

này (8,200). Vỡ thế bạn phải tổ chức chương trỡnh sao cho tại mỗi

thời điểm nú chỉ làm việc trờn một khối dữ liệu, điều này sẽ làm tối

ưu sự truy xuất.

Giả sử kớch thước mỗi mẩu tin của danh bạ điện thoại là 512 byte, bạn cú thể lưu 16 mẩu tin thành một khối (8,192 chia cho 512), như trỡnh bày ở hỡnh 4.11. Vỡ thế, để tớnh hiệu quả đạt đến mức tối đa bạn phải đọc 16 mẩu tin tại mỗi thời điểm (hoặc là một bội số của

16).

Kớch thước mỗi mẩu tin thường là bội số của 2. Điều này làm cho số

lượ ng toàn bộ của chỳ ng sẽ luụ n luụn vừa với một khốị

Kớch thước trỡnh bày trong vớ dụ danh bạ điện thoại của mẩu tin,

khối,... chỉ là minh họa; Chỳng sẽ biến đổi phụ thuộc vào số lượng

và kớch thước của mẩu tin và cỏc ràng buộc về phần cứng và phần

mềm khỏc. Khối thường chứa đựng hàng trăm mẩu tin, và cỏc mẩu

tin này cú thể lớn hơn hoặc nhỏ hơn 512 bytẹ

Một khi đầu đọc/ghi định vị đỳng vị trớ (như đó trỡnh bày ở trờn), việc đọc một khối rất nhanh, chỉ tốn vài milli giõỵ Vỡ thế, việc truy

cập ổ đĩa để đọc hoặc ghi mỗi khối sẽ khụng phụ thuộc vào kớch thước của khốị Điều này cú nghĩa là khối càng lớn thỡ càng cú hiệu

quả khi bạn đọc hoặc viết một mẩu tin đơn (giả sử bạn sử dụng tất

cả cỏc mẩu tin trong khối).

 Thứ tự tuần tự

Cú một cỏch để sắp xếp dữ liệu danh bạ điện thoại của tập tin trờn đĩađú là sắp xếp tất cả mẩu tin theo một vài khúa nàođú, giả sử sắp

theo thứ tự alpha của họ. Nếu vậy thỡ mẩu tin của Joseph Aardvark

là mẩu tin đầu tiờn, v.v.Điều nàyđược trỡnh bày trong hỡnh 4.12.

 Tỡm kiếm

Để tỡm kiếm trờn một tập tin cú thứ tự tuần tự theo họ, cụ thể là Smith, bạn cú thể sử dụng thuật toỏn tỡm kiếm nhị phõn. Bạn bắt đầu

bằng việc đọc một khối cỏc mẩu tin từ chớnh giữa của tập tin. 16

mẩu tin trong khối được đọc cựng một lỳc vào một vựng đệm cú (adsbygoogle = window.adsbygoogle || []).push({});

kớch thước 8,192 byte của bộ nhớ chớnh.

File =256,000,000 bytes

Hỡnh 4.11Khối và mẩu tin

Record Record Record Record

TEN TEN TEN TEN

DIACHI DIACHI DIACHI DIACHI

PHONE PHONE PHONE PHONE

…. …. …. ….

Block Block Block Block Block

0 1 2 31,248 31,249

8,192bytes bytes

0 1 2 15

Một phần của tài liệu giáo trình cấu trúc dữ liệu 2 (Trang 87 - 89)