You are on page 1of 68

BÀI 3

QUẢN LÝ DỮ LIỆU
NỘI DUNG
• Thiết bị lưu trữ
• Phân loại
• Truy cập dữ liệu
• Tổ chức tệp dữ liệu
• Chỉ mục - Indexing
• Khái niệm
• Một số chỉ mục đơn mức
• Chỉ mục nhiều mức
• Chỉ mục động nhiều mức sử dụng B-Tree và B+-
Tree
Lưu trữ dữ liệu

• Vấn đề quan trọng trong DBMS, ảnh hưởng đến hiệu năng
của toàn bộ DBMS

• Phụ thuộc nhiều vào thiết bị được sử dụng lưu trữ


• Tốc độ truy cập dữ liệu
• Chi phí cho mỗi đơn vị dữ liệu
• Độ tin cậy
• Lưu trữ tạm thời/vĩnh viễn (volatile/non-volatile)

• Sử dụng chiến thuật phân cấp bộ nhớ với ba tham số: dung
lượng, tốc độ và chi phí
Phân lớp thiết bị lưu trữ
Thiết bị lưu trữ dữ liệu
• Việc lưu trữ dữ liệu thường hay sử dụng thiết bị lưu trữ thứ cấp
để có được dung lượng lớn/chi phí nhỏ.
• Với các loại ổ đĩa cứng (hard-disk), dữ liệu được lưu trên
những vùng từ trên các mặt đĩa từ.

Sector Gap
Terms: Platter, Head,
Cylinder, Track,
Sector (physical),
Block (logical), Gap
Hard-disks
• Cylinder => Track => Sector
• Mỗi platter có khoảng 50-100K tracks
• Mỗi track có khoảng 500 – 1000 sectors
• Kích thước sector thường là 512B
• Block = tập các sectors mà OS có thể đọc/ghi đồng thời
• Kích thước block B cố định đối với mỗi OS, từ 4KB đến 16KB
• Tương tác disk  main memory dựa trên việc chuyển dời các blocks.
• Truy xuất dữ liệu từ ổ đĩa được thực hiện thông qua Disk
Controler

ATA (AT adaptor), PATA


SATA (Serial ATA, or Serial
Advanced Technology Attachment)
), SCSI (Small Computer System
Interconnect), …
Hiệu năng thiết bị lưu trữ
Dựa trên Access Time, Data Transfer Rate và Mean time to failure (MTTF)
• Access Time = Seek time + Rotational latency
• Average seek time is 1/2 the worst case seek time, 4 to 10 ms on typical disks
• Rotational latency – time it takes for the sector to be accessed to appear under the
head.
• Average latency is 1/2 of the worst case latency.
• 4 to 11 milliseconds on typical disks (5400 to 15000 RPM)

• Data-transfer rate – tốc độ dữ liệu ghi/đọc trên thiết bị lưu trữ


• Tốc độ từ 25 -100 MB/s, với những tracks bên trong, tốc độ thấp hơn
• Nhiều ổ đĩa có thể chia sẻ chung bộ điều khiển ➔ tốc độ này phụ thuộc vào
controller
• ATA-5: 66 MB/sec, SATA: 150 MB/sec, Ultra 320 SCSI: 320 MB/s
• Fiber Channel (FC2Gb): 256 MB/s

• MTTF: từ 3-5 năm (với những disks mới, từ 500,000 -1,200,000h)


Ví dụ

• Xét ổ cứng 3.5”, tốc độ 3600RPM, 1 mặt, dung


lượng 16x220B, 128 cylinders, thời gian truy cập
trung bình = 25ms, thời gian truy xuất giữa 2
cylinders liền nhau là 5ms, 1 KB blocks = sectors,
không gian “gap” là 10% (overhead between
sectors)
• Tính thông lượng (bandwidth) của hệ lưu trữ này?
• Tính thời gian truy xuất một block ngẫu nhiên?
Ví dụ
• Xét ổ cứng 3.5”, tốc độ 3600RPM, 1 mặt, dung lượng 16x220B, 128
cylinders, thời gian truy cập trung bình = 25ms, thời gian truy xuất
giữa 2 cylinders liền nhau là 5ms, 1 KB blocks = sectors, 10%
overhead between sectors
➔ bytes/cyl = 224/27 = 217 = 128 KB
• blocks/cyl = 128 KB / 1 KB = 128
• 60 revolutions / sec, 1 rev. = 16.66 msec.
• Thời gian truy xuất dữ liệu 1 track:(16.66)(0.9)=14.99 ms.
• Transfer time /1 block = 14.99/128=0.117 ms.
• Trans. time /1 block+gap=16.66/128=0.13ms.
Bandwith lý tưởng: 1 KB (block) mất 0.117 ms
• BB = 1/0.117 = 8.54 KB/ms = 8.33MB/s
Bandwith (over track): 128 KB in 16.66 ms.
• SB = 128/16.66 = 7.68 KB/ms = 7.50MB/s
Thời gian truy xuất random block (T1)= seek + rotational delay + TT

...
= 25 + (16.66/2) + .117 = 33.45 ms
Ví dụ
• Giả sử DBMS sẽ xử lý dữ liệu theo block có kích thước 4KB, 1
block chứa được 10 bộ kích thước 100B. Xác định thời gian
đọc bảng dữ liệu chứa 1 triệu bộ?
Ví dụ
• Giả sử DBMS sẽ xử lý dữ liệu theo block có kích thước 4KB, 1
block chứa được 10 bộ kích thước 100B. Xác định thời gian đọc
bảng dữ liệu chứa 1 triệu bộ?

1 2 3 4 ...
1 block
T4 = 25 + (16.66/2) + (.117) x 1 + (.130) X 3 = 33.83ms
[trong khi T1 đã là 33.45 ms]

TT = Time to read a full track (start at any block)


= 25 + (0.130/2) + 16.66* = 41.73 ms
Một số mô hình lưu trữ hiện đại

• DAS

• NAS

• SAN
DAS
NAS
SAN
Storage Area Networks
• Nhu cầu lưu trữ dữ liệu quy mô lớn ngày càng tăng (bank,
finance, facebook, google, flick, …).
• SAN là một trong những giải pháp lưu trữ cho các hệ quản trị
CSDL lớn
• Mỗi thiết bị lưu trữ được cấu hình như một nốt trong mạng tốc độ dao,
có thể kích hoạt/dừng tuỳ theo nhu cầu
• Tách biệt hệ thống lưu trữ và hệ thống xử lý dữ liệu, tạo sự linh động
về hiệu năng và khả năng kết nối.
SAN
• Ưu điểm của SANs :
• Cho phép kết nối nhiều-nhiều mềm dẻo giữa các thiết bị
lưu trữ và servers thông qua mạng quang (thông lượng
lớn).
• Tách biệt thiết bị lưu trữ và hệ thống tính toán, có thể
cách xa nhau hàng 10km nếu sử dụng các quang.
• Cho phép nâng cấp/hiệu chỉnh năng lực lưu trữ độc lập
(on fly) với các hệ thống tính toán.
• Nhược:
• Vấn đề tích hợp các thiết bị từ nhiều nhà sản xuất khác
nhau, nhiều chuẩn khác nhau.
• Chi phí còn tương đối cao.
Nội dung
• Thiết bị lưu trữ
• Phân loại
• Truy cập dữ liệu
• Tổ chức tệp dữ liệu
• Chỉ mục - Indexing
• Khái niệm
• Một số chỉ mục đơn mức
• Chỉ mục nhiều mức
• Chỉ mục động nhiều mức sử dụng cây B-Tree và
B+-Tree

Tài liệu tham khảo: [1]chap. 5+6(13+14)


Tổ chức tệp dữ liệu

• CSDL được lưu trữ được một tập các tệp - files
• Mỗi tệp được tổ chức dưới dạng chuỗi các bản ghi – records
• Mỗi bản ghi là một tập các trường dữ liệu - fields.
Files or Records
• File descriptor (file header): chứa thông tin miêu tả
tệp, như tên và kiểu dữ liệu các trường , địa chỉ các
blocks trên đĩa …
• Các bản ghi được lưu trữ trên các disk blocks
• blocking factor bfr: số records trung bình được lưu trữ trên
1 disk block
• Tệp CSDL có thể được tổ chức từ các bản ghi kích
thước cố định hoặc thay đổi
• Bản ghi có thể ở dạng unspanned hoặc spanned
• Unspanned: không cho phép lưu trữ trên 2 blocks
• Spanned: cho phép lưu trữ nhiều hơn 1 block
Files or Records
• Các khối đĩa vật lý có thể được cấp phát liên tục, liên kết
hoặc được đánh chỉ mục để lưu trữ các bản ghi
• Với tệp CSDL kiểu bản ghi độ dài cố định, các bản ghi
có cùng khuôn dạng và thường là unspanned record.
• Tệp CSDL kiểu bản ghi độ dài thay đổi, cần lưu thông
tin bổ xung kèm theo mỗi bản ghi như đặc trưng phân
cách, kiểu trường, …. Thường dạng spanned record
được sử dụng với kiểu tệp này
• Các tệp CSDL có thể được tổ chức dưới dạng chuỗi có
thứ tự (ordered file, hay sequential file) hay không có
thứ tự (unordered file, hay heap/pile file) các bản ghi
Các thao tác trên tệp CSDL

• DBMS thường hỗ trợ các thao tác sau:


• OPEN: Readies the file for access, and associates a pointer
that will refer to a current file record at each point in time.
• FIND: Searches for the first file record that satisfies a certain
condition, and makes it the current file record.
• FINDNEXT: Searches for the next file record (from the
current record) that satisfies a certain condition, and makes it
the current file record.
• READ: Reads the current file record into a program variable.
• INSERT: Inserts a new record into the file & makes it the
current file record.
• DELETE: Removes the current file record from the file,
usually by marking the record to indicate that it is no longer
valid.
Các thao tác trên tệp CSDL

• DBMS thường hỗ trợ các thao tác sau:


• MODIFY: Changes the values of some fields of the current
file record.
• CLOSE: Terminates access to the file.
• REORGANIZE: Reorganizes the file records.
• For example, the records marked deleted are physically
removed from the file or a new organization of the file
records is created.
• READ_ORDERED: Read the file blocks in order of a
specific field of the file.
Unordered Files

• Các bản ghi mới được chèn vào cuối tệp.

• Đặc điểm:
• Phép chèn được thực hiện đơn giản.
• Việc tìm kiếm trung bình cao, ½ số khối, với kỹ thuật tìm
kiếm tuần tự.
• Phép đọc bản ghi tương đương với phép tìm kiếm tuần tự
Ordered Files
• Các bản ghi trong tệp được lưu trữ
xếp theo thứ tự của một trường
ordering field.

• Đặc điểm:
• Phép chèn (Insertion): phức tạp vì bản
ghi phải được chèn vào đúng vị trí.
• Có thể sử dụng phương pháp chèn ngẫu nhiên rồi
sắp xếp sau (giao tác khác, tệp khác).
• Cho phép tìm kiếm kiểu nhị phân trên
trường ordering field, độ phức tạp là
log2 số bản ghi.
• Phép đọc bản ghi sẽ được thi hành hiệu
quả.
Thời gian truy cập trung bình
Hashed Files
• Hashing for disk files is called External Hashing
• The file blocks are divided into M equal-sized buckets,
numbered bucket0, bucket1, ..., bucketM-1.
• Typically, a bucket corresponds to one (or a fixed number of) disk
block.
• One of the file fields is designated to be the hash key of the
file.
• The record with hash key value K is stored in bucket i, where
i=h(K), and h is the hashing function.
• Search is very efficient on the hash key.
• Collisions occur when a new record hashes to a bucket that is
already full.
• An overflow file is kept for storing such records.
• Overflow records that hash to each bucket can be linked together.
Hashed Files
• There are numerous methods for collision resolution, including the
following:
• Open addressing: Proceeding from the occupied position specified by
the hash address, the program checks the subsequent positions in order
until an unused (empty) position is found.
• Chaining: For this method, various overflow locations are kept, usually
by extending the array with a number of overflow positions. In addition,
a pointer field is added to each record location. A collision is resolved by
placing the new record in an unused overflow location and setting the
pointer of the occupied hash address location to the address of that
overflow location.
• Multiple hashing: The program applies a second hash function if the
first results in a collision. If another collision results, the program uses
open addressing or applies a third hash function and then uses open
addressing if necessary.
Hashed Files
Hashed Files
• To reduce overflow records, a hash file is typically kept
70-80% full.
• The hash function h should distribute the records
uniformly among the buckets
• Otherwise, search time will be increased because many
overflow records will exist.
• Main disadvantages of static external hashing:
• Fixed number of buckets M is a problem if the number
of records in the file grows or shrinks.
• Ordered access on the hash key is quite inefficient
(requires sorting the records).
Hashed Files - Overflow handling
Dynamic And Extendible Hashed Files
• Dynamic and Extendible Hashing Techniques
• Hashing techniques are adapted to allow the dynamic
growth and shrinking of the number of file records.
• These techniques include the following: dynamic hashing,
extendible hashing, and linear hashing.
• Both dynamic and extendible hashing use the binary
representation of the hash value h(K) in order to
access a directory.
• In dynamic hashing the directory is a binary tree.
• In extendible hashing the directory is an array of size 2d
where d is called the global depth.
Dynamic And Extendible Hashing
• The directories can be stored on disk, and they
expand or shrink dynamically.
• Directory entries point to the disk blocks that contain the
stored records.
• An insertion in a disk block that is full causes the
block to split into two blocks and the records are
redistributed among the two blocks.
• The directory is updated appropriately.
• Dynamic and extendible hashing do not require an
overflow area.
• Linear hashing does require an overflow area but
does not use a directory.
• Blocks are split in linear order as the file expands.
Extendible Hashing
Nội dung
• Thiết bị lưu trữ
• Phân loại
• Truy cập dữ liệu
• Tổ chức tệp dữ liệu
• Chỉ mục - Indexing
• Khái niệm
• Một số chỉ mục đơn mức
• Chỉ mục nhiều mức
• Chỉ mục động nhiều mức sử dụng cây B-Tree và B+-Tree

Tài liệu tham khảo: [1]chap. 5+6(13+14)


Đặt vấn đề

• Xét quan hệ: Employee (ID, Name, Dept, …)


• 10 M bản ghi
• Truy vấn:

SELECT *
FROM Employee
WHERE Name = “Bob”
Giải pháp 1: Full Table Scan

• Lưu trữ (storage):


• Employee được lưu trữ trong các khối liền nhau
• Kế hoạch thực thi (Query plan):
• Scan toàn bộ quan hệ, trả về bản ghi có cột Name nhận
giá trị Bob
• Chi phí (Cost):
• Kích thước bản ghi = 100 bytes
• Kích thước của quan hệ = 10 M x 100 = 1 GB
• Thời gian thực thi @ 20 MB/s ≈ 1 Minute
Giải pháp 2

•Storage:
• Employee được sắp xếp theo thuộc tính Name
•Query plan:
• Binary search
Giải pháp 2

•Chi phí:
•Kích thước block: 1024 bytes
•Số bản ghi/block: 1024 / 100 = 10
•Tổng số blocks: 10 M / 10 = 1 M
•Số lượng block cần truy cập với binary
search: 20
•Tổng thời gian: 20 ms x 20 = 400 ms
Giải pháp 2: Các vấn đề khác

• Điều kiện lọc trên các thuộc tính không được sắp xếp, chẳng
hạn:

SELECT *
FROM Employee
WHERE Dept = “Sales”

• Insert và Delete
???
Indexes
• Định nghĩa: là một cấu trúc dữ liệu đặc biệt, giúp việc
truy vấn dữ liệu trong database được thực hiện hiệu
quả hơn.

• Độc lập với việc lưu trữ dữ liệu vật lý:


→ Có thể có nhiều index trên 1 quan hệ

• Việc lưu trữ trên thiết bị lưu trữ phải đảm bảo
• Dữ liệu phù hợp để có thể tải vào buffer
• Bền vững

• Phải được cập nhật khi quan hệ được cập nhật


→ Cập nhật dữ liệu sẽ tốn chi phí hơn nhưng truy vấn sẽ
được thực thi hiệu quả hơn
Indexes: đường dẫn truy cập
• Index có thể là một file chứa các mục chỉ dẫn (entry) có dạng <field
value, pointer to record>, được sắp xếp theo cột giá trị.
• Chỉ mục đơn mức là một file hỗ trợ việc tìm kiếm bản ghi trong file
dữ liệu hiệu quả hơn.
• Index File thường chiếm không gian lưu trữ nhỏ hơn so với dữ liệu
bởi vì các entry nhỏ hơn cả về kích thước và số lượng
• Truy vấn đến records sẽ dựa trên tìm kiếm nhị phân trên file index
với kết quả là con trỏ trỏ tới bản ghi dữ liệu
• Cũng có thể phân loại index thành 2 loại: dày (dense) và thưa
(sparse)
• File index dày có số lượng entry tương ứng với mọi giá trị tìm
kiếm, tức là mọi bản ghi trong file dữ liệu.
• Flie index thưa chỉ có số lượng entry tương ứng với một vài giá trị
tìm kiếm mà thôi
Ví dụ
• Xét quan hệ EMPLOYEE(NAME, SSN, ADDRESS, JOB, SAL, ... )
• Biết rằng:
• record size R=150 bytes block size B=512 bytes r=30000 records
• Như vậy:
• blocking factor Bfr= B div R= 512 div 150= 3 records/block
• số lượng block b= (r/Bfr)= (30000/3)= 10000 blocks
• Để index trên cột SSN với kích thước VSSN=9 bytes, giả thiết kích thước con
trỏ dữ liệu là PR=7 bytes, ta có:
• k.thước index entry RI=(VSSN+ PR)=(9+7)=16 bytes
• index blocking factor BfrI= B div RI= 512 div 16= 32 entries/block
• số lượng index block bl= (r/ BfrI)= (30000/32)= 938 blocks
• số lần truy cập index block sử dụng binary search log2bI= log2938= 10 lần
• So sánh:
• chi phí trung bình của việc tìm kiếm tuyến tính:
(b/2)= 30000/2= 15000 block accesses
• Nếu file dữ liệu được sắp xếp thì chi phí binary search là:
log2r= log230000= 15 block accesses
Ví dụ: Xây dựng chỉ mục thuộc tính đơn

A B
a1 a1 b1

a2 a2 b2
A = val

A > low ai ai bi
A < high

an an bn
Các chỉ mục đơn mức
• Primary Index
• Được sử dụng trên tệp có thứ
tự, thường được sắp xếp theo
trường khoá (key field)
• Một mục chỉ mục (index
entry) tương ứng với một
block dữ liệu; index entry lấy
giá trị của key field của bản
ghi đầu tiên trong khối (neo
khối)
• Cũng có thể lựa chọn bản ghi
cuối cùng trong khối.
• Là dạng index thưa.
Các chỉ mục đơn mức
• Clustering Index
• Được sử dụng trên tệp có thứ tự,
dữ liệu được sắp xếp theo một
trường không phải khoá →
không đòi hỏi mỗi bản ghi phải
có giá trị duy nhất tại cột đó. A clustering index
• Mỗi index entry tương ứng với on the
một giá trị không trùng lặp của DEPTNUMBER
cột; con trỏ của index entry sẽ ordering non-key
trỏ tới block dữ liệu đầu tiên có field of an
chứa giá trị này. EMPLOYEE file.
• Đây cũng là dạng index thưa;
thao tác Insert cũng như Delete
được thực hiện tương đối dễ
dàng.
Ví dụ Clustering Index
Các chỉ mục đơn mức
• Secondary Index
• Cung cấp một cách thức truy cập dữ liệu thứ cấp trên
các tệp đã tồn tại một hoặc nhiều primary index.
• Có thể được xây dựng trên thuộc tính là khoá dự tuyển
cũng như trên các thuộc tính thông thường.
• Là một tệp có thứ tự với 2 cột:
• Cột thứ nhất có kiểu dữ liệu giống với cột dữ liệu
tương ứng trong file dữ liệu.
• Cột thứ hai có thể là con trỏ khối hoặc con trỏ trỏ tới
bản ghi dữ liệu.
• Có thể có nhiều secondary indexes trong cùng một
tệp.
• Mỗi entry tương ứng với một bản ghi dữ liệu, do đó nó
là dạng index dày.
Ví dụ với chỉ mục thứ cấp
Ví dụ với chỉ mục thứ cấp
Đặc điểm của các kiểu index
Chỉ mục nhiều mức

• Do chỉ mục đơn mức cũng là một tệp dữ liệu có thứ tự →


có thể tạo ra primary index trên chính tệp index
• Index file được gọi là chỉ mục mức 1 và tạo chỉ mục
cho tệp này được gọi là chỉ mục mức 2.

• Lặp lại như vậy cho tới khi số lượng entry trong index file
mức cao nhất vừa đủ một disk block.

• Có thể thực hiện với mọi loại chỉ mục đơn mức (primary,
secondary, clustering), chỉ với điều kiện tệp index đầu tiên
có kích thước lớn hơn 1 disk block
Ví dụ với chỉ mục chính hai mức
Chỉ mục nhiều mức
• Cây tìm kiếm cũng là một dạng chỉ mục nhiều mức
• Vấn đề insert và delete một entry khá phức tạp do mọi
mức index đều là tệp có thứ tự.
• Mỗi nút trong cây tìm kiếm có chứa con trỏ trỏ tới cây con
bên dưới
Ví dụ: cây tìm kiếm với q = 3
Chỉ mục động nhiều mức sử dụng cây B&B+

• Phần lớn chỉ mục nhiều mức sử dụng cấu trúc B-tree hoặc
B+-tree

• Các cấu trúc này là biến thể của cây tìm kiếm, cho phép việc
insert và delete được thực hiện hiệu quả.

• Trong cấu trúc B-Tree và B+-Tree, mỗi nút tương ứng với
một disk block.

• Mỗi nút được lưu trữ ở mức half-full cho tới completely-full
So sánh B-tree and B+-tree
• Trong B-tree, các con trỏ trỏ tới các bản ghi dữ liệu tồn
tại ở mọi mức trong cây

• Trong B+-tree, các con trỏ trỏ tới các bản ghi dữ liệu chỉ
tồn tại ở các nút lá

• Một cây B+-tree có thể có độ cao thấp hơn cây B-tree


tương ứng → do đó khả năng lưu trữ các giá trị tìm kiếm
là cao hơn
B-tree
B+-tree
• The nodes of a B+-tree
• (a) Internal node of a B+-tree with q –1 search values.
• (b) Leaf node of a B+-tree with q – 1 search values and q – 1 data pointers.
Chỉ mục động nhiều mức sử dụng B/B+-Trees

• Phép chèn vào một nút chưa đầy được thực hiện khá hiệu quả
• Nếu một nút bị đầy, quá trình chèn sẽ chia nút đó thành 2 nút
khác
• Việc phân tách này có thể lan truyền tới các mức khác trong cây.
• Phép xoá cũng hiệu quả trong trường hợp nó khiến cho một nút
không bị nhỏ hơn half-full, nếu không nút này sẽ bị gộp vào các
nút láng giềng.
Ví dụ chèn dữ liệu trong B+-Tree

49 n=2

15 36 49 62

Insert: 62
Delete: Các bước thực hiện

•Xoá key trong nút lá


•Phân bố lại key giữa các lá liền kề
Gộp các lá liền kề
•Phân bố lại các key giữa hai nút con
anh em
Gộp các nút con anh em
Gộp các lá liền kề

72 … 67 85

54 58 64 68 75
Gộp các lá liền kề

72 … 67 85

54 58 64 68 75
Gộp các lá liền kề

72 … 85

54 58 64 68 75
Gộp các nút anh em

… 59 …

41 48 52 63 74

[52, 59) [59,63)


Gộp các nút anh em

… 59 …

41 48 52 59 63

[52, 59) [59,63)


Tổng kết

• Nắm rõ mô hình phân cấp thiết bị lưu trữ dữ liệu, cách thức
tổ chức và truy cập dữ liệu trên thiết bị lưu trữ, sự cần thiết
phải tổ chức dữ liệu theo khối/trang, một số thiết bị lưu trữ
hiện đại, …

• Hiểu tổng quan một số kiểu, phương pháp tổ chức và lưu trữ
CSDL trên tệp; nắm được các loại tệp điển hình như
ordered/unordered files, hashing files,…

• Hiểu sâu, rõ khái niệm chỉ mục, một số loại chỉ mục đơn
mức, đa mức; phương pháp xây dựng chỉ mục động nhiều
mức với B-Tree và B+-Tree. Nắm được ảnh hưởng của chỉ
mục đến hiệu năng truy xuất dữ liệu.

You might also like