AAAAAAAAAA1

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Chương 1

TỔNG QUAN

1.1. Các khó khăn trên hệ thống xử lý file truyền thống

Cách tiếp cận truyền thống đối với các hệ thống thông tin thường chỉ tập trung

vào các nhu cầu xử lý dữ liệu của các phòng riêng lẻ trong một tổ chức mà không xem

xét tổ chức này như là một tổng thể. Các hệ thống thông tin này đáp ứng các yêu cầu

của những người sử dụng bằng cách viết một chương trình mới đối với mỗi ứng dụng

riêng lẻ, thường là một chương trình được phát triển tại một thời điểm. Mỗi chương

trình ứng dụng hay một hệ thống theo yêu cầu sẽ được thiết kế để đáp ứng các yêu

cầu của một phòng đặc biệt hay một nhóm người sử dụng cụ thể. Do vậy, không có

một kế hoạch tổng thể hay một mô hình hướng đến sự tăng trưởng các ứng dụng mới

trong tương lai.

Mỗi ứng dụng tin học mới được thiết kế một cách điển hình với một tập các

file dữ liệu riêng của nó. Nhiều dữ liệu trong các file mới có thể đã xuất hiện trong

các file đang tồn tại sẽ phải được cấu trúc lại, mà đến lược nó, các chương trình đang

tồn tại sử dụng cùng các file này cũng phải được sửa lại hay viết lại hoàn toàn. Với lý

do này, thiết kế các file mới với mỗi ứng dụng được yêu cầu thường là đơn giản hơn

và cũng ít rủi ro hơn.

Ví dụ 1.1. Xem xét một phần của hệ thống Quỹ tiết kiệm trong Ngân hàng lưu

giữ thông tin về khách hàng và các tài khoản tiết kiệm của Ngân hàng. Một cách để

lưu trữ thông tin này trên máy tính là lưu trữ nó trong các file hệ thống bền vững. Để

cho phép người sử dụng thao tác những thông tin này, hệ thống có một số các chương

trình ứng dụng thao tác các file đó, chẳng hạn như:

Chương trình thêm một tài khoản mới.

Chương trình ghi nợ (ghi có) một tài khoản

Chương trình tính số dự của một tài khoản.

Các chương trình ứng dụng này được viết bởi các nhà lập trình hệ thống để đáp

ứng các yêu cầu tin học hoá của Ngân hàng.

Các chương trình ứng dụng mới có thể bổ sung thêm vào hệ thống khi các nhu

cầu mới nảy sinh.

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Hệ thống xử lý file điển hình vừa mô tả được hỗ trợ bởi một hệ điều hành nào

đó. Các bản ghi khá ổn định và tồn tại lâu dài được lưu trữ trong các file khác nhau và

các chương trình ứng dụng khác nhau được viết để trích ra các bản ghi từ các file

thích hợp hay bổ sung thêm các bản ghi mới vào các file đó.

Tuy nhiên, khi qui mô kinh doanh của các tổ chức và nhu cầu xử lý thao tác dữ

liệu với các mục đích khác nhau theo các qui định khác nhau tăng lên, một số vấn đề

nghiêm trọng có thể nảy sinh.

Các hệ thống trên cơ sở file được phát triển với các ứng dụng đặc biệt, do vậy

việc lưu trữ thông tin của các tổ chức trong các hệ thống file có một số bất lợi chính

sau:

Dư thừa dữ liệu và tính không nhất quán dữ liệu: Do các file và các

chương trình ứng dụng được tạo lập bởi các nhà lập trình khác nhau trong khoảng thời

gian dài, các file khác nhau có thể có các qui cách khác nhau và các chương trình có

thể được viết bằng một số ngôn ngữ lập trình khác nhau. Hơn nữa, vì các file được tạo

lập đối với mỗi chương trình ứng dụng riêng, do vậy cùng một tập các dữ liệu của tổ

chức có thể được lưu trữ lại trong mỗi chương trình ứng dụng, có nghĩa là một số

thông tin có thể lặp lại trên một số file khác nhau và các tài nguyên phần cứng sẽ bị

lãng phí.

Ví dụ 1.2. Địa chỉ, số điện thoại của một khách hàng đặc biệt có thể xuất hiện

trong một file chứa các bản ghi tài khoản tiết kiệm và trong một file chứa các bản ghi

số dư tài khoản. Sự dư thừa này den đến giá truy nhập và giá lưu trữ cao hơn.

Vì các dữ liệu được lưu trữ trong các file có thể được thay đổi một cách độc

lập bới các chương trình ứng dụng sử dụng chúng, nội dung của các khoản mục dữ

liệu trong chương trình ứng dụng này có thể không trình với cùng các khoản mục dữ

liệu đó trong một chương trình ứng dụng khác. Điều này den đến tính không nhất

quán dữ liệu, có nghĩa là các bản sao khác nhau của cùng một khoản mục dữ liệu

không giống nhau.

Ví dụ 1.3. Địa chỉ của khách hàng bị thay đổi trong bản ghi tài khoản tiết kiệm

nhưng không được phản ánh trong bản ghi số dư tài khoản đối với khách hàng đó.

Khó khăn trong truy nhập dữ liệu: Giả sử rằng một trong các nhân viên của

Ngân hàng cần tìm danh sách tên các khách hàng sống trong một thành phố nào đó.

Nhân viên này hfi phòng xử lý dữ liệu để đưa ra một danh sách như vậy. Vì yêu cầu

này không được dự tính trước, hệ thống gốc được thiết kế không có sgn một chương

                                                5

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

trình ứng dụng để đáp ứng yêu cầu này. Tuy nhiên, có một chương trình ứng dụng

đưa ra tất cả danh sách các khách hàng. Bấy giờ, nhân viên Ngân hàng đứng trước 2

sự lựa chọn: Hoặc sử dụng danh sách tất cả khách hàng và trích ra những thông tin

cần thiết bằng tay hoặc nhờ phòng xử lý dữ liệu đề nghị một nhà lập trình hệ thống

viết chương trình ứng dụng mới để đáp ứng yêu cầu này. Cả hai lựa chọn hiển nhiên

đều không được thoả mãn. Giả sử rằng, một chương trình như vậy được viết, và sau

vài ngày, cũng nhân viên đó cần một danh sách khác. Cũng như vậy, một chương

trình đưa ra danh sách đó không tồn tại và nhân viên này lại đứng trước hai sự lựa

chọn và không lựa chọn nào thoả mãn. Điều này có thể nói rằng môi trường xử lý file

không cho phép các dữ liệu cần thiết được tìm kiếm trong một phương pháp hiệu quả

và tiện lợi.

Cô lập và hạn chế chia sẽ dữ liệu: Với phương pháp tiếp cận truyền thống,

mỗi ứng dụng có các file dữ liệu riêng của nó và những người sử dụng ít có cơ sở dữ

liệu hội chia sẽ dữ liệu ngoài các ứng dụng riêng của họ. Một hậu quả của việc chia sẽ

dữ liệu bị hạn chế là cùng các dữ liệu phải lưu trữ trong nhiều file ứng với các ứng

dụng khác nhau do khi thiết kế phát triển các ứng dụng mới, người thiết kế thường

khó khai thác các dữ liệu chứa trong các file đang tồn tại trong khi các file mới được

thiết kế lặp lại nhiều dữ liệu đang tồn tại.

Các vấn đề về toàn vẹn: Các giá trị dữ liệu được lưu trữ trong cơ sở dữ liệu

phải thoả mãn các kiểu ràng buộc toàn vkn nhất định. Các nhà phát triển làm hiệu lực

các ràng buộc này trong hệ thống bằng cách thêm các đoạn mã tương ứng vào các

chương trình ứng dụng. Tuy nhiên, khi các ràng buộc mới được bổ sung thêm đối với

cơ sở dữ liệu, sẽ rất khó thay đổi các chương trình để làm hiệu lực các ràng buộc mới

này. Vấn đề này phức tạp hơn khi các ràng buộc đó lôi kéo một số khoản mục dữ liệu

từ các file khác nhau.

Các vấn đề về độ tin cậy: Một hệ thống máy tính cũng như một thiết bị điện

tử hay cơ sở dữ liệu học nào đó có thể bị lỗi. Trong nhiều ứng dụng, vấn đề mấu chốt

là khi một lỗi xuất hiện và được dò tìm phát hiện, dữ liệu phải được phục hồi đến

trạng thái toàn vkn tồn tại trước khi xảy ra lỗi.

Ví dụ 1.4. Xét chương trình ứng dụng chuyển 500USD từ tài khoản A đến tài

khoản B. Nếu hệ thống xảy ra lỗi khi thực hiện chương trình, có thể rằng, 500USD đã

chuyển đi từ tài khoản A những chưa được ghi có vào tài khoản B, kết quả là cơ sở dữ

liệu ở trong một trạng thái không toàn vkn dữ liệu.

                                               6

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Các dị thường truy nhập đồng thời: Để tăng hiệu năng tổng thể của hệ

thống và thời gian đáp ứng nhanh nhất có thể, nhiều hệ thống cho phép nhiều người

sử dụng truy nhập dữ liệu đồng thời. Trong một môi trường như vậy, sự tương tác của

các truy nhập đồng thời có thể den đến kết quả của một trạng thái không toàn vkn dữ

liệu.

Ví dụ 1.5. Xét tài khoản Ngân hàng A có 5000USD. Nếu hai khách hàng đến

rút quỹ ( Rút 50USD và 100 USD tương ứng) từ tài khoản A vào cùng một thời điểm.

Kết quả của các thực hiện đồng thời này có thể den đến tài khoản này ở trong một

trạng thái không đúng đsn (hay không toàn vkn). Giả sử rằng, các chương trình rút

thực hiện yêu cầu rút bao gồm các thao tác: đọc giá trị tài khoản, giảm giá trị này đi

một giá trị bằng số tiền cần rút và ghi kết quả trả lại. Nếu hai chương trình chạy đồng

thời, cả hai có thể cùng đọc 500USD và ghi lại 450USD, 400USD tương ứng. Phụ

thuộc vào chương trình nào ghi giá trị sau cùng, tài khoản A có thể chứ 450USD hoặc

400USD chứ không phải giá trị đúng của nó là 350USD.

Các vấn đề về an toàn: Không phải mọi người sử dụng của hệ thống đều có

thể truy nhập tất cả dữ liệu trong hệ thống.

Ví dụ 1.6. Trong hệ thống Ngân hàng, các nhân viên tài vụ của Ngân hàng chỉ

cần nhìn thấy một phần của cơ sở dữ liệu chứa thông tin về nhân viên khách hàng. Họ

không cần thiết truy nhập vào thông tin về các tài khoản khách hàng. Do các chương

trình ứng dụng được bổ sung vào hệ thống theo phương pháp thêm dần, việc bst tuân

thủ các ràng buộc an toàn như vậy là khá khó khăn.

Sự phụ thuộc dữ liệu của các chương trình ứng dụng: Do định nghĩa file

được chứa trong các chương trình ứng dụng, nếu các nội dung file và các khuôn dạng

bản ghi cần được thay đổi, các chương trình ứng dụng cũng phải thay đổi theo

1.2. Các hệ cơ sở dữ liệu

1.2.1. Các khái niệm cơ bản

Cơ sở dữ liệu là gì?

Một tổ chức (Xí nghiệp, trường học, Ngân hàng.....) có nhiều ứng dụng tin học

khác nhau nhưng tất cả các ứng dụng đó cùng được tiến hành trên một nguồn dữ liệu

chung thì không gì tốt hơn là triển khai các ứng dụng đó trên một cơ sở dữ liệu sở dữ

liệu hợp nhất cho phép quản lý tập trung tất cả dữ liệu xí nghiệp.

                                                7

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Các chương trình ứng dụng                                                          Người sử dụng trực tuyến

Hình 1.1. Cơ sở dữ liệu hợp nhất

Trên hình vẽ 1.1, chúng ta nhìn thấy thành phần cơ sở dữ liệu hợp nhất là một

bộ sưu tập các dữ liệu chứa trên các phương tiện lưu trữ như đĩa từ hay băng

từ...Những người sử dụng trực tuyến hay các chương trình ứng dụng có thể sử dụng

chung hay chia sẽ cơ sở dữ liệu này.

Có thể thực hiện các thao tác tìm kiếm, sửa đổi, bổ sung...

Như vậy, có thể định nghĩa: Cơ sở dữ liệu là một bộ sưu tập các dữ liệu tác

nghiệp được lưu trữ lại và được các hệ ứng dụng của một cơ quan cụ thể nào đó sử

dụng.

Như thế, có thể định nghĩa hệ cơ sở dữ liệu là một hệ thống gồm 4 thành phần:

Cơ sở dữ liệu hợp nhất: Cơ sở dữ liệu của hệ có 2 tính chất tối thiểu hoá dư

thừa và được chia sẻ.

Người sử dụng: Bao gồm những người truy cập vào cơ sở dữ liệu, những

người viết các chương trình ứng dụng và những người điều khiển toàn bộ hệ thống

hay còn gọi là người quản trị cơ sở dữ liệu.

Phần mềm hệ quản trị cơ sở dữ liệu.

Phần cứng.

Hệ quản trị cơ sở dữ liệu là gì?

Hệ quản trị cơ sở dữ liệu là một hệ thống phần mềm cho phép tạo lập cơ

sở dữ liệu và điều khiển mọi truy nhập đối với cơ sở dữ liệu đó.

1.2.2. Các khả năng của một hệ quản trị cơ sở dữ liệu

                                         8

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Có hai khả năng cho phép phân biệt các hệ quản trị cơ sở dữ liệu với các kiểu

hệ thống lập trình khác:

Khả năng quản dữ liệu tồn tại lâu dài.

Đặc điểm này nói lên rằng có một cơ sở dữ liệu tồn tại trong một thời gian dài,

nội dung cơ sở dữ liệu này là các dữ liệu mà một hệ quản trị cơ sở dữ liệu truy nhập

và quản lý.

Khả năng truy nhập các khối lượng dữ liệu lớn một cách hiệu quả.

Đặc điểm này phân biệt một hệ quản trị với một hệ thống xử lý file cũng quản

lý dữ liệu tồn tại lâu dài nhưng nói chung không cung cấp các truy nhập nhanh chóng

đến các bộ phận dữ liệu tuỳ ý.

Ngoài ra, khi xem xét đặc điểm của hệ quản trị cơ sở dữ liệu còn có một số khả

năng khác mà có thể thấy hầu hết trong các hệ quản trị cơ sở dữ liệu thương mại:

Hỗ trợ ít nhất một mô hình dữ liệu hay một sự trừu tượng toán học mà qua

đó người sử dụng có thể quan sát dữ liệu.

Đảm bảo tính độc lập dữ liệu.

Hỗ trợ các ngôn ngữ cấp cao nhất định cho phép người sử dụng định nghĩa

cấu trúc của dữ liệu, truy nhập dữ liệu và thao tác dữ liêu.

Quản trị giao dịch, có nghĩa là cung cấp các truy nhập đồng thời, đúng đsn

đối với cơ sở dữ liệu từ nhiều người sử dụng tại một thời điểm.

Điều khiển truy cập, có nghĩa là khả năng hạn chế truy cập đến các dữ liệu

bởi những người sử dụng không được cấp phép và khả năng kiểm tra tính đúng đsn

của dữ liệu.

Phục hồi dữ liệu, có nghĩa là khả năng phục hồi, không làm mất mát dữ liệu

đối với các lỗi hệ thống.

a . Sự trừu tượng hoá dữ liệu.

Để cho hệ thống có thể sử dụng được, nó phải tra cứu hay tìm kiếm dữ liệu

một cách hiệu quả. Điều này den đến việc thiết kế các cấu trúc dữ liệu phức tạp để

biểu dixn dữ liệu trong cơ sở dữ liệu này. Do nhiều người truy nhập vào các hệ cơ sở

dữ liệu không được đào tạo về máy tính, người phát triển phải che dấu tính phức tạp

đối với những người sử dụng thông qua một số mức trừu tượng để dơn giản hoá các

tương tác của người sử dụng đối với hệ thống.

                                             9

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Mức vật lý: Mức thấp nhất của sự trừu tượng mô tả dữ liệu được lưu trữ một

cách thực sự như thế nào? Tại mức vậy lý, các cấu trúc dữ liệu mức thấp phức tạp

được mô tả chi tiết.

Mức logic:Mức cao hơn tiếp theo của sự trừu tượng mô tả những dữ liệu nào

được lưu trữ trong cơ sở dữ liệu và các mối quan hệ nào tồn tại giữa các dữ liệu này.

Mức logic của sự trừu tượng được xác định bởi người quản trị cơ sở dữ liệu, cụ thể

phải quyết định những thông tin gì được lưu trữ trong cơ sở dữ liệu.

Mức khung nhìn: Mức cao nhất của sự trừu tượng mô tả chỉ một phần của toàn

bộ cơ sở dữ liệu. Mặc dù sử dụng các cấu trúc đơn giản hơn mức logic, một số phức

tạp ven còn tồn tại do kích thước lớn của cơ sở dữ liệu. Nhiều người sử dụng của hệ

cơ sở dữ liệu không quan tâm đến tất cả những thông tin này. Thực chất, những người

sử dụng này chỉ cần truy nhập một phần cơ sở dữ liệu. Do vậy sự tương tác của họ với

hệ thống này được đơn giản hoá và mức khung nhìn của sự trừu tượng được xác định.

Hệ thống có thể cung cấp nhiều khung nhìn đối với cùng một cơ sở dữ liệu..

Mối quan hệ giữa 3 mức trừu tượng được minh hoạ trong hình 2.

Khung nhìn 1                                                                            Mức khung nhìn             Khung nhìn n

Mức Vật lý

Mức Logic

Hình 1.2. Ba mức trừu tượng dữ liệu

Sự tương tự đối với khái niệm các kiểu dữ liệu trong các ngôn ngữ lập trình có thể

làm sáng tf sự phân biệt giữa các mức trừu tượng.

Ví dụ 1.7 Trong ngôn ngữ lập trình Pascal chúng ta khai báo một bản ghi như sau:

Type  Khachhang=record

Hoten:String;

The_BH:String;

T_Pho:String;

Duong_pho:String;

End;

                                              10

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Đoạn mã này định nghĩa một kiểu bản ghi Khachhang với 4 trường. Mỗi

trường có một kiểu dữ liệu. Một Ngân hàng tiết kiệm có thể có một bản ghi như vậy,

chẳng hạn như sau:

Taikhoan(tài khoản) với các trường So_taikhoan và Doi_ung.

Nhanvien (Nhân viên) với các trường Hotennvien và Luong.

Tại mức vật lý, một bản ghi Khachhang, Taikhoan hay Nhanvien có thể được

mô tả như một khối nhớ. Chương trình dịch ngôn ngữ này che dấu các mức chi tiết

này đối với người lập trình. Tương tự, các hệ cơ sở dữ liệu che dấu nhiều chi tiết lưu

trữ thấp nhất đối với người lập trình ứng dụng. Người quản trị cơ sở dữ liệu có thể

biết những chi tiết nhất định về tổ chức dữ liệu vật lý. Tại mức logic, mỗi bản ghi như

vậy được mô tả bởi định nghĩa kiểu như được minh họa trong đoạn mã trên và mối

quan hệ giữa các kiểu bản ghi này được xác định. Những người lập trình cũng như

người quản trị thường làm việc tại mức trừu tượng này.

Mức khung nhìn, những người sử dụng máy tính nhìn thấy một tập các chương

trình ứng dụng mà che dấu những chi tiết về các kiểu dữ liệu. Tương tự, tại mức

khung nhìn, một số khung nhìn của cơ sở dữ liệu được xác định và những người sử

dụng cơ sở dữ liệu nhìn thấy các khung nhìn này. Ngoài sự che dấu những chi tiết của

mức logic đối với cơ sở dữ liệu này, các khung nhìn cũng cung cấp một cơ sở dữ liệu

chế an toàn để ngăn chặn những người sử dụng khfi sự truy nhập các bộ phận dữ liệu.

Ví dụ 1.8. Một khách hàng của một Ngân hàng chỉ nhìn thấy một phần cơ sở dữ liệu

chứa thông tin về tài khoản của anh ta và anh ta không thể truy nhập đến các thông tin

liên quan đến lương của các nhân viên Ngân hàng.

Các thể hiện và các sơ đồ

Các cơ sở dữ liệu thay đổi theo thời gian khi thông tin được thêm vào hay xóa

đi. Tập hợp các thông tin được lưu trữ trong cơ sở dữ liệu tại một thời điểm đặc biệt

gọi là một thể hiện của cơ sở dữ liệu sở dữ liệu. Một thiết kế tổng thể của cơ sở dữ

liệu gọi là sơ đồ cơ sở dữ liệu. Các sơ đồ ít khi bị thay đổi, thậm chí không thay đổi.

Tính độc lập dữ liệu

Khả năng thay đổi một định nghĩa sơ đồ trong một mức mà không ảnh hưởng

đến định nghĩa sở đồ trong mức cao hơn tiếp theo gọi là tính độc lập dữ liệu. Có hai

mức độc lập dữ liệu.

                                                11

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Độc lập dữ liệu ở mức vật lý là khả năng thay đổi sơ đồ vật lý mà không den

đến các chương trình ứng dụng phải viết lại. Các thay đổi ở mức vật lý đôi khi là cần

thiết để tăng hiệu năng hệ thống.

Độc lập dữ liệu ở mức logic là khả năng thay đổi sơ đồ logic mà không den

đến các chương trình ứng dụng phải viết lại. Các thay đổi tại mức logic là cần thiết

bất kể khi nào cấu trúc logic của cơ sở dữ liệu bị sửa đổi. Chẳng hạn như khi các tài

khoản được thêm vào hệ thống Ngân hàng.

Độc lập dữ liệu mức logic là khó đạt được hơn so với độc lập dữ liệu mức vật

lý do các chương trình ứng dụng phụ thuộc nhiều vào cấu trúc logic của dữ liệu mà họ

đang truy nhập.

b. Các ngôn ngữ cơ sở dữ liệu

Một hệ cơ sở dữ liệu cung cấp hai kiểu ngôn ngữ khác nhau: Một ngôn ngữ đặc

tả sơ đồ cơ sở dữ liệu và một ngôn ngữ biểu dixn các truy vấn và các cập nhật dữ liệu.

Ngôn ngữ định nghĩa dữ liệu (Data Definition Language-DDL)

Một sơ đồ cơ sở dữ liệu đặc tả bởi một tập các định nghĩa được biểu dixn bởi một

ngôn ngữ đặc biệt gọi là ngôn ngữ định nghĩa dữ liệu. Kết quả việc dịch các lệnh của

ngôn ngữ này là một tập các bảng được lưu trữ trong một file đặc biệt gọi là từ điển

dữ liệu ha thư mục dữ liệu.

Ngôn ngữ thao tác dữ liệu (Data Manipulation Language-DML)

Các mức trừu tượng mà chúng ta đã thảo luận trong phần trước không chỉ áp

dụng đối với định nghĩa và cấu trúc dữ liệu mà đối với cả thao tác dữ liệu. Các yêu

cầu thao tác dữ liệu bao gồm:

Tìm kiếm thông tin được lưu trữ trong cơ sở dữ liệu.

Thêm thông tin mới vào cơ sở dữ liệu.

Xóa thông tin từ cơ sở dữ liệu sở dữ liệu.

Thay đổi thông tin được lưu trữ trong cơ sở dữ liệu.

Một ngôn ngữ thao tác dữ liệu là một ngôn ngữ cho phép những người sử dụng

truy nhập hay thao tác dữ liệu được tổ chức bởi một mô hình dữ liệu thích hợp. Có hai

kiểu ngôn ngữ thao tác dữ liệu cơ sở dữ liệu bản.

Các DML thủ tục đòi hfi một người sử dụng phải đặc tả dữ liệu nào cần tìm

kiếm và tìm kiếm những dữ liệu này như thế nào?

Các DML phi thủ tục đòi hfi một người sử dụng phải đặc tả dữ liệu nào cần

tìm kiếm và tìm kiếm mà không phải đặc tả những dữ liệu này như thế nào?

                                               12

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

c. Xử lý câu hỏi

Công việc của bộ  xử lý câu hfi là biến đổi một truy vấn hay một thao tác cơ sở

dữ liệu được biểu dixn tại một mức rất cao (Ví dụ như biểu dixn bởi một DML nào

đó) thành một dãy các yêu cầu đối với các dữ liệu được lưu trữ trong cơ sở dữ liệu.

Thường phần khó nhất của nhiệm vụ xử lý câu hfi là tối ưu hóa câu hfi, có nghĩa là

lựa chọn một kế hoạch thực hiện tốt nhất hay lựa chọn một dãy các yêu cầu đối với hệ

thống lưu trữ để trả lời truy vấn này nhanh nhất. Các truy vấn phức tạp thường cho

phép chúng ta ssp xếp lại trình tự các phép toán và có thể có một số lớn các kế hoạch

thực hiện có thể.

d. Quản trị giao dịch

Các hệ cơ sở dữ liệu cho phép người sử dụng nhóm một hay nhiều thao tác tra

cứu hay thay đổi cơ sở dữ liệu thành một giao dịch.

Một giao dịch là tập hợp các thao tác mà được xử lý như một đơn vị không

chia cst được. Thông thường, một số thao tác trên cơ sở dữ liệu tạo thành một đơn vị

logic công việc. Ta hãy xét   ví   dụ   chuyển   khoản,   trong đó một số tiền x được

chuyển từ  tài khoản A (A:=A-x ) sang  một tài khoản B ( B:=B+x ).  Một yếu tố cần

thiết là cả hai thao tác này hoặc cùng xảy ra hoặc không hoạt động  nào xảy ra cả.

Việc chuyển khoản phải xảy ra trong tính toàn thể của nó hoặc không. Đòi hfi  toàn

thể-hoặc-không này được gọi là tính nguyên tử. Một yếu tố  cần thiết khác là sự thực

hiện việc chuyển khoản bảo tồn tính nhất quán của cơ sở dữ liệu: giá trị của tổng A +

B phải được bảo tồn.  Đòi  hfi  về  tính  chính  xác  này được  gọi  là  tính  nhất  quán.

Cuối cùng, sau khi thực hiện thành công hoạt động chuyển khoản, các giá trị của

account A và B phải bền vững  cho  dù có thể có sự cố của hệ thống. Đòi  hfi  về

tính  bền vững này được gọi là tính lâu bền. Sự đảm bảo tính chất này là trách nhiệm

của thành phần quản trị giao dịch. Nếu không có sự cố, tất cả giao dịch hoàn tất thành

công và tính nguyên tử được hoàn thành dx dàng. Tuy nhiên, do các sự cố, một giao

dịch có thể không hoàn tất thành công sự thực hiện của nó. Nếu tính nguyên tử được

đảm bảo, một giao dịch thất bại không gây hiệu quả đến trạng thái  của cơ sở dữ liệu.

Như vậy, cơ sở dữ liệu phải được hoàn lại trạng thái của nó trước khi giao dịch bst

đầu. Hệ cơ sở dữ liệu phải có trách nhiệm phát hiện sự cố hệ thống và trả lại  cơ sở

dữ  liệu về trạng thái  trước khi xảy ra sự cố.

Khi một số giao dịch cạnh tranh cập nhật cơ sở dữ liệu,  tính  nhất  quán  của

dữ liệu có thể không  được  bảo  tồn,    ngay cả khi mỗi  giao  dịch  là  chính  xác. Bộ

điều khiển cạnh tranh có trách nhiệm điều khiển các trao đổi giữa các giao dịch cạnh

tranh để đảm bảo tính thống nhất của CSDL.

Thường một hệ cơ sở dữ liệu cho phép nhiều giao dịch thực hiện đồng thời.

e. Quản lý lưu trữ

                                                   13

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Các cơ sở dữ liệu thường đòi hfi một khối lượng lớn không gian lưu trữ. Các

cơ sở dữ liệu hợp nhất thường được đo trong thuật ngữ gigatytes hay với các cơ sở dữ

liệu lớn là terabytes. Do bộ nhớ chính của máy tính không thể lưu trữ nhiều thông tin

như vậy, các thông tin này được lưu trữ trên các thiết bị nhớ ngoài.

Bộ quản lý lưu trữ là một Môđun chương trình cung cấp giao diện giữa các dữ

liệu được lưu trữ trong cơ sở dữ liệu mức thấp và các chương trình ứng dụng hay các

truy vấn được đệ trình với hệ thống. Bộ quản lý lưu trữ có trách nhiệm tương tác với

bộ quản lý file. Dữ liệu thô được lưu trữ trên đĩa từ sử dụng hệ thống xử lý file thường

được cung cấp bởi một hệ điều hành nào đó. Bộ quản lý lưu trữ dịch các lệnh của

ngôn ngữ DML khác nhau thành các lệnh hệ thống xử lý file ở mức thấp nhất. Do

vậy, bộ quản lý lưu trữ có trách nhiệm lưu trữ, tìm kiếm và cập nhật dữ liệu trong cơ

sở dữ liệu này.

1.2.3. Kiến trúc của một hệ quản trị cơ sở dữ liệu

Hình 1.3 chỉ ra các thành phần chủ yếu của một hệ quản trị cơ sở dữ liệu. Tại

đáy của kiến trúc, chúng ta nhìn thấy một sự biểu dixn của thiết bị nhớ ngoài lưu trữ

các dữ liệu và siêu dữ liệu. Chú ý rằng thành phần này chứa không chỉ các dữ liệu

được lưu trữ trong cơ sở dữ liệu mà cả các siêu dữ liệu, tức là các thông tin về cấu

trúc của cơ sở dữ liệu.

Các thay đổi sơ đồ                                                                         Các truy vấn               Các thay đổi dữ liệu

Bộ xử lý câu hfi

Bộ quản trị giao

dịch

Bộ quản lý lưu trữ

Dữ liệu

Siêu dữ liệu

Hình 1.3. Các thành phần chính của một hệ quản trị cơ sở dữ liệu

                                                 14

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Ví dụ 1.9. Nếu một hệ quản trị cơ sở dữ liệu là  hệ quản trị cơ sở dữ liệu quan hệ, các

siêu dữ liêu bao gồm tên các quan hệ, tên các thuộc tính của các quan hệ và các kiểu

dữ liệu đối với các thuộc tính này.

Trong hình 1.3, chúng ta thấy một bộ quản lý lưu trữ mà nhiệm vụ của nó là

lấy ra các thông tin được yêu cầu từ những thiết bị lưu trữ dữ liệu và thay đổi những

thông tin này khi được yêu cầu bởi các mức trên nó của hệ thống. Bộ xử lý câu hfi

điều khiển không chỉ các câu hfi mà cả các yêu cầu thay đổi dữ liệu hay siêu dữ liệu.

Nhiệm vụ của nó là tìm ra một cách tốt nhất một thao tác được yêu cầu và phát ra các

lệnh đối với bộ phận quản lý lưu trữ để thực thi thao tác đó.

Thành phần bộ quản trị giao dịch có trách nhiệm đảm bảo tính toàn vkn của hệ

thống này. Nó phải đảm bảo rằng một số thao tác thực hiện đồng thời không cản trở

mỗi thao tác khác và hệ thống sẽ không mất dữ liệu thậm chí khi lỗi hệ thống xảy ra.

Nó tương tác với bộ xử lý câu hfi, do vậy nó phải biết dữ liệu nào được thao tác bởi

các thao tác hiện thời để tránh sự đụng độ các hành động và nó có thể cần thiết làm trx

một số truy vấn nhất định hay một số thao tác để các đụng độ này không xảy ra. Nó

tương tác với bộ phận quản lý lưu trữ bởi vì các sơ đồ đối với việc bảo vệ dữ liệu

thường kéo theo việc lưu trữ một nhật ký các thay đổi đối với dữ liệu. Bởi việc ssp

thứ tự các thao tác một cách thực sự, nhật ký sẽ chứa một bản ghi đối với mỗi thay đổi

để sau khi gặp lỗi hệ thống, các thay đổi chưa được ghi vào đĩa có thể được thực hiện

lại.

Tại đỉnh kiến trúc, chúng ta nhìn thấy ba kiểu thao tác đối với hệ quản trị cơ sở

dữ liệu này.

Các truy vấn: Đây là các thao tác hfi đáp về dữ liệu được lưu trữ trong cơ sở

dữ liệu. Chúng được sinh ra theo hai cách khác nhau:

Thông qua một giao diện truy vấn chung. Ví dụ, một hệ quản trị cơ sở dữ

liệu quan hệ cho phép người sử dụng đánh các truy vấn SQL mà nó được chuyển qua

bộ xử lý câu hfi và được trả lời.

Thông qua các giao diện chương trình ứng dụng. Một hệ quản trị cơ sở dữ

liệu điển hình cho phép những người lập trình viết các chương trình ứng dụng gọi đến

hệ quản trị cơ sở dữ liệu này và truy vấn cơ sở dữ liệu. Các truy vấn được đệ trình

thông qua một giao diện đặc biệt có thể chứ các hộp đối thoại. Một người sử dụng

không thể hfi các câu hfi tùy ý thông qua giao diện này, nhưng nói chung sẽ dx dàng

                                                15

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

hơn đối với người sử dụng khi hfi một câu hfi thích hợp thông qua giao diện này so

với việc phải viết một truy vấn trực tiếp bởi SQL.

Các cập nhật dữ liệu. Đây là các thao tác thay đổi dữ liệu, ví dụ thêm, xóa, sửa

đổi dữ liệu trong cơ sở dữ liệu. Giống như các truy vấn, chúng có thể được phát ra

hoặc thông qua một giao diện chung hoặc thông qua giao diện của một chương trình

ứng dụng.

Các thay đổi sơ đồ. Các lệnh này thường được phát ra bởi một người sử dụng

được cấp phép, thường là những người quản trị cơ sở dữ liệu mới được phép thay đổi

sơ đồ của cơ sở dữ liệu hay tạo lập một cơ sở dữ liệu mới.

1.2.4. Người quản trị cơ sở dữ liệu

Một trong những lý do chính đối với việc sử dụng các hệ quản trị cơ sở dữ liệu

là có một sự điều khiển tập trung cả dữ liệu và các chương trình truy nhập dữ liệu này.

Một con người có trách nhiệm điều khiển một cách tập trung toàn bộ hệ thống được

gọi là người quản trị cơ sở dữ liệu. Các nhiệm vụ của người quản trị cơ sở dữ liệu này

bao gồm:

Định nghĩa sơ đồ

Người quản trị cơ sở dữ liệu tạo lập các sơ đồ cơ sở dữ liệu gốc bằng cách viết

một tập các định nghĩa môt tả các cấu trúc dữ liệu mà chúng được dịch bởi bộ dịc

DDL thành một tập các bảng được lưu trữ một cách lâu dài trong từ điển dữ liệu.

Xác định cấu trúc lưu trữ và phương pháp truy nhập

Người quản trị cơ sở dữ liệu tạo lập các cấu trúc lưu trữ và phương pháp truy

nhập thích hợp bằng cách viết một tập các định nghĩa mà chúng được dịch bởi bộ dịch

ngôn ngữ định nghĩa dữ liệu và lưu trữ dữ liệu.

Tuyên bố ủy quyền và truy nhập dữ liệu

Việc tuyên bố các kiểu ủy quyền khác nhau cho phép người quản trị cơ sở dữ

liệu qui định những bộ phận nào của cơ sở dữ liệu những người sử dụng khác nhau có

thể truy nhập. Những thông tin ủy quyền này được cất giữ trong một cấu trúc hệ thống

đặc biệt mà có thể được tra cứu bởi hệ cơ sở dữ liệu bất cứ khi nào một truy nhập dữ

liệu định đi vào hệ thống.

Đặc tả các ràng buộc toàn vẹn

Các giá trị dữ liệu được lưu trữ trong cơ sở dữ liệu thường phải thfa mãn

những ràng buộc toàn vkn nhất định. Ví dụ, chẳng hạn số giờ làm việc của một nhân

                                                16

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

viên trong một tuần không được vượt quá 80giờ. Một ràng buộc như vậy phải được

đặc tả một cách tường minh bởi người quản trị cơ sở dữ liệu. Các ràng buộc toàn vkn

này được cất giữ trong một cấu trúc hệ thống đặc biệt mà có thể được tra cứu bởi hệ

cơ sở dữ liệu bất cứ khi nào một cập nhật dữ liệu xảy ra trong hệ thống.

1.2.5.  Người sử dụng cơ sở dữ liệu

Mục đích chính của một hệ cơ sở dữ liệu là cung cấp một môi trường đối với

tìm kiếm thông tin từ cơ sở dữ liệu và lưu trữ những thông tin mới vào cơ sở dữ liệu.

Có ba nhóm người sử dụng khác nhau được phân biệt bởi cách họ mong muốn tương

tác với hệ thống.

Người lập trình ứng dụng

Đây là những người chuyên nghiệp về máy tính tương tác với hệ thống thông

qua các lời gọi DML mà được nhúng trong một chương trình được viết bởi ngôn ngữ

chủ. Các chương trình này được gọi chugn là các chương trình ứng dụng.

Do cú pháp của DML thường được biểu thị khác với cú pháp của ngôn ngữ

chủ, các lời gọi DML thường được bst đầu bằng một ký hiệu đặc biệt sao cho đoạn

mã tương ứng có thể được sản sinh. Một bộ tiền xử lý đặc biệt gọi là bộ tiền dịch

DML, biến đổi các chỉ thị DML thành các lời gọi thủ tục chu n trong ngôn ngữ chủ.

Chương trình kết quả sau đó được chạy thông qua chương trình dịch ngôn ngữ chủ mà

nó sinh ra đoạn mã đích tương ứng.

Người phân tích dữ liệu

Đây là những người sử dụng tương tác với hệ thống không thông qua các chương

trình ứng dụng. Thực chất họ phát biểu các yêu cầu của họ bởi một ngôn ngữ truy vấn

dữ liệu. Mỗi truy vấn như vậy được đệ trình đối với bộ xử lý câu hfi mà nhiệm vụ của

nó là phân tách chỉ thị DML thành các lệnh mà bộ quản lý lưu trữ có thể hiểu được.

Các nhà phân tích đệ trình các truy vấn để khai thác dữ liệu được xếp vào nhóm người

sử dụng này.

Người sử dụng đầu cuối

Đây là những người sử dụng bình thường tương tác với hệ thống bởi việc thực

hiện một trong các chương trình ứng dụng có sgn được viết từ trước.

1.3.  Sự phân loại các hệ cơ sở dữ liệu

Trong thực tế, tuỳ theo qui mô để người sử dụng có thể phát triển một hệ cơ sở

dữ liệu nhf hoặc lớn.

                                              17

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Có hai loại kiến trúc hệ cơ sở dữ liệu: tập trung và phân tán.

1.3.1. Các hệ cơ sở dữ liệu tập trung

Với một hệ cơ sở dữ liệu tập trung, tập tất cả các dữ liệu được định vị tại một

trạm đơn lẻ. Những người sử dụng tại các trạm từ xa nói chung có thể truy nhập cơ sở

dữ liệu thông qua các công cụ truyền thông dữ liệu.

a. Hệ cơ sở dữ liệu cá nhân

Các hệ cơ sở dữ liệu cá nhân thường một người sử dụng đơn lẻ mà họ vừa thiết

kế và tạo lập cơ sở dữ liệu, vừa cập nhật cơ sở dữ liệu và bảo trì cơ sở dữ liệu. Nói

cách khác, họ là vừa người quản trị cơ sở dữ liệu đồng thời là người viết chương

trình, đồng thời cũng là người sử dụng cuối của hệ.

Cơ sở dữ liệu

Hình 1.4. Hệ cơ sở dữ liệu cá nhân

b. Hệ cơ sở dữ liệu sở dữ liệu trung tâm

 

Cơ sở dữ liệu

 

 

Hình 1.5. Hệ cơ sở dữ liệu trung tâm

                                              18

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Trong các tổ chức lớn, dữ liệu mà hầu hết các ứng dụng có thể truy nhập được lưu trữ

trên một máy tính trung tâm. Trong nhiều hệ thống, những người sử dụng từ xa có thể

truy nhập cơ sở dữ liệu này thông qua các thiết bị đầu cuối và các móc nối truyền dữ

liệu. Tuỳ thuộc vào qui mô tổ chức, máy tính trung tâm này thường là một dàn hay

một máy vi tính. Các hệ cơ sở dữ liệu trung tâm thường lưu trữ các cơ sở dữ liệu tích

hợp rất lớn và được nhiều người sử dụng truy nhập. Các ứng dụng điển hình như hệ

thống bán vé máy bay, hệ thống tàu hoả...

c. Hệ cơ sở dữ liệu khách/chủ

Một kiến trúc khách/chủ được thiết kế với sự phân tải công việc trên một mạng

máy tính trong đó các máy khách có thể chia sẽ các dịch vụ của một máy chủ đơn lẻ.

Một máy chủ là một ứng dụng phần mềm cung cấp các dịch vụ quản lý  file hay cơ sở

dữ liệu, quản lý truyền thông....đối với các máy khách đang yêu cầu. Một máy khách

là một ứng dụng phần mềm yêu cầu các dịch vụ từ một hay nhiều máy chủ. Thông

thường, ứng dụng máy chủ (máy chủ cơ sở dữ liệu ) được định vị trên một máy tính

riêng trong mạng cục bộ.

Mục đích chính của một kiến trúc khách/chủ là cho phép các ứng dụng máy

khách truy nhập dữ liệu được quản lý bởi máy chủ. Giao diện người sử dụng và logic

của ứng dụng kinh doanh được xử lý trên máy khách, trong khi sử lý cơ sở dữ liệu

được thực hiện trên máy chủ cơ sở dữ liệu.

Cơ sở dữ liệu

                                                                                      Mạng cục bộ                                  

                                                                                       

                                                                                                                                     Hình 1.6. Hệ cơ sở dữ liệu khách/chủ

                                                                                                       19

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

1.3.2. Các hệ cơ sở dữ liệu phân tán

Ngày nay, nhiều tổ chức phân bố trên nhiều vị trí địa lý khác nhau như các

thành phố khác nhau hay các quốc gia khác nhau. Trong những trường hợp như vậy,

việc xây dựng các hệ cơ sở dữ liệu tập trung đối với các tổ chức này thường là không

thực tế và không kinh tế.

Một cơ sở dữ liệu phân tán là một cơ sở dữ liệu logic đơn lẻ mà được trải ra về

mặt vật lý trên nhiều máy tính ở nhiều vị trí địa lý khác nhau. Có hai kiểu chung nhất

của các hệ cơ sở dữ liệu phân tán là: hệ cơ sở dữ liệu phân tán thuần nhất và hệ cơ sở

dữ liệu phân tán không thuần nhất.

Hình 1.7. Các hệ cơ sở dữ liệu phân tán

                                               20

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

a. Hệ cơ sở dữ liệu phân tán thuần nhất

Khi áp dụng đối với các hệ cơ sở dữ liệu, thuật ngữ thuần nhất có nghĩa là công

nghệ cơ sở dữ liệu là như nhau (hay ít nhất có thể tương thích) tại mỗi vị trí địa lý

khác nhau cũng có thể tương thích.

Trong hình trên, cơ sở dữ liệu của hệ được phân tán trên ba nút (hay ba vị trí

địa lý). Đối với các hệ cơ sở dữ liệu phân tán thuần nhất này, các điều kiện sau đây có

thể tồn tại:

Các hệ điều hành máy tính tại mỗi vị trí địa lý là như nhau hay ít nhất chúng

có khả năng tương thích cao.

Các mô hình dữ liệu được sử dụng tại mỗi vị trí địa lý là như nhau.

Các hệ quản trị cơ sở dữ liệu được sử dụng tại mỗi vị trí địa lý là như nhau

hay ít nhất chúng có khả năng tương thích cao.

Dữ liệu tại các vị trí khác nhau có các định nghĩa và khuôn dạng chung.

Các hệ cơ sở dữ liệu phân tán thuần nhất đơn giản hoá việc chia sẻ dữ liệu giữa những

người sử dụng khác nhau.

b. Hệ cơ sở dữ liệu phân tán không thuần nhất

Trong hầu hết các tổ chức, các hệ cơ sở dữ liệu liên quan đến một chu kỳ dài

không được chỉ đạo và lập kế hoạch c n thận. Các máy tính  khác nhau và các hệ điều

hành khác nhau có thể được sử dụng tại mỗi vị trí địa lý. Các mô hình dữ liệu khác

nhau và các hệ quản tri cơ sở dữ liệu khác nhau cũng có thể được lựa chọn sử dụng.

Ví dụ, một vị trí có thể sử dụng công nghệ cơ sở dữ liệu quan hệ mới nhất, trong khi

một vị trí khác có thể lưu trữ dữ liệu sử dụng các file truyền thống hay các cơ sở dữ

liệu mạng, phân cấp cũ hơn.

Phức tạp hơn nữa, dữ liệu trên các vị trí thường không tương thích. Các mâu

thuen điển hình bao gồm các khác biệt về cú pháp (sự biểu dixn khác nhau của các

khoản mục dữ liệu tại hai vị trí) và các khác biệt về ngữ nghĩa.

                                                21

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Câu hỏi

1. Nêu và phân tích các điểm khác nhau chính giữa một hệ thống xử lý file và một hệ

quản trị CSDL là gì ?

2. Liệt kê các nhiệm vụ của nhà quản trị CSDL. Đối với mỗi nhiệm vụ, giải thích rõ

những vấn đề nảy sinh nếu nhiệm vụ đó không được hoàn thành.

3. Sử dụng một mảng hai chiều kích c‚ n x m như một ví dụ để minh hoạ sự khác

nhau:

a. Giữa ba mức trừu tượng dữ liệu

b. Giữa sơ đồ và thể hiện

4. Trong các hệ thống client-server tiêu biểu, máy server thường mạnh hơn máy client

rất nhiều: Có bộ xử lý nhanh hơn thậm chí có thể có nhiều bộ xử lý, có bộ nhớ lớn

hơn, có dung lượng đĩa lớn hơn.  Ta xét một kịch bản trong đó các máy client và các

máy server là mạnh như nhau. Xây dựng một hệ thống client-server theo kịch bản như

vậy có ưu nhược điểm gì ? Kịch bản nào phù hợp hơn với kiến trúc server dữ liệu ?

                                             22

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Chương 2

CÁC MÔ HÌNH DỮ LIỆU

Quá trình thiết kế một cơ sở dữ liệu bắt đầu với một sự phân tích những thông

tin nào của thế giới thực cơ sở dữ liệu phải lưu trữ và các mối quan hệ giữa các thành

phần của những thông tin này. Thông thường cấu trúc cơ sở dữ liệu hay còn gọi là sơ

đồ cơ sở dữ liệu được đặc tả bởi một ngôn ngữ đặc biệt hay một tập các ký hiệu thích

hợp để biểu thị một thiết kế cơ sở dữ liệu. Mô hình dữ liệu là một hình thức toán học

với một tập các ký hiệu được mô tả dữ liệu và một tập các phép toán được sử dụng để

thao tác dữ liệu này. Có nhiều loại mô hình dữ liệu như: mô hình mối quan hệ thực

thể (Entity Relationship Model), mô hình quan hệ (Relational Model), mô hình mạng

(Network Model),…tuy nhiên không thể nói mô hình nào là tốt nhất cho các hệ thống

cơ sở dữ liệu mà tuỳ theo đặc thù của các loại dữ liệu, tuỳ theo yêu cầu của các phép

xử lý mà chúng ta có thể chọn mô hình cơ sở dữ liệu thích hợp.

2.1. Mô hình thực thể liên kết

Mô hình thực thể liên kết (Mô hình ER) dựa trên cơ sở nhận thức của thế giới

thực bao gồm tập các đối tượng cơ sở được gọi là các thực thể và một tập các liên kết

giữa các đối tượng này. Mô hình dữ liệu ER là một trong các mô hình dữ liệu ngữ

nghĩa. Khía cạnh ngữ nghĩa của mô hình ở chổ cố gắng biểu diễn các ngữ nghĩa của

dữ liệu trong thế giới thực.

2.1.1. Các khái niệm cơ sở

Có 3 ký hiệu cơ bản mà mô hình thực thể liên kết sử dụng: Các tập thực thể,

các tập liên kết và các thuộc tính.

a. Các tập thực thể.

Một thực thể là một đối tượng cụ thể hay trừu tượng trong thế giới thực mà nó

tồn tại và có thể phân biệt được với các đối tượng khác. Chẳng hạn như một sinh viên

trong một lớp học là một thực thể. Một nhóm các thực thể giống nhau tạo thành một

tập thực thể. Ví dụ như tập thực thể sinh viên.

b. Các thuộc tính và khoá

Các tập thực thể có các đặc tính được gọi là các thuộc tính. Mỗi thuộc tính có

một miền giá trị.

                                               23

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Việc lựa chọn các thuộc tính thích đáng đối với các tập thực thể là một bước

quan trọng trong việc thiết kế sơ đồ cơ sở dữ liệu khái niệm.

Mỗi thuộc tính hay một tập các thuộc tính mà giá trị của nó xác định duy nhất

mỗi thực thể trong tập thực thể được gọi là khoá đối với tập thực thể này. Về nguyên

tắc, mỗi tập thực thể có một khoá do chúng ta giả định rằng mỗi thực thể là phân biệt

với các thực thể khác.

Ví dụ 2.1. Tập thực thể sinh viên trong một trường Đại học, khi đó có thể sử dụng

MASV (mã số sinh viên) là một khoá.

c. Các liên kết

Một liên kết là một sự kết hợp giữa một số thực thể. Chẳng hạn, có thể xác

định một liên kết mà nó kết hợp một sinh viên A với một lớp B. Liên kết này nói rằng

sinh viên A là một thành viên của lớp B. Một tập liên kết là một tập các liên kết cùng

kiểu.

Một cách hình thức, một liên kết giữa các tập thực thể là một danh sách có thứ

tự các tập thực thể, một tập thực thể có thể xuất hiện nhiều hơn một lần trong danh

sách.

Nếu có một liên kết R giữa các tập thực thể E1, E2, …Ek thì một thể hiện của R

là một tập các k-bộ. Chúng ta gọi một tập như vậy là tập các liên kết. Mỗi k-bộ (e1, e2,

..ek) trong tập liên kết R với ei là một thể hiện Ei là một thể hiện của R.

d. Các phân cấp “is-a”

Chúng ta nói A là-một B, nếu tập thực thể B thực sự là tổng quát hoá của tập

thực thể A, hay nói một cách khác A là một kiểu đặc biệt của B. Mục đích của các

liên kết “là-một” giữa các tập thực thể A và B là như vậy A có thể kế thừa các thuộc

tính của B, nhưng A cũng có thể bổ sung thêm một số thuộc tính riêng mà B không

có.

Ví dụ 2.2. Một trường Đại học có tập thực thể Sinh viên với các thuộc tính như Mã

sinh viên, Tên sinh viên, quê quán. Nếu chúng ta xét tập thực thể sinh viên Khoa CNT

trong tập thực thể Sinh viên trên thì những sinh viên này có thêm các thuộc tính Khả

năng lập trình, Thiết kế Web…… Như vậy ta nói Sinh viên CNTT “là-một” Sinh

viên.

2.1.2. Sơ đồ thực thể liên kết (sơ đồ ER)

Việc tóm tắt những thông tin cần lưu trữ trong một cơ sở dữ liệu đối với một

thiết kế sử dụng các sơ đồ ER là rất có ích. Trong sơ đồ ER, chúng ta sử dụng các ký

                                                 24

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

hiệu sau để biểu diễn các thành phần của sơ đồ:

- Các hình chữ nhật biểu diễn các tập thực thể.

- Các hình Oval biểu diễn các thuộc tính, chúng được nối đến với các tập thực

thể bởi các cạnh không định hướng. Có thể gạch chân đối với thuộc tính khoá của tập

thực thể.

- Các hình thoi biểu diễn các liên kết. Chúng được nối đến các tập thực thể bởi

các cạnh có thể định hướng hoặc không định hướng.

Ví dụ

Số ĐVHT

Mã SV

Sinh viên                                                                                                           Điểm thi

                                                                                                                               Môn học

Ngàysinh                                                                                 Họ SV                      Mã MH      Tên MH

Tên SV                                                                                   Lần                        Điểm

2.1.3. Chức năng của các liên kết

Để mô hình hoá thế giới thực một cách thích hợp, người ta cần phân loại các

liên kết phù hợp với thực tế có bao nhiêu thực thể từ một tập thực thể có thể kết hợp

với bao nhiêu thực thể của tập thực thể khác.

a. Liên kết một-một

Có nghĩa là với mỗi thực thể trong tập thực thể này có nhiều nhất mỗi thực thể

trong tập thực thể kia và ngược lại.

b. Liên kết một-nhiều

Trong liên kết một-nhiều, một thực thể trong tập thực thể E1 được kết hợp với

không hoặc nhiều thực thể trong tập thực thể E2, nhưng một thực thể trong tập thực

thể E2 liên kết với duy nhất với một thực thể trong tập thực thể E1. Liên kết này được

gọi là một-nhiều từ E1 đến E2.

Khái niệm liên kết một-nhiều có thể được tổng quát hoá thành các liên kết giữa

nhiều hơn hai tập thực thể.

c. Liên kết nhiều-nhiều

Trong liên kết nhiều-nhiều, một thực thể trong tập thực thể E1 được kết hợp với

không hoặc nhiều thực thể trong tập thực thể E2 và ngược lại một thực thể trong tập

thực thể E2 liên kết với không hoặc thực thể trong tập thực thể E1.

                                               25

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Trong khi các liên kết nhiều-nhiều xuất hiện khá thường xuyên trong thực tế,

chúng ta phải xem xét các liên kết này được biểu thị như thế nào trong sơ đồ khái

niệm của cơ sở dữ liệu thực sự. Nhiều mô hình dữ liệu không cho phép biểu thị trực

tiếp các liên kết nhiều-nhiều, thay vào đó đòi hỏi chúng phải được biến đổi thành một

số liên kết một-nhiều bởi một số kỹ thuật nào đó.

d. Xác định kiểu liên kết trong các sơ đồ ER

Nếu R là liên kết một-một giữa tập thực thể A và tập thực thể B, chúng ta vẽ

các mũi tên từ R đến cả A và B.

A                                                                                       R                          B

Nếu R là liên kết nhiều-nhiều giữa tập thực thể A và tập thực thể B, chúng ta

vẽ các cạnh không định hướng từ R đến cả A và B.

A                                                                                       R                          B

Nếu R là liên kết một-nhiều giữa tập thực thể A và tập thực thể B, chúng ta vẽ

mũi tên từ R đến A và cạnh không định hướng từ R đến B.

A                                                                                       R                          B

2.2. Mô hình dữ liệu quan hệ

2.2.1. Các khái niệm cơ bản

a. Quan hệ

Định nghĩa 2.1. Cho D1, D2, ….,Dn là n miền giá trị, r là một quan hệ trên các miền

D1, D2,….,Dn nếu r là một tập con nào đó các n-bộ được sắp có dạng (d1, d2,….dn) sao

cho di ∈Di với i = 1..n.

Dễ dàng nhận thấy theo định nghĩa, một quan hệ r trên các miền D1, D2, ….,Dn

chính là một tập con của tích Đề-các n miền đó.

Rõ ràng, một quan hệ được biểu diễn dưới dạng một bảng, mỗi dòng biểu diễn

một bộ của quan hệ.

                                              26

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Để dễ dàng tham chiếu đến các thành phần của các bộ mà không cần biết thứ

tự của thành phần trong các bộ được sắp, người ta thường đặt tên cho các thành phần.

Chúng ta gọi tên của một thành phần là một thuộc tính.

Định nghĩa 2.2. Cho U ={A1, A2,….An} là một tập hữu hạn các thuộc tính. Với mỗi

thuộc tính Ai có miền giá trị tương ứng là Dom(Ai). Khi đó, r là quan hệ xác định trên

tập thuộc tính U nếu: r ⊆ Dom(A1) × Dom(A2) × ……. ×Dom(An)

b. Khoá và siêu khoá

Định nghĩa 2.3. Cho r xác định trên tập thuộc tính U với U ={A1, A2,….An}. Một tập

con K ⊆ U được gọi là siêu khoá của quan hệ r nếu với bất kỳ hai bộ t1, t2 thuộc r, t1 ≠

t2, đều tồn tại một thuộc tính A thuộc K sao cho t1[A] ≠ t2[A].

Theo định nghĩa, nếu K là siêu khoá của một quan hệ thì không tồn tại hai bộ

thuộc quan hệ khác nhau mà có giá trị bằng nhau trên mọi thuộc tính của K. Do đó,

giá trị của K xác định duy nhất một bộ của quan hệ.

Định nghĩa 2.4. Cho r xác định trên tập thuộc tính U với U ={A1, A2,….An}. Một tập

con K ⊆ U được gọi là khoá của quan hệ r nếu K là siêu khoá của r và bất kỳ tập con

thật sự K’ của K không là siêu khoá.

Trong một quan hệ có thể có nhiều khoá, người ta chọn một khoá làm khoá

chính, các khoá khác được xem là khoá dự tuyển.

Định nghĩa 2.5. Một tập con K ⊆ U được gọi là khoá ngoài của quan hệ r xác định

trên tập thuộc tính U tham chiếu đến quan hệ r’ nếu K là khoá chính của quan hệ r’.

2.2.2. Biến đổi các sơ đồ ER sang mô hình quan hệ

a. Biến đổi các tập thực thể

Một tập thực thể E được biến đổi thành một quan hệ mà sơ đồ quan hệ của nó

bao gồm các thuộc tính của tập thực thể. Mỗi bộ của quan hệ biểu diễn một thực thể

trong thể hiện hiện thời của E.

Nếu E là một tập thực thể mà các thực thể của nó xác định thông qua một liên

kết với một tập thực thể F nào đó thì sơ đồ quan hệ tương ứng với E chỉ chứa các

thuộc tính trong khoá của F.

b. Biến đổi các liên kết

Một liên kết R giữa các tập thực thể E1, E2, ….Ek được biến đổi thành một

quan hệ mà sơ đồ quan hệ của nó bao gồm các thuộc tính trong khoá của mỗi E1, E2,

….Ek.

c. Các khoá của các sơ đồ quan hệ

                                                 27

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Nếu một sơ đồ quan hệ được biến đổi từ một tập thực thể, khoá của tập thực

thể chính là khoá của sơ đồ quan hệ.

Nếu một sơ đồ quan hệ được biến đổi từ một liên kết nhiều-nhiều thì khoá của

sơ đồ quan hệ thường là tập tất cả các thuộc tính.

Nếu một sơ đồ quan hệ được biến đổi từ một liên kết một-một giữa hai tập thực

thể E và F thì khoá của E và khoá của F cả hai đều là khoá của sơ đồ quan hệ biểu

diễn liên kết này.

Nếu một sơ đồ quan hệ được biến đổi từ một liên kết một-nhiều từ Ek vào Ek-1,

….E1 thì tập các thuộc tính là hợp của các khoá của Ek-1, ….E1 thường là khoá của sơ

đồ quan hệ này.

d. Các sơ đồ quan hệ với khoá chung

Khi hai sơ đồ quan hệ có khoá chung chúng ta có thể tổ hợp các thuộc tính của

hai sơ đồ quan hệ và thay thế hai sơ đồ quan hệ này bởi một sơ đồ quan hệ mới với

tập thuộc tính là hợp của hai tập thuộc tính của hai sơ đồ quan hệ ban đầu.

2.3. Mô hình dữ liệu mạng

Mô hình dữ liệu mạng là một mô hình sơ đồ thực thể liên kết với tất cả các liên

kết được hạn chế là liên kết một-nhiều. Hạn chế này cho phép chúng ta sử dụng đồ thị

có hướng đơn giản để biểu diễn dữ liệu trong mô hình này. Trong mô hình mạng, các

tập thực thể được chuyển thành các kiểu bản ghi logic. Các kiểu bản ghi logic bao

gồm một tập các trường, mỗi trường chứa giá trị là một số nguyên hay một xâu ký

tự…Tập tên các trường và các kiểu của chúng cấu thành qui cách bản ghi logic.

2.3.1. Định danh bản ghi

Có thể có một sự tương tự gần gũi giữa các thuật ngữ của mô hình mạng và các

thuật ngữ trong mô hình quan hệ như sau:

Qui cách bản ghi logic                                                                   Sơ đồ quan hệ

Bản ghi logic                                                                            Bộ

Kiểu bản ghi                                                                             Tên quan hệ

Tuy nhiên, có một sự khác biệt quan trọng giữa các bộ của quan hệ và các bản ghi của

kiểu bản ghi. Trong mô hình quan hệ hướng giá trị, các bộ chính là các giá trị đối với

các thành phần của bộ. Hai bộ có cùng giá trị trên các thuộc tính được xem là như

nhau. Mặt khác, mô hình mạng là mô hình hướng đối tượng. Các bản ghi của mô hình

mạng có thể được quan sát như có một khoá ẩn mà thực chất là địa chỉ bản ghi hay

                                               28

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

định danh của đối tượng được biểu diễn bởi bản ghi. Định danh đối tượng duy nhất

này phục vụ cho việc phân biệt các bản ghi.

2.3.2. Các móc nối

Trong mô hình mạng, các liên kết hai ngôi một-nhiều được gọi là các móc nối.

Chúng ta vẽ một đồ thị có hướng được gọi là một mạng mà thực chất là một sơ đồ

thực thể liên kết đơn giản hoá để biểu diễn các kiểu bản ghi và các móc nối của

chúng. Các nút tương ứng với các kiểu bản ghi, nếu có một móc nối giữa hai kiểu bản

ghi T1 đến T2 và móc nối này là một-nhiều từ T1 đến T2 thì chúng ta vẽ một cung từ

nút T2 đến T1 và nói rằng móc nối này từ T2 đến T1. Các nút và các cung được gán

nhãn bởi tên của các kiểu bản ghi và tên của móc nối.

2.4. Mô hình dữ liệu phân cấp

Một mô hình phân cấp đơn giản là một mô hình mạng mà là một rừng (tập các

cây) trong đó tất cả các móc nối trỏ theo hướng từ con đến cha.

2.4.1. Thuật toán biến đổi mô hình mạng đơn giản

Chúng ta bắt đầu tại một nút có nhiều móc nối đi vào và không có móc nối đi

ra và đặt nó là gốc của cây. Chúng ta gắn vào cây mọi nút có thể gắn. Khi chúng ta

không thể thêm một nút nào khác vào cây đó, ta sẽ bắt đầu với một cây khác, một nút

cha chưa được gắn sẽ được chọn làm nút gốc và gắn mọi nút vào cây mà chúng ta có

thể. Thực tế, mỗi nút có thể xuất hiện trong rừng này một hay nhiều lần trên các cây

khác nhau. Đến đây chúng ta đã có một mô hình phân cấp.

2.4.2. Sự lặp lại các kiểu bản ghi

Chúng ta có thể thấy việc biến đổi mô hình mạng đôi khi có những bản ghi có

thể xuất hiện nhiều hơn một lần. Sự lặp lại này gây ra một số vấn đề như sau:

Chúng ta lãng phí không gian bộ nhớ vì chúng ta phải lưu trữ lặp lại dữ liệu

trong các bản ghi này một số lần.

Tính không nhất quán tiềm tàng có thể xuất hiện nếu chúng ta thay đổi giá trị

trong một bản sao nào đó của một bản ghi nhưng lại quên không thay đổi giá trị của

bản sao khác.

Việc khắc phục phục và tránh những vấn đề nảy sinh ở trên mà nguyên nhân

chính là sự lưu trữ lặp lại một số dữ liệu trong cơ sở dữ liệu là một mục tiêu quan

trọng của vấn đề thiết kế cơ sở dữ liệu.

                                             29

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

2.5. Mô hình dữ liệu hướng đối tượng

Hiện nay, có một số lớn các đề nghị và một số cài đặt của các mô hình dữ liệu

có khả năng nắm bắt bản chất của các ngôn ngữ truy vấn hướng đối tượng. Các mô

hình này được lấy các tên gọi khác nhau như mô hình dữ liệu ngữ nghĩa, mô hình dữ

liệu chức năng. Đặc điểm chung của các mô hình này là chúng hỗ trợ:

Định danh đối tượng. Mỗi thực thể trong thế giới thực được mô hình hoá vào

trong cơ sở dữ liệu được gọi là một đối tượng. Mỗi một đối tượng được xác định duy

nhất bởi định danh đối tượng. Định danh đối tượng do hệ thống sinh ra và được quản

lý bởi hệ thống.

Các đối tượng phức tạp. Một cách điển hình, các mô hình này cho phép cấu

trúc các kiểu dữ liệu mới từ các kiểu dữ liệu đã có bởi cấu trúc bộ và cấu trúc tập.

Sự phân cấp kiểu. Chúng cho phép có các kiểu con với các tính chất đặc biệt

riêng của nó.

Tiếp theo chúng ta sẽ đi tìm hiểu một số khái niệm cơ bản trong mô hình dữ liệu

hướng đối tượng.

2.5.1. Cấu trúc đối tượng

Tập các cấu trúc đối tượng có thể định nghĩa trong mô hình của chúng ta là rất

gần với tập các sơ đồ có thể của các cơ sở dữ liệu trong mô hình phân cấp. Chúng ta

có thể định nghĩa một tập các kiểu đối tượng cho phép cùng với sự cài đặt vật lý dự

định của chúng một cách đệ qui như sau:

Kiểu dữ liệu nguyên tố, có nghĩa là số nguyên, số thực hay chuỗi ký tự có độ

dài cố định hay độ dài thay đổi, là một kiểu đối tượng.

Nếu T là một kiểu đối tượng thì SETOF(T) cũng là một kiểu đối tượng. Một

đối tượng có kiểu là SETOF(T) là một tập hợp các đối tượng có kiểu T. Do vậy,

SETOF(T) còn được gọi là kiểu tập.

Nếu T1, T2…., Tk là các kiểu đối tượng thì TUPLEOF(T1, T2, ..Tk) là một kiểu

đối tượng. Một kiểu đối tượng này là một k-bộ, trong đó thành phần thứ i của k-bộ có

kiểu Ti. Do vậy, TUPLEOF(T1, T2, ..Tk) còn được gọi là kiểu bộ.

2.5.2. Các lớp và các phương thức

Một mô hình dữ liệu hướng đối tượng không bị hạn chế đối với ký hiệu của

kiểu đối tượng. Ký hiệu cơ sở thực sự là lớp mà nó là một kiểu đối tượng và một tập

                                             30

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

các phương thức hay các thao tác được thực hiện trên các đối tượng với cấu trúc đối

tượng của lớp này.

2.5.3. Sự phân cấp lớp

Một thành phần chủ yếu khác trong mô hình dữ liệu hướng đối tượng là ký

hiệu của các lớp con và sự phân cấp giữa các lớp, một sự hình thức hoá của các liê kết

“là-một”.

Giả sử chúng ta có một lớp C và chúng ta muốn định nghĩa một lớp con D.

Chúng ta bắt đầu với cùng cấu trúc đối tượng với lớp con D như đối với lớp C và với

cùng tập các phương thức đối với lớp con D như đối với lớp C. Sau đó chúng ta có thể

thay đổi lớp C như sau:

Nếu cấu trúc đối với lớp C là một kiểu bộ có dạng: TUPLEOF(T1, T2, ..Tk) thì

chúng ta có thể thêm một số thuộc tính đối với cấu trúc bộ này đặc trưng riêng cho

các đối tượng thuộc lớp con D.

Chúng ta có thể tạo các phương thức mới mà chỉ áp dụng đối với lớp con D.

Chúng ta có thể định nghĩa lại các phương thức của lớp C để nó có một ý nghĩa

mới đối với lớp con D.

                                               31

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Chương 3

LƯU TRỮ VÀ CẤU TRÚC TẬP TIN

3.1. Khái quát về phương tiện lưu trữ vật lý

Có một số kiểu lưu trữ dữ liệu trong các hệ thống máy tính. Các phương tiện

lưu trữ được phân lớp theo tốc độ truy xuất, theo giá cả và theo độ tin cậy của phương

tiện. Các phương tiện hiện có là:

Cache: là dạng lưu trữ nhanh nhất và cũng đắt nhất trong các phương tiện lưu

trữ. Bộ nhớ cache nhỏ; sự sử dụng nó được quản trị bởi hệ điều hành

Bộ nhớ chính (main memory): Phương tiện lưu trữ dùng để lưu trữ dữ liệu sẵn

sàng được thực hiện. Các chỉ thị máy mục đích chung (general-purpose) hoạt động

trên bộ nhớ chính. Mặc dầu bộ nhớ chính có thể chứa nhiều megabytes dữ liệu, nó vẫn

là quá nhỏ (và quá đắt giá) để lưu trữ toàn bộ một cơ sở dữ liệu. Nội dung trong bộ

nhớ chính thường bị mất khi mất cấp nguồn

Bộ nhớ Flash: Được biết như bộ nhớ chỉ đọc có thể lập trình, có thể xoá

(EEPROM: Electrically Erasable Programmable Read-Only Memory), Bộ nhớ Flash

khác bộ nhớ chính ở chỗ dữ liệu còn tồn tại trong bộ nhớ flash khi mất cấp nguồn. Đọc

dữ liệu từ bộ nhớ flash mất ít hơn 100 ns , nhanh như đọc dữ liệu từ bộ nhớ chính. Tuy

nhiên, viết dữ liệu vào bộ nhớ flash phức tạp hơn nhiều. Dữ liệu được viết (một lần

mất khoảng 4 đến 10 s) nhưng không thể viết đè trực tiếp. Để viết đè bộ nhớ đã được

viết, ta phải xoá trắng toàn bộ bộ nhớ sau đó mới có thể viết lên nó.

Lưu trữ đĩa từ (magnetic-disk): (ở đây, được hiểu là đĩa cứng) Phương tiện

căn bản để lưu rữ dữ liệu trực tuyến, lâu dài. Thường toàn bộ cơ sở dữ liệu được lưu

trữ trên đĩa từ. Dữ liệu phải được chuyển từ đĩa vào bộ nhớ chính trước khi được truy

nhập. Khi dữ liệu trong bộ nhớ chính này bị sửa đổi, nó phải được viết lên đĩa. Lưu trữ

đĩa được xem là truy xuất trực tiềp vì có thể đọc dữ liệu trên đĩa theo một thứ tự bất

kỳ. Lưu trữ đĩa vẫn tồn tại khi mất cấp nguồn. Lưu trữ đĩa có thể bị hỏng hóc, tuy

không thường xuyên.

Lưu trữ quang (Optical storage): Dạng quen thuộc nhất của đĩa quang học là

loại đĩa CD-ROM : Compact-Disk Read-Only Memory. Dữ liệu được lưu trữ trên các

                                                32

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

đĩa quang học được đọc bởi laser. Các đĩa quang học CD-ROM chỉ có thể dọc. Các

phiên bản khác của chúng là loại đĩa quang học: viết một lần, đọc nhiều lần (write-

once, read-many: WORM) cho phép viết dữ liệu lên đĩa một lần, không cho phép xoá

và viết lại, và các đĩa có thể viết lại (rewritable) v..v

Lưu trữ băng từ (tape storage): Lưu trữ băng từ thường dùng để backup dữ

liệu. Băng từ rẻ hơn đĩa, truy xuất dữ liệu chậm hơn (vì phải truy xuất tuần tự). Băng

từ thường có dung lượng rất lớn. Các phương tiện lưu trữ có thể được tổ chức phân cấp

theo tốc độ truy xuất và giá cả. Mức cao nhất là nhanh nhất nhưng cũng là đắt nhất,

giảm dần xuống các mức thấp hơn. Các phương tiện lưu trữ nhanh (cache, bộ nhớ

chính) được xem như là lưu trữ sơ cấp (primary storage), các thiết bị lưu trữ ở mức

thấp hơn như đĩa từ được xem như lưu trữ thứ cấp hay lưu trữ trực tuyến (on-line

storage), còn các thiết bị lưu trữ ở mức thấp nhất và gần thấp nhất như đĩa quang học,

băng từ kể cả các đĩa mềm được xếp vào lưu trữ tam cấp hay lưu trữ không trực tuyến

(off-line).

Bên cạnh vấn đề tốc độ và giá cả, ta còn phải xét đến tính lâu bền của các

phương tiện lưu trữ.

Hình 3.1. Phân cấp các thiết bị lưu trữ

                                               33

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

3.2. Đĩa từ

3.2.1. Đặc trưng vật lý của đĩa

Mỗi tấm đĩa có dạng hình tròn, hai mặt của nó được phủ bởi vật liệu từ tính,

thông tin được ghi trên bề mặt đĩa. Đĩa gồm nhiều tấm đĩa. Ta sẽ sử dụng thuật ngữ

đĩa để chỉ các đĩa cứng. Khi đĩa được sử dụng, một động cơ ổ đĩa làm quay nó ở một

tốc độ không đổi. Một đầu đọc-viết được định vị trên bề mặt của tấm đĩa. Bề mặt tấm

đĩa được chia logic thành các rãnh, mỗi rãnh lại được chia thành các sector, một sector

là một đơn vị thông tin nhỏ có thể được đọc, viết lên đĩa. Tuỳ thuộc vào kiểu đĩa,

sector thay đổi từ 32 bytes đến 4095 bytes, thông thường là 512 bytes. Có từ 4 đến 32

sectors trên một rãnh, từ 20 đén 1500 rãnh trên một bề mặt. Mỗi bề mặt của một tấm

đĩa có một đầu đọc viết, nó có thể chạy dọc theo bán kính đĩa để truy cập đến các rãnh

khác nhau. Một đĩa gồm nhiều tấm đĩa, các đầu đọc-viết của tất cả các rãnh được gắn

vào một bộ được gọi là cánh tay đĩa, di chuyển cùng nhau. Các tấm đĩa được gắn vào

một trục quay. Vì các đầu đọc-viết trên các tấm đĩa di chuyển cùng nhau, nên khi đầu

đọc-viết trên một tấm đĩa đang ở rãnh thứ i thì các đầu đọc-viết của các tấm đĩa khác

cũng ở rãnh thứ i , do vậy các rãnh thứ i của tất cả các tấm đĩa được gọi là trụ

(cylinder) thứ i . Một bộ điều khiển đĩa giao diện giữa hệ thống máy tính và phần cứng

hiện thời của ổ đĩa. Nó chấp nhận các lệnh mức cao để đọc và viết một sector, và khởi

động các hành động như di chuyển cánh tay đĩa đến các rãnh đúng và đọc viết dữ liệu.

bộ điều khiển đĩa cũng tham gia vào checksum mỗi sector được viết. Checksum được

tính từ dữ liệu được viết lên sector. Khi sector được đọc lại, checksum được tính lại từ

dữ liệu được lấy ra và so sánh với checksum đã lưu trữ. Nếu dữ liệu bị sai lạc,

checksum được tính sẽ không khớp với checksum đã lưu trữ. Nếu lỗi như vậy xảy ra,

bộ điều khiển sẽ lặp lại việc đọc vài lần, nếu lỗi vẫn xảy ra, bộ điều khiển sẽ thông báo

việc đọc thất bại. Bộ điều khiển đĩa còn có chức năng tái ánh xạ các sector xấu: ánh xạ

các sector xấu đến một vị trí vật lý khác.

Hình 4.2. Các đĩa được nối với hệ thống máy tính

                                                  34

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Các đĩa được nối với một hệ thống máy tính hoặc một bộ điều khiển đĩa qua

một sự hợp nhất tốc độ cao. Hợp nhất hệ thống máy tính nhỏ (Small Computer-

System Interconnect: SCSI) thường được sử dụng để nối kết các đĩa với các máy tính

cá nhân và workstation. Mainframe và các hệ thống server thường có các bus nhanh

hơn và đắt hơn để nối với các đĩa.

Các đầu đọc-viết được giữ sát với bề mặt đĩa như có thể để tăng độ dày đặc

(density). Đĩa đầu cố định (Fixed-head) có một đầu riêng biệt cho mỗi rãnh, sự sắp xếp

này cho phép  máy tính chuyển từ rãnh này sang rãnh khác mau chóng, không phải di

chuyển đầu đọc-viết. Tuy nhiên, cần một số rất lớn đầu đọc-viết, điều này làm nâng

giá của thiết bị.

3.2.2. Đo lường hiệu năng của đĩa

Các tiêu chuẩn đo lường chất luợng chính của đĩa là dung lượng, thời gian truy

xuất, tốc độ truyền dữ liệu và độ tin cậy.

Thời gian truy xuất (access time): là khoảng thời gian từ khi yêu cầu đọc/viết

được phát đi đến khi bắt đầu truyền dữ liệu. Để truy xuất dữ liệu trên một sector đã

cho của một đĩa, đầu tiên cánh tay đĩa phải di chuyển đến rãnh đúng, sau đó phải chờ

sector xuất hiện dưới nó, thời gian để định vị cánh tay được gọi là thời gian tìm kiếm

(seek time), nó tỷ lệ với khoảng cách mà cánh tay phải di chuyển, thời gian tìm kiếm

nằm trong khoảng 2..30 ms tuỳ thuộc vào rãnh xa hay gần vị trí cánh tay hiện tại.

Thời gian tìm kiếm trung bình (average seek time): Thời gian tìm kiếm trung

bình là trung bình của thời gian tìm kiếm, được đo luờng trên một dãy các yêu cầu

ngẫu nhiên (phân phối đều), và bằng khoảng 1/3 thời gian tìm kiếm trong trường hợp

xấu nhất.

Thời gian tiềm ẩn luân chuyển (rotational latency time): Thời gian chờ sector

được truy xuất xuất hiện dưới đầu đọc/viết. Tốc độ quay của đĩa nằm trong khoảng

60..120 vòng quay trên giây, trung bình cần nửa vòng quay để sector cần thiết nằm

dưới đầu đọc/viết. Như vậy, thời gian tiềm ẩn trung bình (average latency time) bằng

nửa thời gian quay một vòng đĩa. Thời gian truy xuất bằng tổng của thời gian tìm kiếm

và thời gian tiềm ẩn và nằm trong khoảng 10..40 ms.

Tốc độ truyền dữ liệu: là tốc độ dữ liệu có thể được lấy ra từ đĩa hoặc được

lưu trữ vào đĩa. Hiện nay tốc này vào khoảng 1..5 Mbps.

                                               35

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Thời gian trung bình không sự cố (mean time to failure): lượng thời gian

trung bình hệ thống chạy liên tục không có bất kỳ sự cố nào. Các đĩa hiện nay có thời

gian không sự cố trung bình khoảng 30000 .. 800000 giờ nghĩa là khoảng từ 3,4 đến 91

năm.

3.2.3. Tối ưu hoá truy xuất khối đĩa

Yêu cầu I/O đĩa được sinh ra cả bởi hệ thống file lẫn bộ quản trị bộ nhớ ảo

trong hầu hết các hệ điều hành. Mỗi yêu cầu xác định địa chỉ trên đĩa được tham khảo,

địa chỉ này ở dạng số khối. Một khối là một dãy các sector kề nhau trên một rãnh. Kích

cỡ khối trong khoảng 512 bytes đến một vài Kbytes. Dữ liệu được truyền giữa đĩa và

bộ nhớ chính theo đơn vị khối. Mức thấp hơn của bộ quản trị hệ thống file sẽ chuyển

đổi địa chỉ khối sang số của trụ, của mặt và của sector ở mức phần cứng.

Truy xuất dữ liệu trên đĩa chậm hơn nhiều so với truy xuất dữ liệu trong bộ nhớ

chính, do vậy cần thiết một chiến lược nhằm nâng cao tốc độ truy xuất khối đĩa. Dưới

đây ta sẽ thảo luận một vài kỹ thuật nhằm vào mục đích đó.

Scheduling: Nếu một vài khối của một trụ cần được truyền từ đĩa vào bộ nhớ

chính, ta có thể tiết kiệm thời gian truy xuất bởi yêu cầu các khối theo thứ tự mà nó

chạy qua dưới đầu ọc/viết. Nếu các khối mong muốn ở trên các trụ khác nhau, ta yêu

cầu các khối theo thứ tự sao cho làm tối thiểu sự di chuyển cánh tay đĩa. Các thuật toán

scheduling cánh tay đĩa (Disk-arm-sheduling) nhằm lập thứ tự truy xuất các rãnh theo

cách làm tăng số truy xuất có thể được xử lý. Một thuật toán thường dùng là thuật toán

thang máy (elevator algorithm): Giả sử ban đầu cánh tay di chuyển từ rãnh trong nhất

hướng ra phía ngoài đĩa, đối với mỗi rãnh có yêu cầu truy xuất, nó dừng lại, phục vụ

yêu cầu đối với rãnh này, sau đó tiếp tục di chuyển ra phía ngoài đến tận khi không có

yêu cầu nào chờ các rãnh xa hơn phía ngoài. Tại điểm này, cánh tay đổi hướng, di

chuyển vào phía trong, lại dừng lại trên các rãnh được yêu cầu, và cứ như vậy đến tận

khi không còn rãnh nào ở trong hơn được yêu cầu, rồi lại đổi hướng v ..v. Bộ điều

khiển đĩa thường làm nhiệm vụ sắp xếp lại các yêu cầu đọc để cải tiến hiệu năng.

Tổ chức file: Để suy giảm thời gian truy xuất khối, ta có thể tổ chức các khối

trên đĩa theo cách tương ứng gần nhất với cách mà dữ liệu được truy xuất. Ví dụ, Nếu

ta muốn một file được truy xuất tuần tự, khi đó ta bố trí các khối của file một cách tuần

tự trên các trụ kề nhau. Tuy nhiên việc phân bố các khối lưu trữ kề nhau này sẽ bị phá

                                                  36

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

vỡ trong quá trình phát triển của file  file không thể được phân bố trên các khối kề

nhau được nữa, hiện tượng này dược gọi là sự phân mảnh (fragmentation). Nhiều hệ

điều hành cung cấp tiện ích giúp suy giảm sự phân mảnh này (Defragmentation) nhằm

làm tăng hiệu năng truy xuất file.

Các buffers viết không hay thay đổi: Vì nội dung của bộ nhớ chính bị mất khi

mất nguồn, các thông tin về cơ sở dữ liệu cập nhật phải được ghi lên đĩa nhằm đề

phòng sự cố. Hiệu năng của các ứng dụng cập nhật cường độ cao phụ thuộc mạnh vào

tốc độ viết đĩa. Ta có thể sử dụng bộ nhớ truy xuất ngẫu nhiên không hay thay

đổi (nonvolatile RAM) để nâng tốc độ viết đĩa. Nội dung của nonvolatile RAM không

bị mất khi mất nguồn. Một phương pháp chung để thực hiện nonvolatile RAM là sử

dụng RAM pin dự phòng (battery-back-up RAM). Khi cơ sở dữ liệu yêu cầu viết một

khối lên đĩa, bộ điều khiển dĩa viết khối này lên buffer nonvolatile RAM, và thông báo

ngay cho hệ điều hành là việc viết đã thành công. Bộ điều khiển sẽ viết dữ liệu đến

đích của nó trên đĩa, mỗi khi đĩa rảnh hoặc buffer nonvolatile RAM đầy. Khi hệ cơ sở

dữ liệu yêu cầu một viết khối, nó chỉ chịu một khoảng lặng chờ đợi khi buffer

nonvolatile RAM đầy.

Đĩa log (log disk): Một cách tiếp cận khác để làm suy giảm tiềm năng viết là sử

dụng log-disk: Một đĩa được tận hiến cho việc viết một log tuần tự. Tất cả các truy

xuất đến log-disk là tuần tự, nhằm loại bỏ thời gian tìm kiếm, và một vài khối kề có

thể được viết một lần, tạo cho viết vào log-disk nhanh hơn viết ngẫu nhiên vài lần.

Cũng như trong trường hợp sử dụng nonvolatile RAM, dữ liệu phải được viết vào vị trí

hiện thời của chúng trên đĩa, nhưng việc viết này có thể được tiến hành mà hệ cơ sở dữ

liệu không cần thiết phải chờ nó hoàn tất. Log-disk có thể được sử dụng để khôi phục

dữ liệu. Hệ thống file dựa trên log là một phiên bản của cách tiếp cận log-disk: Dữ liệu

không được viết lại lên đích gốc của nó trên đĩa; thay vào đó, hệ thống file lưu vết nơi

các khối được viết mới đây nhất trên log-disk, và hoàn lại chúng từ vị trí này. Log-disk

được "cô đặc" lại (compacting) theo một định kỳ. Cách tiếp cận này cải tiến hiệu năng

viết, song sinh ra sự phân mảnh đối với các file được cập nhật thường xuyên.

3.2.4. RAID

Trong một hệ thống có nhiều đĩa, ta có thể cải tiến tốc độ đọc viết dữ liệu nếu

cho chúng hoạt động song song. Mặt khác, hệ thống nhiều đĩa còn giúp tăng độ tin cậy

lưu trữ bằng cách lưu trữ dư thừa thông tin trên các đĩa khác nhau, nếu một đĩa có sự

                                                 37

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

cố dữ liệu cũng không bị mất. Một sự đa dạng các kỹ thuật tổ chức đĩa, được gọi là

RAID (Redundant Arrays of Inexpensive Disks), được đề nghị nhằm vào vấn đề

tăng cường hiệu năng và độ tin cậy.

3.2.5. Cái tiến độ tin cậy thông qua sự dư thừa

Giải pháp cho vấn đề độ tin cậy là đưa vào sự dư thừa: lưu trữ thông tin phụ,

bình thường không cần thiết, nhưng nó có thể được sử dụng để tái tạo thông tin bị mất

khi gặp sự cố hỏng hóc đĩa, như vậy thời gian trung bình không sự cố tăng lên (xét

tổng thể trên hệ thống đĩa).

Đơn giản nhất, là làm bản sao cho mỗi đĩa. Kỹ thuật này được gọi là mirroring

hay shadowing. Một đĩa logic khi đó bao gồm hai đĩa vật lý, và mỗi việc viết được

thực hiện trên cả hai đĩa. Nếu một đĩa bị hư, dữ liệu có thể được đọc từ đĩa kia. Thời

gian trung bình không sự cố của đĩa mirror phụ thuộc vào thời gian trung bình không

sự cố của mỗi đĩa và phụ thuộc vào thời gian trung bình được sửa chữa (mean time to

repair): thời gian trung bình để một đĩa bị hư được thay thế và phục hồi dữ liệu trên nó.

3.2.6. Cải tiến hiệu năng thông qua song song

Với đĩa mirror, tốc độ đọc có thể tăng lên gấp đôi vì yêu cầu đọc có thể được

gửi đến cả hai đĩa. Với nhiều đĩa, ta có thể cải tiến tốc độ truyền bởi phân nhỏ (striping

data) dữ liệu qua nhiều đĩa. Dạng đơn giản nhất là tách các bít của một byte qua nhiều

đĩa, sự phân nhỏ này được gọi là sự phân nhỏ mức bit (bit-level striping). Ví dụ, ta có

một dàn 8 đĩa, ta viết bít thứ i của một byte lên đĩa thứ i . dàn 8 đĩa này có thể được xử

lý như một đĩa với các sector 8 lần lớn hơn kích cỡ thông thường, quan trọng hơn là

tốc dộ truy xuất tăng lên tám lần. Trong một tổ chức như vậy, mỗi đĩa tham gia vào

mỗi truy xuất (đọc/viết), như vậy, số các truy xuất có thể được xử lý trong một giây là

tương tự như trên một đĩa, nhưng mỗi truy xuất có thể đọc/viết nhiều dữ liệu hơn tám

lần. Phân nhỏ mức bit có thể được tổng quát cho số đĩa là bội hoặc ước của 8, Ví dụ, ta

có một dàn 4 đĩa, ta sẽ phân phối bít thứ i và bít thứ 4+i vào đĩa thứ i. Hơn nữa, sự

phân nhỏ không nhất thiết phải ở mức bit của một byte. Ví dụ, trong sự phân nhỏ mức

khối, các khối của một file được phân nhỏ qua nhiều đĩa, với n đĩa, khối thứ i có thể

được phân phối qua đĩa (i mod n) + 1. Ta cũng có thể phân nhỏ ở mức byte, sector

hoặc các sector của một khối. Hai đích song song trong một hệ thống đĩa là:

                                                   38

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Nạp nhiều truy xuất nhỏ cân bằng (truy xuất trang) sao cho lượng dữ liệu được

nạp trong một đơn vị thời gian của truy xuất như vậy tăng lên.

Song song hoá các truy xuất lớn sao cho thời gian trả lời các truy xuất lớn giảm.

3.2.7. Các mức RAID

Mirroring cung cấp độ tin cậy cao, nhưng đắt giá. Phân nhỏ cung cấp tốc độ

truyền dữ liệu cao, nhưng không cải tiến được độ tin cậy. Nhiều sơ đồ cung cấp sự dư

thừa với giá thấp bằng cách phối hợp ý tưởng của phân nhỏ với "parity" bit. Các sơ đồ

này có sự thoả hiệp giá-hiệu năng khác nhau và được phân lớp thành các mức được

gọi là các mức RAID.

Mức RAID 0 : Liên quan đến các dàn đĩa với sự phân nhỏ mức khối, nhưng

không có một sự dư thừa nào.

Mức RAID 1 : Liên quan đến mirror đĩa

Mức RAID 2 : Cũng được biết dưới cái tên mã sửa lỗi kiểu bộ nhớ (memory-

style error-correcting-code : ECC). Hệ thống bộ nhớ thực hiện phát hiện lỗi bằng bit

parity. Mỗi byte trong hệ thống bộ nhớ có thể có một bit parity kết hợp với nó. Sơ đồ

sửa lỗi lưu hai hoặc nhiều hơn các bit phụ, và có thể dựng lại dữ liệu nếu một bit bị lỗi.

ý tưởng của mã sửa lỗi có thể được sử dụng trực tiếp trong dàn đĩa thông qua phân nhỏ

byte qua các đĩa. Ví dụ, bít đầu tiên của mỗi byte có thể được lưu trên đĩa 1, bit thứ hai

trên đĩa 2, và cứ như vậy, bit thứ 8 trên đĩa 8, các bit sửa lỗi được lưu trên các đĩa thêm

vào. Nếu một trong các đĩa bị hư, các bít còn lại của byte và các bit sửa lỗi kết hợp

được đọc từ các đĩa khác có thể giúp tái tạo bít bị mất trên đĩa hư, như vậy ta có thể

dựng lại dữ liệu. Với một dàn 4 đĩa dữ liệu, RAID mức 2 chỉ cần thêm 3 đĩa để lưu các

bit sửa lỗi (các đĩa thêm vào này được gọi là các đĩa overhead), so sánh với RAID mức

1, cần 4 đĩa overhead.

Mức RAID 3 : Còn được gọi là tổ chức parity chen bit (bit-interleaved parity).

Bộ điều khiển đĩa có thể phát hiện một sector được đọc đúng hay sai, như vậy có thể

sử dụng chỉ một bit parity để sửa lỗi: Nếu một trong các sector bị hư, ta biết chính xác

đó là sector nào, Với mỗi bit trong sector này ta có thể hình dung nó là bít 1 hay bit 0

bằng cách tính parity của các bit tương ứng từ các sector trên các đĩa khác. Nếu parity

của các bit còn lại bằng với parity được lưu, bit mất sẽ là 0, ngoài ra bit mất là 1.

                                                    39

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

RAID mức 3 tốt như mức 2 nhưng it tốn kém hơn (chỉ cần một đĩa overhead).

Mức RAID 4 : Còn được gọi là tổ chức parity chen khối (Block-interleaved

parity), lưu trữ các khối đúng như trong các đĩa chính quy, không phân nhỏ chúng qua

các đĩa nhưng lấy một khối parity trên một đĩa riêng biệt đối với các khối tương ứng từ

N đĩa khác. Nếu một trong các đĩa bị hư, khối parity có thể được dùng với các khối

tương ứng từ các đĩa khác để khôi phục khối của đĩa bị hư.

Một đọc khối chỉ truy xuất một đĩa, cho phép các yêu cầu khác được xử lý bởi

các đĩa khác. Như vậy, tốc độ truyền dữ liệu đối với mỗi truy xuất chậm, nhưng nhiều

truy xuất đọc có thể được xử lý song song, dẫn đến một tốc độ I/O tổng thể cao hơn.

Tốc độ truyền đối vớí các đọc dữ liệu lớn (nhiều khối) cao do tất cả các đĩa có thể

được đọc song song; các viết dữ liệu lớn (nhiều khối) cũng có tốc độ truyền cao vì dữ

liệu và parity có thể được viết song song. Tuy nhiên, viết một khối đơn phải truy xuất

đĩa trên đó khối được lưu trữ, và đĩa parity (do khối parity cũng phải được cập nhật).

Như vậy, viết một khối đơn yêu cầu 4 truy xuất: hai để đọc hai khối cũ, và hai để viết

lại hai khối.

Mức RAID 5 : Còn gọi là parity phân bố chen khối (Block-interleaved

Distributed Parity), cải tiến của mức 4 bởi phân hoạch dữ liệu và parity giữa toàn bộ

N+1 đĩa, thay vì lưu trữ dữ liệu trên N đĩa và parity trên một đĩa riêng biệt như trong

RAID 4. Trong RAID 5, tất cả các đĩa có thể tham gia làm thoả mãn các yêu cầu đọc,

như vậy sẽ làm tăng tổng số yêu cầu có thể được đặt ra trong một đơn vị thời gian. Đối

với mỗi khối, một đĩa lưu trữ parity, các đĩa khác lưu trữ dữ liệu. Ví dụ, với một dàn

năm đĩa, parity đối với khối thứ n được lưu trên đĩa (n mod 5)+1. Các khối thứ n của 4

đĩa khác lưu trữ dữ liệu hiện hành của khối đó.

Mức RAID 6 : Còn được gọi là sơ đồ dư thừa P+Q (P+Q redundancy scheme),

nó rất giống RAID 5 nhưng lưu trữ thông tin dư thừa phụ để canh chừng nhiều đĩa bị

hư. Thay vì sử dụng parity, người ta sử dụng các mã sửa lỗi.

3.2.8. Chọn mức RAID đúng

Nếu đĩa bị hư, Thời gian tái tạo dữ liệu của nó là đáng kể và thay đổi theo mức

RAID được dùng. Sự tái tạo dễ dàng nhất đối với mức RAID 1. Đối với các mức khác,

ta phải truy xuất tất cả các đĩa khác trong dàn đĩa để tái tạo dữ liệu trên đĩa bị hư. Hiệu

năng tái tạo của một một hệ thống RAID có thể là một nhân tố quan trọng nếu việc

                                                 0

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

cung cấp dữ liệu liên tục được yêu cầu (thường xảy ra trong các hệ CSDL hiệu năng

cao hoặc trao đổi). Hơn nữa, hiệu năng tái tạo ảnh hưởng đến thời gian trung bình

không sự cố. Vì RAID mức 2 và 4 được gộp lại bởi RAID mức 3 và 5, Việc lựa chọn

mức RAID thu hẹp lại trên các mức RAID còn lại. Mức RAID 0 được dùng trong các

ứng dụng hiệu năng cao ở đó việc mất dữ liệu không có gì là trầm trọng cả. RAID mức

1 là thông dụng cho các ứng dụng lưu trữ các log-file trong hệ CSDL. Do mức 1 có

overhead cao, mức 3 và 5 thường được ưa thích hơn đối với việc lưu trữ khối lượng dữ

liệu lớn. Sự khác nhau giữa mức 3 và mức 5 là tốc độ truyền dữ liệu đối lại với tốc độ

I/O tổng thể. Mức 3 được ưa thích hơn nếu truyền dữ liệu cao được yêu cầu, mức 5

được ưa thích hơn nếu việc đọc ngẫu nhiên là quan trọng. Mức 6, tuy hiện nay ít được

áp dụng, nhưng nó có độ tin cậy cao hơn mức 5.

3.2.9. Mở rộng

Các quan niệm của RAID được khái quát hoá cho các thiết bị lưu trữ khác, bao

hàm các dàn băng, thậm chí đối với quảng bá dữ liệu trên các hệ thống không dây. Khi

áp dụng RAID cho dàn băng, cấu trúc RAID cho khả năng khôi phục dữ liệu cả khi

một trong các băng bị hư hại. Khi áp dụng đối với quảng bá dữ liệu, một khối dữ liệu

được phân thành các đơn vị nhỏ và được quảng bá cùng với một đơn vị parity; nếu một

trong các đơn vị này không nhận được, nó có thể được dựng lại từ các đơn vị còn lại.

3.3. Lưu trữ tam cấp

3.3.1. Đĩa quanng học

CR-ROM có ưu điểm là có khả năng lưu trữ lớn, dễ di chuyển (có thể đưa vào

và lấy ra khỏi ổ đĩa như đĩa mềm), hơn nữa giá lại rẻ. Tuy nhiên, so với ổ đĩa cứng,

thời gian tìm kiếm của ổ CD-ROM chậm hơn nhiều (khoảng 250ms), tốc độ quay

chậm hơn, từ đó dẫn đến độ trễ cao hơn; tốc độ truyền dữ liệu cũng chậm hơn (khoảng

150Kbytes/s). Gần đây, một định dạng mới của đĩa quang học - Digital video disk

(DVD) - được chuẩn hoá, các đĩa này có dung lượng trong khoảng 4,7GBytes đến 17

GBytes. Các đĩa WORM, REWRITABLE cũng trở thành phổ biến. Các WORM

jukeboxes là các thiết bị có thể lưu trữ một số lớn các đĩa WORM và có thể nạp tự

động các đĩa theo yêu cầu đến một hoặc một vài ổ WORM.

3.3.2. Băng từ

                                            1

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Băng từ có thể lưu một lượng lớn dữ liệu, tuy nhiên, chậm hơn so với đĩa từ và

đĩa quang học. Truy xuất băng buộc phải là truy xuất tuần tự, như vậy nó không thích

hợp cho hầu hết các đòi hỏi của lưu trữ thứ cấp. Băng từ được sử dụng chính cho việc

backup, cho lưu trữ các thông tin không được sử dụng thường xuyên và như một

phương tiện ngoại vi (off-line medium) để truyền thông tin từ một hệ thống đến một hệ

thống khác. Thời gian để định vị đoạn băng lưu dữ liệu cần thiết có thể kéo dài đến

hàng phút. Jukeboxes băng chứa một lượng lớn băng, với một vài ổ băng và có thể lưu

trữ được nhiều TeraBytes (1012 Bytes)

3.4. Truy xuất lưu trữ

Một cơ sở dữ liệu được ánh xạ vào một số các file khác nhau được duy trì bởi

hệ điều hành nền. Các file này lưu trú thường trực trên các đĩa với backup trên băng.

Mỗi file được phân hoạch thành các đơn vị lưu trữ độ dài cố định được gọi là khối -

đơn vị cho cả cấp phát lưu trữ và truyền dữ liệu.

Một khối có thể chứa một vài hạng mục dữ liệu (data item). Ta giả thiết không

một hạng mục dữ liệu nào trải ra trên hai khối. Mục tiêu nổi trội của hệ CSDL là tối

thiểu hoá số khối truyền giữa đĩa và bộ nhớ. Một cách để giảm số truy xuất đĩa là giữ

nhiều khối như có thể trong bộ nhớ chính. Mục đích là để khi một khối được truy xuất,

nó đã nằm sẵn trong bộ nhớ chính và như vậy không cần một truy xuất đĩa nào cả.

Do không thể lưu tất cả các khối trong bộ nhớ chính, ta cần quản trị cấp phát

không gian sẵn có trong bộ nhớ chính để lưu trữ các khối. Bộ đệm (Buffer) là một

phần của bộ nhớ chính sãn có để lưu trữ bản sao khối đĩa. Luôn có một bản sao trên

đĩa cho mỗi khối, song các bản sao trên đĩa của các khối là các phiên bản cũ hơn so với

phiên bản trong buffer. Hệ thống con đảm trách cấp phát không gian buffer được gọi là

bộ quản trị buffer.

3.4.1. Bộ quản trị buffer

Các chương trình trong một hệ CSDL đưa ra các yêu cầu cho bộ quản trị buffer

khi chúng cần một khối đĩa. Nếu khối này đã sẵn sàng trong buffer, địa chỉ khối trong

bộ nhớ chính được chuyển cho người yêu cầu. Nếu khối chưa có trong buffer, bộ quản

trị buffer đầu tiên cấp phát không gian trong buffer cho khối, rút ra một số khối khác,

nếu cần thiết, để lấy không gian cho khối mới. Khối được rút ra chỉ được viết lại trên

đĩa khi nó có bị sửa đổi kể từ lần được viết lên đĩa gần nhất. Sau đó bộ quản trị buffer

                                              2

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

đọc khối từ đĩa vào buffer, và chuyển địa chỉ của khối trong bộ nhớ chính cho người

yêu cầu. Bộ quản trị buffer không khác gì nhiều so với bộ quản trị bộ nhớ ảo, một

điểm khác biệt là kích cỡ của một CSDL có thể rất lớn không đủ chứa toàn bộ trong bộ

nhớ chính do vậy bộ quản trị buffer phải sử dụng các kỹ thuật tinh vi hơn các sơ đồ

quản trị bộ nhớ ảo kiểu mẫu.

Chiến luợc thay thế. Khi không có chỗ trong buffer, một khối phải được xoá

khỏi buffer trước khi một khối mới được đọc vào. Thông thường, hệ điều hành sử

dụng sơ đồ LRU (Least Recently Used) để viết lên đĩa khối ít được dùng gần đây nhất,

xoá bỏ nó khỏi buffer. Cách tiếp cận này có thể được cải tiến đối với ứng dụng CSDL.

Khối chốt (pinned blocks). Để hệ CSDL có thể khôi phục sau sự cố, cần thiết

phải hạn chế thời gian khi viết lại lên đĩa một khối. Một khối không cho phép viết lại

lên đĩa được gọi là khối chốt.

Xuất ra bắt buộc các khối (Forced output of blocks). Có những tình huống

trong đó cần phải viết lại một khối lên đĩa, cho dù không gian buffer mà nó chiếm là

không cần đến. Việc viết này được gọi là sự xuất ra bắt buộc của một khối. Lý do

ngắn gọn của yêu cầu xuất ra bắt buộc khối là nội dung của bộ nhớ chính bị mất khi có

sự cố, ngược lại dữ liệu trên dĩa còn tồn tại sau sự cố.

3.4.2. Các đối sách thay thế buffer

Mục đích của chiến lược thay thế khối trong buffer là tối thiểu hoá các truy xuất

đĩa. Các hệ điều hành thường sử dụng chiến lược LRU để thay thế khối. Tuy nhiên,

một hệ CSDL có thể dự đoán mẫu tham khảo tương lai. Yêu cầu của một người sử

dụng đối với hệ CSDL bao gồm một số bước. Hệ CSDL có thể xác định trước những

khối nào sẽ là cần thiết bằng cách xem xét mỗi một trong các bước được yêu cầu để

thực hiện hoạt động được yêu cầu bởi người sử dụng. Như vậy, khác với hệ điều hành,

hệ CSDL có thể có thông tin liên quan đến tương lai, chí ít là tương lai gần. Trong

nhiều trường hợp, chiến lược thay thế khối tối ưu cho hệ CSDL lại là MRU (Most

Recently Used): Khối bị thay thế sẽ là khối mới được dùng gần đây nhất! Bộ quản trị

buffer có thể sử dụng thông tin thống kê liên quan đến xác suất mà một yêu cầu sẽ

tham khảo một quan hệ riêng biệt nào đó. Tự điển dữ liệu là một trong những phần

được truy xuất thường xuyên nhất của CSDL. Như vậy, bộ quản trị buffer sẽ không

nên xoá các khối tự điển dữ liệu khỏi bộ nhớ chính trừ phi các nhân tố khác bức chế

                                            3

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

làm điều đó. Một chỉ mục (Index) đối với một file được truy xuất thường xuyên hơn

chính bản thân file, vậy thì bộ quản trị buffer cũng không nên xoá khối chỉ mục khỏi

bộ nhớ chính nếu có sự lựa chọn.

Chiến luợc thay thế khối CSDL lý tưởng cần hiểu biết về các hoạt động CSDL

đang được thực hiện. Không một chiến lược đơn lẻ nào được biết nắm bắt được toàn

bộ các viễn cảnh có thể. Tuy vậy, một điều đáng ngạc nhiên là phần lớn các hệ CSDL

sử dụng LRU bất chấp các khuyết điểm của chiến lược đó.

Chiến lược được sử dụng bởi bộ quản trị buffer để thay thế khối bị ảnh hưởng

bởi các nhân tố khác hơn là nhân tố thời gian tại đó khối được tham khảo trở lại. Nếu

hệ thống đang xử lý các yêu cầu của một vài người sử dụng cạnh tranh, hệ thống (con)

điều khiển cạnh tranh (concurrency-control subsystem) có thể phải làm trễ một số yêu

cầu để đảm bảo tính nhất quán của CSDL. Nếu bộ quản trị buffer được cho các thông

tin từ hệ thống điều khiển cạnh tranh mà nó nêu rõ những yêu cầu nào đang bị làm trễ,

nó có thể sử dụng các thông tin này để thay đổi chiến lược thay thế khối của nó. Đặc

biệt, các khối cần thiết bởi các yêu cầu tích cực (active requests) có thể được giữ lại

trong buffer, toàn bộ các bất lợi đổ dồn lên các khối cần thiết bởi các yêu cầu bị làm

trễ.

Hệ thống (con) khôi phục (crash-recovery subsystem) áp đặt các ràng buộc

nghiêm nhặt lên việc thay thế khối. Nếu một khối bị sửa đổi, bộ quản trị buffer không

được phép viết lại phiên bản mới của khối trong buffer lên đĩa, vì điều này phá huỷ

phiên bản cũ. Thay vào đó, bộ quản trị khối phải tìm kiếm quyền từ hệ thống khôi

phục trước khi viết khối. Hệ thống khôi phục có thể đòi hỏi một số khối nhất định khác

là xuất bắt buộc (forced output) trước khi cấp quyền cho bộ quản trị buffer để xuất ra

khối được yêu cầu.

3.5. Tổ chức file

Một file được tổ chức logic như một dãy các mẩu tin (record). Các mẩu tin này

được ánh xạ lên các khối đĩa. File được cung cấp như một xây dựng cơ sở trong hệ

điều hành, như vậy ta sẽ giả thiết sự tồn tại của hệ thống file nền. Ta cần phải xét

những phương pháp biểu diễn các mô hình dữ liệu logic trong thuật ngữ file. Các khối

có kích cỡ cố định được xác định bởi tính chất vật lý của đĩa và bởi hệ điều hành, song

kích cỡ của mẩu tin lại thay đổi. Trong CSDL quan hệ, các bộ của các quan hệ khác

                                             4

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

nhau nói chung có kích cỡ khác nhau. Một tiếp cận để ánh xạ một CSDL đến các file

là sử dụng một số file, và lưu trữ các mẩu tin thuộc chỉ một độ dài cố định vào một file

đã cho nào đó. Một cách khác là cấu trúc các file sao cho ta có thể điều tiết nhiều độ

dài cho các mẩu tin. Các file của các mẩu tin độ dài cố định dễ dàng thực thi hơn file

của các mẩu tin độ dài thay đổi.

3.5.1. Mẫu tin độ dài cố định

Xét một file các mẩu tin account đối với CSDL ngân hàng, mỗi mẩu tin của file

này được xác định như sau:

Type

depositor = record

branch_name:char(20);

account_number:char(10);

balance:real;

end

Giả sử mỗi một ký tự chiếm 1 byte và mỗi số thực chiếm 8 byte, như vậy mẩu

tin account có độ dài 40 bytes. Một cách tiếp cận đơn giản là sử dụng 40 byte đầu tiên

cho mẩu tin thứ nhất, 40 byte kế tiếp cho mẩu tin thứ hai, ... Cách tiếp cận đơn giản

này nảy sinh những vấn đề sau:

1. Khó khăn khi xoá một mẩu tin từ cấu trúc này. Không gian bị chiếm bởi mẩu

tin bị xoá phải được lấp đầy với mẩu tin khác của file hoặc ta phải đánh dấu mẩu tin bị

xoá.

2. Trừ khi kích cỡ khối là bội của 40, nếu không một số mẩu tin sẽ bắt chéo qua

biên khối, có nghĩa là một phần mẩu tin được lưu trong một khối, một phần khác được

lưu trong một khối khác. như vậy đòi hỏi phải truy xuất hai khối để đọc/viết một mẩu

tin "bắc cầu" đó. Khi một mẩu tin bị xoá, ta có thể di chuyển mẩu tin kề sau nó vào

không gian bị chiếm một cách hình thức bởi mẩu tin bị xoá, rồi mẩu tin kế tiếp vào

không gian bị chiếm của mẩu tin vừa được di chuyển, cứ như vậy cho đến khi mỗi

mẩu tin đi sau mẩu tin bị xoá được dịch chuyển hướng về đầu. Cách tiếp cận này đòi

hỏi phải di chuyển một số lớn các mẩu tin.

Ví dụ:

                                              5

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Một cách tiếp cận khác đơn giản hơn là di chuyển mẩu tin cuối cùng vào không

gian bị chiếm bởi mẩu tin bị xoá. Song cách tiếp cận này đòi hỏi phải truy xuất khối bổ

sung.

Vì hoạt động chèn xảy ra thường xuyên hơn hoạt động xoá, ta có thể chấp nhận

việc để "ngỏ" không gian bị chiếm bởi mẩu tin bị xoá, và chờ một hoạt động chèn đến

sau để tái sử dụng không gian đó. Một dấu trên mẩu tin bị xoá là không đủ vì sẽ gây

khó khăn cho việc tìm kiếm không gian "tự do" đó khi chèn. Như vậy ta cần đưa vào

cấu trúc bổ xung. ở đầu của file, ta cấp phát một số byte nhất định làm header của file.

Header này sẽ chứa đựng thông tin về file. Header chứa địa chỉ của mẩu tin bị xoá thứ

nhất, trong nội dung của mẩu tin này có chứa địa chỉ của mẩu tin bị xoá thứ hai và cứ

như vậy. Như vậy, các mẩu tin bị xoá sẽ tạo ra một danh sách liên kết dược gọi là danh

sách tự do (free list).

                                              6

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Khi chèn mẩu tin mới, ta sử dụng con trỏ đầu danh sách được chứa trong header

để xác định danh sách, nếu danh sách không rỗng ta chèn mẩu tin mới vào vùng được

trỏ bởi con trỏ đầu danh sách nếu không ta chèn mẩu tin mới vào cuối file.

Chèn và xoá đối với file mẩu tin độ dài cố định thực hiện đơn giản vì không

gian được giải phóng bởi mẩu tin bị xoá đúng bằng không gian cần thiết để chèn một

mẩu tin. Đối với file của các mẩu tin độ dài thay đổi vấn đề trở nên phức tạp hơn

nhiều.

3.5.2. Mẫu tin độ dài thay đổi

Mẩu tin độ dài thay đổi trong CSDL do bởi:

- Việc lưu trữ nhiều kiểu mẩu tin trong một file.

- Kiểu mẩu tin cho phép độ dài trường thay đổi.

- Kiểu mẩu tin cho phép lặp lại các trường.

Có nhiều kỹ thuật để thực hiện mẩu tin độ dài thay đổi. Để minh hoạ ta sẽ xét

các biểu diễn khác nhau trên các mẩu tin độ dài thay đổi có định dạng sau:

Type account_list = record

                                        7

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

branch_name: char(20)                                                                   ;

account_info : array[1..N] of  record

account_number: char(10);

balance: real;

end;

end

Biểu diễn chuỗi byte (Byte-String Representation)

Một cách đơn giản để thực hiện các mẩu tin độ dài thay đổi là gắn một ký hiệu

đặc biệt End-of-record (⊥) vào cuối mỗi record. Khi đó, ta có thể lưu mỗi mẩu tin

như một chuỗi byte liên tiếp. Thay vì sử dụng một ký hiệu đặc biệt ở cuối của mỗi mẩu

tin, một phiên bản của biểu diễn chuỗi byte lưu trữ độ dài mẩu tin ở bắt đầu của mỗi

mẩu tin.

Hình 4.3. Biểu diễn chuỗi byte của các mẫu tin độ dài thay đổi

Biểu diễn chuỗi byte có các bất lợi sau:

- Khó sử dụng không gian bị chiếm hình thức bởi một mẩu tin bị xoá, điều này

dẫn đến một số lớn các mảnh nhỏ của lưu trữ đĩa bị lãng phí.

- Không có không gian cho sự phát triển các mẩu tin. Nếu một mẩu tin độ dài

thay đổi dài ra, nó phải được di chuyển và sự di chuyển này là đắt giá nếu mẩu tin bị

chốt.

- Biểu diễn chuỗi byte không thường được sử dụng để thực hiện mẩu tin độ dài

thay đổi, song một dạng sửa đổi của nó được gọi là cấu trúc khe-trang (slotted-page

structure) thường được dùng để tổ chức mẩu tin trong một khối đơn.

Trong cấu trúc slotted-page, có một header ở bắt đầu của mỗi khối, chứa các

                                           8

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

thông tin sau:

- Số các đầu vào mẩu tin (record entries) trong header

- Điểm cuối không gian tự do (End of Free Space) trong khối

- Một mảng các đầu vào chứa vị trí và kích cỡ của mỗi mẩu tin

Các mẩu tin hiện hành được cấp phát kề nhau trong khối, bắt đàu từ cuối khối,

Không gian tự do trong khối là một vùng kề nhau, nằm giữa đầu vào cuối cùng trong

mảng header và mẩu tin đàu tiên. Khi một mẩu tin được chèn vào, không gian cấp phát

cho nó ở cuối của không gian tự do, và đầu vào tương ứng với nó được thêm vào

header.

Nếu một mẩu tin bị xoá, không gian bị chiếm bởi nó được giải phóng, đầu vào

ứng với nó được đặt là bị xoá (kích cỡ của nó được đặt chẳng hạn là -1). Sau đó, các

mẩu tin trong khối trước mẩu tin bị xoá được di chuyển sao cho không gian tự do của

khối lại là phần nằm giữa đầu vào cuối cùng của mảng header và mẩu tin đầu tiên. Con

trỏ điểm cuối không gian tự do và các con trỏ ứng với mẩu tin bị di chuyển được cập

nhật. Sự lớn lên hay nhỏ đi của mẩu tin cũng sử dụng kỹ thuật tương tự (trong trường

hợp khối còn không gian cho sự lớn lên của mẩu tin). Cái giá phải trả cho sự di chuyển

không quá cao vì các khối có kích cỡ không lớn ( thường 4Kbytes).

Biểu diễn độ dài cố định

Một cách khác để thực hiện mẩu tin độ dài thay đổi một cách hiệu quả trong

một hệ thống file là sử dụng một hoặc một vài mẩu tin độ dài cố định để biểu diễn một

mẩu tin độ dài thay đổi. Hai kỹ thuật thực hiện file của các mẩu tin độ dài thay đổi sử

dụng mẩu tin độ dài cố định là:

1. Không gian dự trữ (reserved space). Giả thiết rằng các mẩu tin có độ dài

không vượt quá một ngưỡng (độ dài tối đa). Ta có thể sử dụng mảu tin độ dài cố định

(có độ dài tối đa), Phần không gian chưa dùng đến được lấp đầy bởi một ký tự đặc

biệt: null hoặc End-of-record. Như vậy, tất cả các mẩu tin trong một khối có cùng độ

dài, cho dù file có thể chứa các  mẩu tin không cùng độ dài.

                                             9

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

2. Contrỏ (Pointers). Mẩu tin độ dài thay đổi được biểu diễn bởi một danh

sách các mẩu tin độ dài cố định, được "móc xích" với nhau bởi các con trỏ.

Sự bất lợi của cấu trúc con trỏ là lãng phí không gian trong tất cả các mẩu tin

ngoại trừ mẩu tin đầu tiên trong danh sách (mẩu tin đầu tiên cần trường branch_name,

các mẩu tin sau trong danh sách không cần thiết có trường này!). Để giải quyết vấn đề

này người ta đề nghị phân các khối trong file thành hai loại:

Khối neo (Anchor block). chứa chỉ các mẩu tin đầu tiên trong danh sách

Khối tràn (Overflow block). chứa các mẩu tin còn lại của danh sách

                                              50

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

3.5.3. Tổ chức các mẫu tin trong file

Ta đã xét làm thế nào để biểu diễn các mẩu tin trong một cấu trúc file. Một thể

hiện của một quan hệ là một tập hợp các mẩu tin. Đã cho một tập hợp các mẩu tin, vấn

đề đặt ra là làm thế nào để tổ chức chúng trong một file. Có một số cách tổ chức sau:

Tổ chức file đống (Heap File Organization). Trong tổ chức này, một mẩu tin

bất kỳ có thể được lưu trữ ở bất kỳ nơi nào trong file, ở đó có không gian cho nó.

Không có thứ tự nào giữa các mẩu tin. Một file cho một quan hệ.

Tổ chức file tuần tự ( Sequential File Organization). Trong tổ chức này, các

mẩu tin được lưu trữ thứ tự tuần tự, dựa trên giá trị của khoá tìm kiếm của mỗi mẩu

tin.

Tổ chức file băm (Hashed File Organization). Trong tổ chức này, có một

hàm băm được tính toán trên thuộc tính nào đó của mẩu tin. Kết quả của hàm băm xác

định mẩu tin được bố trí trong khối nào trong file. Tổ chức này liên hệ chặt chẽ với

cấu trúc chỉ mục.

Tổ chức file cụm (Clustering File Organization). Trong tổ chức này, các mẩu

tin của một vài quan hệ khác nhau có thể được lưu trữ trong cùng một file. Các mẩu tin

có liên hệ của các quan hệ khác nhau được lưu trữ trên cùng một khối sao cho một

                                               51

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

hoạt động I/O đem lại các mẩu tin có liên hệ từ tất cả các quan hệ.

3.5.4. Tổ chức file tuần tự

Tổ chức file tuần tự được thiết kế để xử lý hiệu quả các mẩu tin trong thứ tự

được sắp dựa trên một khoá tìm kiếm (search key) nào đó. Để cho phép tìm lại nhanh

chóng các mẩu tin theo thứ tự khoá tìm kiếm, ta "xích" các mẩu tin lại bởi các con trỏ.

Con trỏ trong mỗi mẩu tin trỏ tới mẩu tin kế theo thứ tự khoá tìm kiếm. Hơn nữa, để

tối ưu hoá số khối truy xuất trong xử lý file tuần tự, ta lưu trữ vật lý các mẩu tin theo

thứ tự khoá tìm kiếm hoặc gần với khoá tìm kiếm như có thể.

Tổ chức file tuần tự cho phép đọc các mẩu tin theo thứ tự được sắp mà nó có

thể hưu dụng cho mục đích trình bày cũng như cho các thuật toán xử lý vấn tin (query-

processing algorithms).

Khó khăn gặp phải của tổ chức này là việc duy trì thứ tự tuần tự vật lý của các

mẩu tin khi xảy ra các hoạt động chèn, xoá, do cái giá phải trả cho việc di chuyển các

mẩu tin khi chèn, xoá. Ta có thể quản trị vấn đề xoá bởi dùng dây chuyền các con trỏ

như đã trình bày trước đây. Đối với chèn, ta có thể áp dụng các quy tắc sau:

1. Định vị mẩu tin trong file mà nó đi trước mẩu tin được chèn theo thứ tự

khoá tìm kiếm.

2. Nếu có mẩu tin tự do (không gian của mẩu tin bị xoá) trong cùng khối, chèn

mẩu tin vào khối này. Nếu không, chèn mẩu tin mới vào một khối tràn. Trong cả hai

trường hợp, điều chỉnh các con trỏ sao cho nó móc xích các mẩu tin theo thứ tự của

                                                  52

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

khoá tìm kiếm.

3.5.5. Tổ chức file cụm

Nhiều hệ CSDL quan hệ, mỗi quan hệ được lưu trữ trong một file sao cho có

thể lợi dụng được toàn bộ những cái mà hệ thống file của điều hành cung cấp. Thông

thường, các bộ của một quan hệ được biểu diễn như các mẩu tin độ dài cố định. Như

vậy các quan hệ có thể ánh xạ vào một cấu trúc file. Sự thực hiện đơn giản đó của một

hệ CSDL quan hệ rất phù hợp với các hệ CSDL được thiết kế cho các máy tính cá

nhân. Trong các hệ thống đó, kích cỡ của CSDL nhỏ. Hơn nữa, trong một số máy tính

cá nhân, chủ yếu kích cỡ tổng thể mã đối tượng đối với hệ CSDL là nhỏ. Một cấu trúc

file đơn giản làm suy giảm lượng mã cần thiết để thực thi hệ thống.

Cách tiếp cận đơn giản này, để thực hiện CSDL quan hệ, không còn phù hợp

khi kích cỡ của CSDL tăng lên. Ta sẽ thấy những điểm lợi về mặt hiệu năng từ việc

gán một cách thận trọng các mẩu tin với các khối, và từ việc tổ chức kỹ lưỡng chính

bản thân các khối. Như vậy, có vẻ như là một cấu trúc file phức tạp hơn lại có lợi hơn,

ngay cả trong trường hợp ta giữ nguyên chiến lược lưu trữ mỗi quan hệ trong một file

riêng biệt.

Tuy nhiên, nhiều hệ CSDL quy mô lớn không nhờ cậy trực tiếp vào hệ điều

hành nền để quản trị file. Thay vào đó, một file hệ điều hành được cấp phát cho hệ

CSDL. Tất cả các quan hệ được lưu trữ trong một file này, và sự quản trị file này thuộc

                                                53

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

về hệ CSDL. Để thấy những điểm lợi của việc lưu trữ nhiều quan hệ trong cùng một

file, ta xét vấn tin SQL sau:

SELECT account_number, customer_number, customer_treet, customer_city

FROM  depositor, customer

WHERE depositor.customer_name = customer.customername;

Câu vấn tin này tính một phép nối của các quan hệ depositor và customer. Như

vậy, đối  với mỗi bộ của depositor, hệ thống phải tìm bộ của customer có cùng giá trị

customer_name. Một cách lý tưởng là việc tìm kiếm các mẩu tin này nhờ sự trợ giúp

của chỉ mục. Bỏ qua việc tìm kiếm các mẩu tin như thế nào, ta chú ý vào việc truyền từ

đĩa vào bộ nhớ. Trong trường hợp xấu nhất, mỗi mẩu tin ở trong một khối khác nhau,

điều này buộc ta phải đọc một khối cho một mẩu tin được yêu cầu bởi câu vấn tin. Ta

sẽ trình bày một cấu trúc file được thiết kế để thực hiện hiệu quả các câu vấn tin liên

quan đến depositor customer. Các bộ depositor đối với mỗi customer_name được lưu

trữ gần bộ customer có cùng customer_name. Cấu trúc này trộn các bộ của hai quan hệ

với nhau, nhưng cho phép xử lý hiệu quả phép nối. Khi một bộ của của quan hệ

customer được đọc, toàn bộ khối chứa bộ này được đọc từ đĩa vào trong bộ nhớ chính.

Do các bộ tương ứng của depositor được lưu trữ trên đĩa gần bộ customer, khối chứa

bộ customer chứa các bộ của quan hệ depositor cần cho xử lý câu vấn tin. Nếu một

customer có nhiều account đến nỗi các mẩu tin depositor không lấp đầy trong một

khối, các mẩu tin còn lại xuất hiện trong khối kế cận. Cấu trúc file này, được gọi là

gom cụm (clustering), cho phép ta đọc nhiều mẩu tin được yêu cầu chỉ sử dụng một

đọc khối, như vậy ta có thể xử lý câu vấn tin đặc biệt này hiệu quả hơn.

Tuy nhiên, cấu trúc gom cụm trên lại tỏ ra không có lợi bằng tổ chức lưu mỗi

quan hệ trong một file riêng, đối với một số câu vấn tin, chẳng hạn:

SELECT *

FROM customer

Việc xác định khi nào thì gom cụm thường phụ thuộc vào kiểu câu vấn tin mà

người thiết kế CSDL nghĩ rằng nó xẩy ra thường xuyên nhất. Sử dụng thận trọng gom

cụm có thể cải thiện hiệu năng đáng kể trong việc xử lý câu vấn tin.

3.6. Lưu trữ tự điển dữ liệu

                                                54

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Một hệ CSDL cần thiết duy trì dữ liệu về các quan hệ, như sơ đồ của các quan

hệ. Thông tin này được gọi là tự điển dữ liệu (data dictionary) hay mục lục hệ thống

(system catalog). Trong các kiểu thông tin mà hệ thống phải lưu trữ là:

- Các tên của các quan hệ

- Các tên của các thuộc tính của mỗi quan hệ

- Các miền (giá trị) và các độ dài của các thuộc tính

- Các tên của các View được định nghĩa trên CSDL và định nghĩa của các view

này

- Các ràng buộc toàn vẹn .

Nhiều hệ thống còn lưu trữ các thông tin liên quan đến người sử dụng hệ thống:

- Tên của người sử dụng được phép

- Giải trình thông tin về người sử dụng

Các dữ liệu thống kê và mô tả về các quan hệ có thể cũng được lưu trữ:

-  Số bộ trong mỗi quan hệ

- Phương pháp lưu trữ được sử dụng cho mỗi quan hệ (cụm hay không)

Các thông tin về mỗi chỉ mục trên mỗi quan hệ cũng cần được lưu trữ :

- Tên của chỉ mục

- Tên của quan hệ được chỉ mục

- Các thuộc tính trên nó chỉ mục được định nghĩa

- Kiểu của chỉ mục được tạo

Toàn bộ các thông tin này trong thực tế bao hàm một CSDL nhỏ. Một số hệ

CSDL sử dụng những cấu trúc dữ liệu và mã mục đích đặc biệt để lưu trữ các thông tin

này. Nói chung, lưu trữ dữ liệu về CSDL trong chính CSDL vẫn được ưa chuộng hơn.

Bằng cách sử dụng CSDL để lưu trữ dữ liệu hệ thống, ta đơn giản hoá cấu trúc tổng

thể của hệ thống và cho phép sử dụng đầy đủ sức mạnh của CSDL trong việc truy xuất

nhanh đến dữ liệu hệ thống.

Sự chọn lựa chính xác biểu diễn dữ liệu hệ thống sử dụng các quan hệ như thế

nào là do người thiết kế hệ thống quyết định.

3.7. Chỉ mục

Ta xét hoạt động tìm sách trong một thư viện. Ví dụ ta muốn tìm một cuốn sách

của một tác giả nào đó. Đầu tiên ta tra trong mục lục tác giả, một tấm thẻ trong mục

lục này sẽ chỉ cho ta biết có thể tìm thấy cuốn sách đó ở đâu. Các thẻ trong một mục

                                             55

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

lục được thư viện sắp xếp thứ tự theo vần chữ cái , như vậy giúp ta có thể tìm đến thẻ

cần tìm nhanh chóng không cần phải duyệt qua tất cả các thẻ. Chỉ mục của một file

trong các công việc hệ thống rất giống với một mục lục trong một thư viện. Tuy nhiên,

chỉ mục được làm như mục lục được mô tả như trên, trong thực tế, sẽ quá lớn để được

quản lý một cách hiệu quả. Thay vào đó, người ta sử dụng các kỹ thuật chỉ mục tinh tế

hơn. Có hai kiểu chỉ mục:

Chỉ mục được sắp (Ordered indices). được dựa trên một thứ tự sắp xếp theo

các giá trị

Chỉ mục băm (Hash indices). được dựa trên các giá trị được phân phối đều

qua các bucket. Bucket mà một giá trị được gán với nó được xác định bởi một hàm,

được gọi là hàm băm (hash function)

Đối với cả hai kiểu này, ta sẽ nêu ra một vài kỹ thuật, đáng lưu ý là không kỹ

thuật nào là tốt nhất. Mỗi kỹ thuật phù hợp với các ứng dụng CSDL riêng biệt. Mỗi kỹ

thuật phải được đánh giá trên cơ sở của các nhân tố sau:

Kiểu truy xuất: Các kiểu truy xuất được hỗ trợ hiệu quả. Các kiểu này bao hàm

cả tìm kiếm mẩu tin với một giá trị thuộc tính cụ thể hoặc tìm các mẩu tin với giá trị

thuộc tính nằm trong một khoảng xác định.

Thời gian truy xuất: Thời gian để tìm kiếm một hạng mục dữ liệu hay một tập

các hạng mục.

Thời gian chèn: Thời gian để chèn một hạng mục dữ liệu mới. giá trị này bao

hàm thời gian để tìm vị trí chèn thích hợp và thời gian cập nhật cấu trúc chỉ mục.

Thời gian xoá: Thời gian để xoá một hạng mục dữ liệu. giá trị này bao hàm

thời gian tìm kiếm hạng mục cần xoá, thời gian cập nhật cấu trúc chỉ mục.

Tổng phí tổn không gian: Không gian phụ bị chiếm bởi một cấu trúc chỉ mục.

Một file thường đi kèm với một vài chỉ mục. Thuộc tính hoặc tập hợp các thuộc tính

được  dùng để tìm kiếm mẩu tin trong một file được gọi là khoá tìm kiếm. Chú ý rằng

định nghĩa này khác với định nghĩa khoá sơ cấp (primary key), khoá dự tuyển

(candidate key), và siêu khoá (superkey). Như vậy, nếu có một vài chỉ mục trên một

file, có một vài khoá tìm kiếm tương ứng.

3.7.1. Chỉ mục được sắp xếp

                                               56

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Một 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

với mỗi khoá tìm kiếm, các mẩu tin chứa khoá tìm kiếm này. Các mẩu tin trong file

được chỉ mục có thể chính nó cũng được sắp. Một file có thể có một vài chỉ mục trên

những khoá tìm kiếm khác nhau. Nếu file chứa các mẩu tin được sắp tuần tự, chỉ mục

trên khoá tìm kiếm xác định thứ tự này của file được gọi chỉ mục sơ cấp (primary

index). Các chỉ mục sơ cấp cũng được gọi là chỉ mục cụm (clustering index). Khoá tìm

kiếm của chỉ mục sơ cấp thường là khoá sơ cấp (khoá chính). Các chỉ mục, khoá tìm

kiếm của nó xác định một thứ tự khác với thứ tự của file, được gọi là các chỉ mục thứ

cấp (secondary indices) hay các chỉ mục không cụm (nonclustering indices).

Chỉ mục sơ cấp

Trong phần này, ta giả thiết rằng tất cả các file được sắp thứ tự tuần tự trên một

khoá tìm kiếm nào đó. Các file như vậy, với một chỉ mục sơ cấp trên khoá tìm kiếm

này, được gọi là file tuần tự chỉ mục (index-sequential files). Chúng biểu diễn một

trong các sơ đồ xưa nhất được dùng trong hệ CSDL. Chúng được thiết kế cho các ứng

dụng đòi hỏi cả xử lý tuần tự toàn bộ file lẫn truy xuất ngẫu nhiên đến một mẩu tin.

Chỉ mục đặc và chỉ mục thưa (Dense and Sparse Indices):Có hai loại chỉ mục

được sắp:

Chỉ mục đặc. Mỗi mẩu tin chỉ mục (đầu vào chỉ mục/ index entry) xuất hiện

đối với mỗi giá trị khoá tìm kiếm trong file. mẩu tin chỉ mục chứa giá trị khoá tìm

kiếm và một con trỏ tới mẩu tin dữ liệu đầu tiên với giá trị khoá tìm kiếm đó.

Chỉ mục thưa. Một mẩu tin chỉ mục được tạo ra chỉ với một số giá trị. Cũng

như với chỉ mục đặc, mỗi mẩu tin chỉ mục chứa một giá trị khoá tìm kiếm và một con

trỏ tới mẩu tin dữ liệu đầu tiên với giá trị khoá tìm kiếm này. Để định vị một mẩu tin,

                                                57

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

ta tìm đầu vào chỉ mục với giá trị khoá tìm kiếm lớn nhất trong các giá trị khoá tìm

kiếm nhỏ hơn hoặc bằng giá trị khoá tìm kiếm đang tìm. Ta bắt đầu từ mẩu tin được

trỏ tới bởi đầu vào chỉ mục, và lần theo các con trỏ trong file (dữ liệu) đến tận khi tìm

thấy mẩu tin mong muốn.

Ví dụ 3.1. Giả sử ta tìm các kiếm mẩu tin đối với chi nhánh Perryridge, sử dụng chỉ

mục đặc. Đầu tiên, tìm Perryridge trong chỉ mục (tìm nhị phân!), đi theo con trỏ tương

ứng đến mẩu tin dữ liệu (với Branch_name = Perryridge) đầu tiên, xử lý mẩu tin này,

sau đó đi theo con trỏ trong mẩu tin này để định vị mẩu tin kế trong thứ tự khoá tìm

kiếm, xử lý mẩu tin này, tiếp tục như vậy đến tận khi đạt tới mẩu tin có Branch_name

khác với Perryridge.

Đối với chỉ mục thưa, đầu tiên tìm trong chỉ mục, đầu vào có Branch_name lớn

nhất trong các đầu vào có Branch_name nhỏ hơn hoặc bằng Perryridge, ta tìm được

đầu vào với Mianus, lần theo con trỏ tương ứng đến mẩu tin dữ liệu, đi theo con trỏ

trong mẩu tin Mianus để định vị mẩu tin kế trong thứ tự khoá tìm kiếm và cứ như vậy

đến tận khi đạt tới mẩu tin dữ liệu Perryridge đầu tiên, sau đó xử lý bắt đầu từ điểm

này.

Chỉ mục đặc cho phép tìm kiếm mẩu tin nhanh hơn chỉ mục thưa, song chỉ mục

thưa lại đòi hỏi ít không gian hơn chỉ mục đặc. Hơn nữa, chỉ mục thưa yêu cầu một tổn

phí duy trì nhỏ hơn đối với các hoạt động chèn, xoá.

Người thiết kế hệ thống phải cân nhắc sự cân đối giữa thời truy xuất và tổn phí

không gian. Một thoả hiệp tốt là có một chỉ mục thưa với một đầu vào chỉ mục cho

mỗi khối, vì như vậy cái giá nổi trội trong xử lý một yêu cầu CSDL là thời gian mang

                                                  58

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

một khối từ đĩa vào bộ nhớ chính. Mỗi khi một khối được mang vào, thời gian quét

toàn bộ khối là không đáng kể. Sử dụng chỉ mục thưa, ta tìm khối chứa mẩu tin cần

tìm. Như vậy, trừ phi mẩu tin nằm trên khối tràn, ta tối thiểu hoá được truy xuất khối,

trong khi giữ được kích cỡ của chỉ mục nhỏ như có thể.

Chỉ mục nhiều mức

Chỉ mục có thể rất lớn, ngay cả khi sử dụng chỉ mục thưa, và không thể chứa đủ

trong bộ nhớ một lần. Tìm kiếm đầu vào chỉ mục đối với các chỉ mục như vậy đòi hỏi

phải đọc vài khối đĩa. Tìm kiếm nhị phân có thể được sử dụng để tìm một đầu vào trên

file chỉ mục, song vẫn phải truy xuất khoảng logB khối, với B là số khối đĩa chứa chỉ

mục. Nếu B lớn, thời gian truy xuất này là đáng kể! Hơn nữa nếu sử dụng các khối

tràn, tìm kiếm nhị phân không sử dụng được và như vậy việc tìm kiếm phải làm tuần

tự. Nó đòi hỏi truy xuất lên đến B khối!

Để giải quyết vấn đề này, Ta xem file chỉ mục như một file tuần tự và xây dựng

chỉ mục thưa cho nó. Để tìm đầu vào chỉ mục, ta tìm kiếm nhị phân trên chỉ mục

"ngoài" để được mẩu tin có khoá tìm kiếm lớn nhất trong các mẩu tin có khoá tìm

kiếm nhỏ hơn hoặc bằng khoá muốn tìm.

Con trỏ tương ứng trỏ tới khối của chỉ mục "trong". Trong khối này, tìm kiếm

mẩu tin có khoá tìm kiếm lớn nhất trong các mẩu tin có khoá tìm kiếm nhỏ hơn hoặc

bằng khoá muốn tìm, trường con trỏ của mẩu tin này trỏ đến khối chứa mẩu tin cần

tìm. Vì chỉ mục ngoài nhỏ, có thể nằm sẵn trong bộ nhớ chính, nên một lần tìm kiếm

chỉ cần một truy xuất khối chỉ mục. Ta có thể lặp lại quá trình xây dựng trên nhiều lần

                                                59

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

khi cần thiết. Chỉ mục với không ít hơn hai mức được gọi là chỉ mục nhiều mức. Với

chỉ mục nhiều mức, việc tìm kiếm mẩu tin đòi hỏi truy xuất khối ít hơn đáng kể so với

tìm kiếm nhị phân.

3.7.2. Cập nhật chỉ mục

Mỗi khi chèn hoặc xoá một mẩu tin, bắt buộc phải cập nhật các chỉ mục kèm

với file chứa mẩu tin này. Dưới đây, ta mô tả các thuật toán cập nhật cho các chỉ mục

một mức

Xoá: Để xoá một mẩu tin, đầu tiên phải tìm mẩu tin muốn xoá. Nếu mẩu tin bị

xoá là mẩu tin đầu tiên trong dây chuyền các mẩu tin được xác định bởi con trỏ của

đầu vào chỉ mục trong quá trình tìm kiếm, có hai trường hợp phải xét: nếu mẩu tin bị

xoá là mẩu tin duy nhất trong dây chuyền, ta xoá đầu vào trong chỉ mục tương ứng,

nếu không, ta thay thế khoá tìm kiếm trong đầu vào chỉ mục bởi khoá tìm kiếm của

mẩu tin kề sau mẩu tin bị xoá trong dây chuyền, con trỏ bởi địa chỉ mẩu tin kề sau đó.

Trong trường hợp khác, việc xoá mẩu tin không dẫn đến việc điều chỉnh chỉ mục.

Chèn: Trước tiên, tìm kiếm dựa trên khoá tìm kiếm của mẩu tin được chèn.

Nếu là chỉ mục đặc và giá trị khoá tìm kiếm không xuất hiện trong chỉ mục, chèn giá

trị khoá này và con trỏ tới mẩu tin vào chỉ mục. Nếu là chỉ mục thưa và lưu đầu vào

cho mỗi khối, không cần thiết phải thay đổi trừ phi khối mới được tạo ra. Trong trường

hợp đó, giá trị khoá tìm kiếm đầu tiên trong khối mới được chèn vào chỉ mục.

Giả thuật chèn và xoá đối với chỉ mục nhiều mức là một mở rộng đơn giản của

các giả thuật vừa được mô tả.

3.7.3. Chỉ mục thứ cấp

Chỉ mục thứ cấp trên một khoá dự tuyển giống như chỉ mục sơ cấp đặc ngoại

trừ các mẩu tin được trỏ đến bởi các giá trị liên tiếp trong chỉ mục không được lưu trữ

tuần tự. Nói chung, chỉ mục thứ cấp có thể được cấu trúc khác với chỉ mục sơ cấp. Nếu

khoá tìm kiếm của chỉ mục sơ cấp không là khoá dự tuyển, chỉ mục chỉ cần trỏ đến

mẩu tin đầu tiên với một giá trị khoá tìm kiếm riêng là đủ (các mẩu tin khác cùng giá

trị khoá này có thể tìm lại được nhờ quét tuần tự file).

Nếu khoá tìm kiếm của một chỉ mục thứ cấp không là khoá dự tuyển, việc trỏ

tới mẩu tin đầu tiên với giá trị khoá tìm kiếm riêng không đủ, do các mẩu tin trong file

                                                 60

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

không còn được sắp tuần tự theo khoá tìm kiếm của chỉ mục thứ cấp, chúng có thể

nằm ở bất kỳ vị trí nào trong file. Bởi vậy, chỉ mục thứ cấp phải chứa tất cả các co trỏ

tới mỗi mẩu tin. Ta có thể sử dụng mức phụ gián tiếp để thực hiện chỉ mục thứ cấp

trên các khoá tìm kiếm không là khoá dự tuyển. Các con trỏ trong chỉ mục thứ cấp như

vậy không trực tiếp trỏ tới mẩu tin mà trỏ tới một bucket chứa các con trỏ tới file.

Chỉ mục thứ cấp phải là đặc, với một đầu vào chỉ mục cho mỗi mẩu tin. Chỉ

mục thứ cấp cải thiện hiệu năng các vấn tin sử dụng khoá tìm kiếm không là khóa của

chỉ mục sơ cấp, tuy nhiên nó lại đem lại một tổn phí sửa đổi CSDL đáng kể.Việc quyết

định các chỉ mục thứ cấp nào là cần thiết dựa trên đánh giá của nhà thiết kế CSDL về

tần xuất vấn tin và sửa đổi.

3.8. File chỉ mục B+-Cây

Tổ chức file chỉ mục tuần tự có một nhược điếm chính là làm giảm hiệu năng

khi file lớn lên. Để khắc phục nhược điểm đó đòi hỏi phải tổ chức lại file. Cấu trúc chỉ

mục B+-cây là cấu trúc được sử dụng rộng rãi nhất trong các cấu trúc đảm bảo được

tính hiệu quả của chúng bất chấp các hoạt động chèn, xoá. Chỉ mục B+-cây là một

dạng cây cân bằng (mọi đường dẫn từ gốc đến lá có cùng độ dài). Mỗi nút không là lá

có số con nằm trong khoảng giữa m/2, trong đó m là một số cố định được gọi là bậc

của B+-cây. Ta thấy rằng cấu trúc B+-cây cũng đòi hỏi một tổn phí hiệu năng trên

chèn và xoá cũng như trên không gian. Tuy nhiên, tổn phí này là chấp nhận được ngay

cả đối với các file có tần suất sửa đổi cao.

Cấu trúc của B+-cây

Một chỉ mục B+-cây là một chỉ mục nhiều mức, nhưng có cấu trúc khác với file

                                                 61

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

tuần tự chỉ mục nhiều mức (multilevel index-sequential). Một nút tiêu biểu của B+-cây

chứa đến n-1 giá trị khoá tìm kiếm. K1, K2, ..., Kn-1, và n con trỏ P1, P2, ..., Pn, các giá

trị khoá trong nút được sắp thứ tự: i < j ⇒ Ki < Kj.

Trước tiên, ta xét cấu trúc của nút lá. Đối với i = 1, 2, ..., n-1, con trỏ Pi trỏ tới

hoặc mẩu tin với giá trị khoá Ki hoặc tới một bucket các con trỏ mà mỗi một trong

chúng trỏ tới một mẩu tin với giá trị khoá Ki. Cấu trúc bucket chỉ được sử dụng trong

các trường hợp: hoặc khoá tìm kiếm không là khoá sơ cấp hoặc file không được sắp

theo khoá tìm kiếm. Con trỏ Pn được dùng vào mục đích đặc biệt: Pn được dùng để

móc xích các nút lá lại theo thứ tự khoá tìm kiếm, điều này cho phép xử lý tuần tự file

hiệu quả. Bây giờ ta xem các giá trị khoá tìm kiếm được gắn với một nút lá như thế

nào. Mỗi nút nút lá có thể chứa đến n-1 giá trị. Khoảng giá trị mà mỗi nút lá chứa là

không chồng chéo. Như vậy, nếu Li và Lj là hai nút lá với i < j thì mỗi giá trị khoá

trong nút Li nhỏ hơn mọi giá trị khoá trong Lj . Nếu chỉ mục B+-cây là đặc, mỗi giá trị

khoá tìm kiếm phải xuất hiện trong một nút lá nào đó.

Các nút không là lá của một B+-cây tạo ra một chỉ mục nhiều mức trên các nút

lá. Cấu trúc của các nút không là lá tương tự như cấu trúc nút lá ngoại trừ tất cả các

con trỏ đều trỏ đến các nút của cây. Các nút không là lá có thể chứa đến m con trỏ và

phải chứa không ít hơn m/2 con trỏ ngoại trừ nút gốc. Nút gốc được phép chứa ít

nhất 2 con trỏ. Số con trỏ trong một nút được gọi là số nan (fanout) của nút.

                                                     62

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Con trỏ Pi của một nút không là lá (chứa p con trỏ, 1 < i < p) trỏ đến một cây

con chứa các giá trị khoá tìm kiếm nhỏ hơn Ki và lớn hơn hoặc bằng Ki-1. Con trỏ P1

trỏ đến cây con chứa các giá trị khoá tìm kiếm nhỏ hơn K1. Con trỏ Pp trỏ tới cây con

chứa các khoá tìm kiếm lớn hơn Kp-1.

3.8.1. Các vấn tin trên B+- cây

Ta xét xử lý vấn tin sử dụng B+-cây như thế nào ? Giả sử ta muốn tìn tất cả các

mẩu tin với giá trị khoá tìm kiếm k. Đầu tiên, ta kiểm tra nút gốc, tìm giá trị khoá tìm

kiếm nhỏ nhất lớn hơn k, giả sử giá trị khoá đó là Ki. Đi theo con trỏ Pi để đi tới một

nút khác. Nếu nút có p con trỏ và k > Kp-1, đi theo con trỏ Pp. Đến một nút tới, lặp lại

quá trình tìm kiếm giá trị khoá tìm kiếm nhỏ nhất lớn hơn k và theo con trỏ tương ứng

để đi tới một nút khác và tiếp tục như vậy đến khi đạt tới một nút lá. Con trỏ tương

ứng trong nút lá hướng ta tới mẩu tin/bucket mong muốn Số khối truy xuất không vượt

quá logm/2 , trong đó K là số giá trị khoá tìm kiếm trong B+- cây, m là bậc của cây.

3.8.2. Cập nhật trên B+-cây

Chèn: Sử dụng cùng kỹ thuật như tìm kiếm, ta tìm nút lá trong đó giá trị khoá

tìm kiếm cần chèn sẽ xuất hiện. Nếu khoá tìm kiếm đã xuất hiện rồi trong nút lá, chèn

mẩu tin vào trong file, thêm con trỏ tới mẩu tin vào trong bucket tương ứng. Nếu khoá

tìm kiếm chưa hiện diện trong nút lá, ta chèn mẩu tin vào trong file rồi chèn giá trị

khoá tìm kiếm vào trong nút lá ở vị trí đúng (bảo tồn tính thứ tự), tạo một bucket mới

với con trỏ tương ứng. Nếu nút lá không còn chỗ cho giá trị khoá mới, Một khối mới

được yêu cầu từ hệ điều hành, các giá trị khoá trong nút lá được tách một nửa cho nút

mới, giá trị khoá mới được chèn vào vị trí đúng của nó vào một trong hai khối này.

Điều này kéo theo việc chèn giá trị khoá đầu khối mới và con trỏ tới khối mới vào nút

cha. Việc chèn cặp giá trị khoá và con trỏ vào nút cha này lại có thể dẫn đến việc tách

nút ra làm hai. Quá trình này có thể dẫn đến tận nút gốc. Trong trường hợp nút gốc bị

tách làm hai, một nút gốc mới được tạo ra và hai con của nó là hai nút được tách ra từ

nút gốc cũ, chiều cao cây tăng lên một.

Procedure Insert(value V, pointer P)

Tìm nút lá L sẽ chứa giá trị V

Insert_entry(L, V, P)

end procedure

                                                 63

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Procedure Insert_entry(node L, value V, pointer P)

If (L có không gian cho (V, P) then

Chèn (V, P) vào L

else begin /* tách L */

Tạo nút L'

If ( L là nút lá) then begin

V' là giá trị sao cho m/2 giá trị trong các giá trị L.K1, L.K2, .., L.Km-1, V

nhỏ hơn V' n là chỉ số nhỏ nhất sao cho L.Kn ≥ V'

Di chuyển L.Pn, L.Kn, ..., L.Pm-1, L.Kn-1 sang L'

If (V < V') then chèn (V, P) vào trong L else chèn (P, V) vào trong L'

end else begin

V' là giá trị sao cho m/2 giá trị trong các giá trị L.K1, L.K2, ..., L.Km-1, V lớn

hơn hoặc bằng V'

n là chỉ số nhỏ nhất sao cho L.Kn ≥ V'

Thêm Nil, L.Kn, L.Pn+1, Kn+1, ..., L.Pm-1, L.Km-1, L.Pm vào L'

Xoá L.Kn, L.Pn+1, L.Kn+1, ..., L.Pm-1, L.Km-1, L.Pm khỏi L

If (V < V') then chèn (P, V) vào trong L else chèn P, V) vào trong L' xoá (Nil,

V') khỏi L'

end

if (L không là nút gốc) then Insert_entry(parent(L), V', L') else begin

Tạo ra nút mới R với các nút con là L và L' với giá trị duy

nhất trong nó là V' Tạo R là gốc của cây

end

If (L) là một nút lá then begin đặt L'.Pm = L.Pm

đặt L.Pm = L'

end

end

end procedure

                                             64

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Xoá: Sử dụng kỹ thuật tìm kiếm tìm mẩu tin cần xoá, xoá nó khỏi file, xoá giá

trị khoá tìm kiếm khỏi nút lá trong B+-cây nếu không có bucket kết hợp với giá trị

khoá tìm kiếm hoặc bucket trở nên rỗng sau khi xoá con trỏ tương ứng trong nó. Việc

xoá một giá trị khoá khỏi một nút của B+-cây có thể dẫn đến nút lá trở nên rỗng, phải

trả lại, từ đó nút cha của nó có thể có số con nhỏ hơn ngưỡng cho phép, trong trường

hợp đó hoặc phải chuyển một con từ nút anh em của nút cha đó sang nút cha nếu điều

đó có thể (nút anh em của nút cha này còn số con ≥ m/2 sau khi chuyển đi một con).

Nếu không, phải gom nút cha này với một nút anh em của nó, điều này dẫn tới xoá

một nút trong khỏi cây, rồi xoá khỏi nút cha của nó một hạng, ... quá trình này có thể

dẫn đến tận gốc. Trong trường hợp nút gốc chỉ còn một con sau xoá, cây phải thay nút

gốc cũ bởi nút con của nó, nút gốc cũ phải trả lại cho hệ thống, chiều cao cây giảm đi

một.

Procedure delete(value V, pointer P)

Tìm nút lá chứa (V, P)

delete_entry(L, V, P)

end procedure

Procedure delete_entry(node L, value V, pointer P)

xoá (V, P) khỏi L

If (L là nút gốc and L chỉ còn lại một con) then

Lấy con của L làm nút gốc mới của cây, xoá L

else If (L có quá ít giá trị/ con trỏ) then begin

L' là anh em kề trái hoặc phải của L

V' là giá trị ở giữa hai con trỏ L, L' (trong nút parent(L))

If (các đầu vào của L và L' có thể lấp đầy trong một khối) then begin

If (L là nút trước của L') then wsap_variables(L, L')

If (L không là lá) then nối V' và tất cả con trỏ, giá trị trong L với L'

else begin nối tất cả các cặp (K, P) trong L với L'; L'.Pp = L.Pp end

delete_entry(parent(L), V', L); xoá nút L

end

else begin

If (L' là nút trước của L) then begin

If (L không là nút lá) then begin

                                               65

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

p là chỉ số sao cho L'.Pp là con trỏ cuối trong L' xoá (L'.Kp-1, L'.Pp) khỏi L'

chèn (L'.Pp, V') như phần tử đầu tiên trong L (right_shift tất cả các phần tử của

L) thay thế V' trong parent(L) bởi L'.Kp-1

end else begin

p là chỉ số sao cho L'.Pp là con trỏ cuối trong L' xoá (L'.Pp, L'.Kp) khỏi L'

chèn (L'.Pp, L'.Kp) như phần tử đầu tiên trong L (right_shift tất cả các phần tử của L)

thay thế V' trong parent(L) bởi L'.Kp

end

end < đối xứng với trường hợp then >

end

end procedure

3.8.4. Tổ chức file B+-cây

Trong tổ chức file B+-cây, các nút lá của cây lưu trữ các mẩu tin, thay cho các

con trỏ tới file. Vì mẩu tin thường lớn hơn con trỏ, số tối đa các mẩu tin được lưu trữ

trong một khối lá ít hơn số con trỏ trong một nút không lá. Các nút lá vẫn được yêu

cầu được lấp đầy ít nhất là một nửa.  Chèn và xoá trong tổ chức file B+-cây tương tự

như trong chỉ mục B+-cây. Khi B+-cây được sử dụng để tổ chức file, việc sử dụng

không gian là đặc biệt quan trọng,   vì không gian bị chiếm bởi mẩu tin là lớn hơn

nhiều so với không gian bị chiếm bởi (khoá,con trỏ). Ta có thể cải tiến sự sử sụng

không gian trong B+-cây bằng cách bao hàm nhiều nút anh em hơn khi tái phân phối

trong khi tách và trộn. Khi chèn, nếu một nút là đầy, ta thử phân phối lại một số đầu

vào đến một trong các nút kề để tạo không gian cho đầu vào mới. Nếu việc thử này

thất bại, ta mới thực hiện tách nút và phân chia các đầu vào giữa một trong các nút kề

và hai nút nhận được do tách nút. Khi xoá, nếu nút chứa ít hơn 2m/3 đầu vào, ta thử

mượn một đầu vào từ một trong hai nút anh em kề. Nếu cả hai đều có đúng                   2m/3

mẩu tin, ta phân phối lại các đầu vào của nút cho hai nút anh em kề và xoá nút thứ 3.

Nếu k nút được sử dụng trong tái phân phối (k-1 nút anh em), mỗi nút đảm bảo chứa ít

nhất ≤ (k-1)m/k đầu vào. Tuy nhiên, cái giá phải trả cho cập nhật của cách tiếp cận

này sẽ cao hơn.

3.9. File chỉ mục B-Cây

                                                66

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Chỉ mục B-cây tương tự như chỉ mục B+-cây. Sự khác biệt là ở chỗ B-cây loại

bỏ lưu trữ dư thừa các giá trị khoá tìm kiếm. Trong B-cây, các giá trị khoá chỉ xuất

hiện một lần. Do các khoá tìm kiếm xuất hiện trong các nút không là lá không xuất

hiện ở bất kỳ nơi nào khác nữa trong B-cây, ta phải thêm một trường con trỏ cho mỗi

khoá tìm kiếm trong các nút không là lá. Con trỏ thêm vào này trỏ tới hoặc mẩu tin

trong file hoặc bucket tương ứng.

Một nút lá B-cây tổng quát có dạng:

Một nút không là lá có dạng:

Các con trỏ Pi là các con trỏ cây và được dùng như trong B+-cây. Các con trỏ

Bi trong các nút không là lá là các con trỏ mẩu tin hoặc con trỏ bucket. Rõ ràng là số

giá trị khoá trong nút không lá nhỏ hơn số giá trị trong nút lá. Số nút được truy xuất

trong quá trình tìm kiếm trong một B-cây phụ thuộc nơi khoá tìm kiếm được định vị.

Xoá trong một B-cây phức tạp hơn trong một B+-cây. Xoá một đầu vào xuất

hiện ở một nút không là lá kéo theo việc tuyển chọn một giá trị thích hợp trong cây

con của nút chứa đầu vào bị xoá. Nếu khoá Ki bị xoá, khoá nhỏ nhất trong cây con

được trỏ bởi Pi+1 phải được di chuyển vào vị trí của Ki. Nếu nút lá còn lại quá ít đầu

vào, cần thiết các hoạt động bổ Sung.

3.10. Băm

3.10.1. Băm tĩnh

Bất lợi của tổ chức file tuần tự là ta phải truy xuất một cấu trúc chỉ mục để định

vị dữ liệu, hoặc phải sử dụng tìm kiếm nhị phân, và kết quả là có nhiều hoạt động I/O.

Tổ chức file dựa trên kỹ thuật băm cho phép ta tránh được truy xuất một cấu trúc chỉ

mục. Băm cung cung cấp một phương pháp để xây dựng các chỉ mục.

Tổ chức file băm

Trong tổ chức file băm, ta nhận được địa chỉ của khối đĩa chứa một mẩu tin

mong muốn bởi tính toán một hàm trên giá trị khoá tìm kiếm của mẩu tin. thuật ngữ

                                               67

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

bucket được dùng để chỉ một đơn vị lưu trữ. Một bucket kiểu mẫu là một khối đĩa,

nhưng có thể được chọn nhỏ hơn hoặc lớn hơn một khối đĩa.

K ký hiệu tập tất cả các giá trị khoá tìm kiếm, B ký hiệu tập tất cả các địa chỉ bucket.

Một hàm băm h là một hàm từ K vào B : h: K → B

Chèn một mẩu tin với giá trị khoá K vào trong file: ta tính h(K). Giá trị của

h(K) là địa chỉ của bucket sẽ chứa mẩu tin. Nếu có không gian trong bucket cho mẩu

tin, mẩu tin được lưu trữ trong bucket.

Tìm kiếm một mẩu tin theo giá trị khoá K: đầu tiên tính h(K), ta tìm được bucket

tương ứng. sau dó tìm trong bucket này mẩu tin với giá trị khoá K mong muốn.

Xoá mẩu tin với giá trị khoá K: tính h(K), tìm trong bucket tương ứng mẩu tin mong

muốn, xoá nó khỏi bucket.

Hàm băm

Hàm băm xấu nhất là hàm ánh xạ tất cả các giá trị khoá vào cùng một bucket.

Hàm băm lý tưởng là hàm phân phối đều các giá trị khoá vào các bucket, như vậy mỗi

bucket chứa một số lượng mẩu tin như nhau. Ta muốn chọn một hàm băm thoả mãn

các tiêu chuẩn sau:

Phân phối đều: Mỗi bucket được gán cùng một số giá trị khoá tìm kiếm trong tập hợp

tất cả các giá trị khoá có thể

Phân phối ngẫu nhiên: Trong trường hợp trung bình, các bucket được gán một số

lượng giá trị khoá tìm kiếm gần bằng nhau.

Các hàm băm phải được thiết kế thận trọng. Một hàm băm xấu có thể dẫn đến việc tìm

kiếm chiếm một thời gian tỷ lệ với số khoá tìm kiếm trong file.

Điều khiển tràn bucket

Khi chèn một mẩu tin, nếu bucket tương ứng còn chỗ, mẩu tin được chèn vào

bucket, nếu không sẽ xảy ra tràn bucket. Tràn bucket do các nguyên do sau:

- Các bucket không đủ. Số các bucket nB phải thoả mãn nB > nr / fr trong đó nr

là tổng số mẩu tin sẽ lưu trữ, fr là số mẩu tin có thể lấp đầy trong một bucket.

- Sự lệch. Một vài bucket được gán cho một số lượng mẩu tin nhiều hơn các

bucket khác, như vậy một bucket có thể tràn trong khi các bucket khác vẫn còn không

gian. Tình huống này được gọi là sự lệch bucket. Sự lệch xảy ra do hai nguyên nhân:

                                                 68

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

1. Nhiều mẩu tin có cùng khoá tìm kiếm

2. Hàm băm được chọn phân phối các giá trị khoá không đều

Ta quản lý tràn bucket bằng cách dùng các bucket tràn. Nếu một mẩu tin phải

được chèn vào bucket B nhưng bucket B đã đầy, khi đó một bucket tràn sẽ được cấp

cho B và mẩu tin được chèn vào bucket tràn này. Nếu bucket tràn cũng đầy một bucket

tràn mới lại được cấp và cứ như vậy. Tất cả các bucket tràn của một bucket được “móc

xích” với nhau thành một danh sách liên kết. Việc điều khiển tràn dùng danh sách liên

kết như vậy được gọi là dây chuyền tràn. Đối với dây chuyền tràn, thuật toán tìm kiếm

thay đổi chú ít: trước tiên ta cũng tính giá trị hàm băm trên khoá tìm kiếm, ta được

bucket B, kiểm tra các mẩu tin, trong bucket B và tất cả các bucket tràn tương ứng, có

giá trị khoá khớp với giá trị tìm không.

Một cách điều khiển tràn bucket khác là: Khi cần chèn một mẩu tin vào một

bucket nhưng nó đã đầy, thay vì cấp thêm một bucket tràn, ta sử dụng một hàm băm kế

trong một dãy các hàm băm được chọn để tìm bucket khác cho mẩu tin, nếu bucket sau

cũng đầy, ta lại sử dụng một hàm băm kế và cứ như vậy... Dãy các hàm băm thường

được sử dụng là {hi (K) = (hi-1(K) +1) mod nB với 1 ≤ i ≤ nB-1 và h0 là hàm băm cơ sở

}.

Dạng cấu trúc băm sử dụng dây chuyền bucket được gọi là băm mở. Dạng sử

dụng dãy các hàm băm được gọi là băm đóng. Trong các hệ CSDL, cấu trúc băm đóng

thường được ưa dùng hơn.

Chỉ mục băm

Một chỉ mục băm tổ chức các khoá tìm kiếm cùng con trỏ kết hợp vào một cấu

trúc file băm như sau: áp dụng một hàm băm trên khoá tìm kiếm để định danh bucket

sau đó lưu giá trị khoá và con trỏ kết hợp vào bucket này (hoặc vào các bucket tràn).

Chỉ mục băm thường là chỉ mục thứ cấp.

Hàm băm trên số tài khoản được tính theo công thức: h(Account_number) =

(tổng các chữ số trong số tài khoản) mod 7

3.10.2. Băm động

Trong kỹ thuật băm tĩnh (static hashing), tập B các địa chỉ bucket phải là cố

định. Các CSDL phát triển lớn lên theo thời gian. Nếu ta sử dụng băm tĩnh cho CSDL,

ta có ba lớp lựa chọn:

                                               69

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

1. Chọn một hàm băm dựa trên kích cỡ file hiện hành. Sự lụa chọn này sẽ dẫn

đến sự suy giảm hiệu năng khi CSDL lớn lên.

2. Chọn một hàm băm dựa trên kích cỡ file dự đoán trước cho một thời điểm

nào đó trong tương lai. Mặc dù sự suy giảm hiệu năng được cải thiện, một lượng đáng

kể không gian có thể bị lãng phí lúc khởi đầu.

3. Tổ chức lại theo chu kỳ cấu trúc băm đáp ứng sự phát triển kích cỡ file. Một

sự tổ chức lại như vậy kéo theo việc lựa chọn một hàm băm mới, tính lại hàm băm trên

mỗi mẩu tin trong file và sinh ra các gán bucket mới. Tổ chức lại là một hoạt động tốn

thời gian. Hơn nũa, nó đòi hỏi cấm truy xuất file trong khi đang tổ chức lại file.

Kỹ thuật băm động cho phép sửa đổi hàm băm để phù hợp với sự tăng hoặc

giảm của CSDL. Một dạng băm động được gọi là băm có thể mở rộng (extendable

hashing) được thực hiện như sau: Chọn một hàm băm h với các tính chất đều, ngẫu

nhiên và có miền giá trị tương đối rộng, chẳng hạn, là một số nguyên b bit (b thường là

32). Khi khởi đầu ta không sử dụng toàn bộ b bit giá trị băm. Tại một thời điểm, ta chỉ

sử dụng i bit 0 ≤ i ≤ b. i bit này được dùng như một độ dời (offset) trong một bảng địa

chỉ bucket phụ. giá trị i tăng lên hay giảm xuống tuỳ theo kích cỡ CSDL.

Số i xuất hiện bên trên bảng địa chỉ bucket chỉ ra rằng i bit của giá trị băm h(K)

được đòi hỏi để xác định bucket đúng cho K, số này sẽ thay đổi khi kích cỡ file thay

đổi. Mặc dù i bit dược đòi hỏi để tìm đầu vào đúng trong bảng địa chỉ bucket, một số

đầu vào bảng kề nhau có thể trỏ đến cùng một bucket.

Để định vị bucket chứa giá trị khoá tìm kiếm K , ta lấy i bit cao đầu tiên của

h(K), tìm trong đầu vào bảng tương ứng với chuỗi bit này và lần theo con trỏ trong đầu

vào bảng này. Để chèn một mẩu tin với giá trị khoá tìm kiếm K, tiến hành thủ tục dịnh

vị trên, ta được bucket, giả sử là bucket j. Nếu còn cho cho mẩu tin, chèn mẩu tin vào

trong bucket đó. Nếu không, ta phải tách bucket ra và phân phối lại các mẩu tin hiện

có cùng mẩu tin mới. Để tách bucket, đầu tiên ta xác định từ giá trị băm có cần tăng số

bit lên hay không. Nếu i = ij , chỉ có một đầu vào trong bảng địa chỉ bucket trỏ đến

bucket j. ta cần tăng kích cỡ của bảng địa chỉ bucket sao cho ta có thể bao hàm các con

trỏ đến hai bucket kết quả của việc tách bucket j bằng cách xét thêm một bit của giá trị

băm. tăng giá trị i lên một, như vậy kích cỡ của bảng địa chỉ bucket tăng lên gấp đôi.

Mỗi một đầu vào được thay bởi hai đầu vào, cả hai cùng chứa con trỏ của đầu vào gốc.

Bây giờ hai đầu vào trong bảng địa chỉ bucket trỏ tới bucket j. Ta định vị một bucket

                                                 70

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

mới (bucket z), và đặt đầu vào thứ hai trỏ tới bucket mới, đặt ij và iz về i, tiếp theo đó

mỗi một mẩu tin trong bucket j được băm lại, tuỳ thuộc vào i bit đầu tiên, sẽ hoặc ở lại

bucket j hoặc được cấp phát cho bucket mới được tạo.

-Nếu i > ij khi đó nhiều hơn một đầu vào trong bảng địa chỉ bucket trỏ tới

bucket j. như vậy ta có thể tách bucket j mà không cần tăng kích cỡ bảng địa chỉ

bucket. Ta cấp phát một bucket mới (bucket z) và đặt ij và iz đến giá trị là kết quả của

việc thêm 1 vào giá trị ij gốc. Kế đến, ta điều chỉnh các đầu vào trong bảng địa chỉ

bucket trước đây trỏ tới bucket j. Ta để lại nửa đầu các đầu vào, và đặt tất cả các đầu

vào còn lại trỏ tới bucket mới tạo (z). Tiếp theo, mỗi mẩu tin trong trong bucket j được

băm lại và được cấp phát cho hoặc vào bucket j hoặc bucket z.

Để xoá một mẩu tin với giá trị khoá K, trước tiên ta thực hiện thủ tục định vị,

ta tìm được bucket tương ứng, gọi là j, ta xoá cả khoá tìm kiếm trong bucket lẫn mẩu

tin mẩu tin trong file. bucket cũng bị xoá, nếu nó trở nên rỗng. Chú ý rằng, tại điểm

này, một số bucket có thể được kết hợp lại và kích cỡ của bảng địa chỉ bucket sẽ

giảm đi một nửa.

Ưu điểm chính của băm có thể mở rộng là hiệu năng không bị suy giảm khi file

tăng kích cỡ, hơn nữa, tổng phí không gian là tối tiểu mặc dù phải thêm vào không

gian cho bảng địa chỉ bucket. Một khuyết điểm của băm có thể mở rộng là việc tìm

kiếm phải bao hàm một mức gián tiếp: ta phải truy xuất bảng địa chỉ bucket trước khi

truy xuất đến bucket. Vì vậy, băm có thể mở rộng là một kỹ thuật rất hấp dẫn.

3.11. Chọn chỉ mục hay băm

Ta đã xét qua các sơ đồ: chỉ mục thứ tự, băm. Ta có thể tổ chức file các mẩu tin

bởi hoặc sử dụng tổ chức file tuần tự chỉ mục, hoặc sử dụng B+-cây, hoặc sử dụng

băm ... Mỗi sơ đồ có những các ưu điểm trong các tình huống nhất định. Một nhà thực

thi hệ CSDL có thể cung cấp nhiều nhiều sơ đồ, để lại việc quyết định sử dụng sơ đồ

nào cho nhà thiết kế CSDL. Để có một sự lựa chọn khôn ngoan, nhà thực thi hoặc nhà

thiết kế CSDL phải xét các yếu tố sau:

-Cái giá phải trả cho việc tổ chức lại theo định kỳ của chỉ mục hoặc băm có

chấp nhận được hay không?

-Tần số tương đối của các hoạt động chèn và xoá là bao nhiêu ?

                                                   71

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

-Có nên tối ưu hoá thời gian truy xuất trung bình trong khi thời gian truy xuất

trường hợp xấu nhất tăng lên hay không ?

-Các kiểu vấn tin mà các người sử dụng thích đặt ra là gì ?

3.12. Cấu trúc lưu trữ cho CSDL hướng đối tượng

3.12.1. Sắp xếp các đối tượng vào file

Phần dữ liệu của đối tượng có thể được lưu trữ bởi sử dụng các cấu trúc file

được mô tả trước đây với một số thay đổi do đối tượng có kích cỡ không đều, hơn nữa

đối tượng có thể rất lớn. Ta có thể thực thi các trường tập hợp ít phần tử bằng cách sử

dụng danh sách liên kết, các trường tập hợp nhiều phần tử bởi B-cây hoặc bởi các quan

hệ riêng biệt trong cơ sở dữ liệu. Các trường tập hợp cũng có thể bị loại trừ ở mức lưu

trữ bởi chuẩn hoá. Các đối tượng cực lớn khó có thể phân tích thành các thành phần

nhỏ hơn có thể được lưu trữ trong một file riêng cho mỗi đối tượng.

3.12.2. Thực thi định danh đối tượng

Vì đối tượng được nhận biết bởi định danh của đối tượng (OID = objject

Identifier), Một hệ lưu trữ đối tượng cần phải có một cơ chế để tìm kiếm một đối

tượng được cho bởi một OID. Nếu các OID là logic, có nghĩa là chúng không xác định

vị trí của dối tượng, hệ thống lưu trữ phải duy trì một chỉ mục mà nó ánh xạ OID tới vị

trí hiện hành của đối tượng. Nếu các OID là vật lý, có nghĩa là chúng mã hoá vị trí của

đối tượng, đối tượng có thể dược tìm trực tiếp. Các OID điển hình có ba trường sau:

1. Một volume hoặc định danh file

2. Một định danh trang bên trong volume hoặc file

3. Một offset bên trong trang

Hơn nữa, OID vật lý có thẻ chứa một định danh duy nhất, nó là một số nguyên

tách biệt OID với các định danh của các đối tượng khác đã được lưu trữ ở cùng vị trí

trước đây và đã bị xoá hoặc dời đi. Định danh duy nhất này cũng được lưu với đối

tượng, các định danh trong một OID và đối tượng tương ứng phù hợp. Nếu định danh

duy nhất trong một OID vật lý không khớp với với định danh duy nhất trong đối tượng

mà OID này trỏ tới, hệ thống phát hiện ra rằng con trỏ là bám và báo một lỗi. Lỗi con

trỏ như vậy xảy ra khi OID vật lý tương ứng với đối tượng cũ đã bị xoá do tai nạn.

Nếu không gian bị chiếm bởi đối tượng được cấp phát lại, có thể có một đối tượng mới

                                                72

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

ở vào vị trí này và có thể được định địa chỉ không đúng bởi định danh của đối tượng

cũ. Nếu không phát hiện được, sử dụng con trỏ bám có thể gây nên sự sai lạc của một

đối tượng mới được lưu ở cùng vị trí. Định danh duy nhất trợ giúp phát hiện lỗi như

vậy. Giả sử một đối tượng phải di chuyển sang trang mới do sự lớn lên của đối tượng

và trang cũ không có không gian phụ. Khi đó OID vật lý trỏ tới trang cũ bây giờ không

còn chứa đối tượng. Thay vì thay đổi OID của đối tượng (điều này kéo theo sự thay

đổi mỗi đối tượng trỏ tới đối tượng này) ta để địa chỉ forward ở vị trí cũ. Khi CSDL

tìm đối tượng, nó tìm địa chỉ forward thay cho tìm đối tượng và sử dụng địa chỉ

forward để tìm đối tượng.

3.13. Quản trị các con trỏ bền

Ta  thực  thi  các  con  trỏ  bền  trong  ngôn  ngữ  lập  trình  bền                      (persistent

programming language) bằng cách sử dụng các OID. Các con trỏ bền có thể là các

OID vật lý hoặc logic. Sự khác nhau quan trọng giữa con trỏ bền và con trỏ trong bộ

nhớ là kích thước concủa con trỏ. Con trỏ trong bộ nhớ chỉ cần đủ lớn để định địa chỉ

toàn bộ bộ nhớ ảo, hiện tại kích cỡ con trỏ trong bộ nhớ là 4 byte. Con trỏ bền để định

địa chỉ toàn bộ dữ liệu trong một CSDL, nên kích cỡ của nó ít nhất là 8 byte.

Pointer Swizzling

Hành  động  tìm  một  đối  tượng  được  cho  bởi  định  danh  được  gọi  là

dereferencing. Đã cho một con trỏ trong bộ nhớ, tìm đối tượng đơn thuần là một sự

tham khảo bộ nhớ. Đã cho một con trỏ bền, dereferencing một đối tượng có một bước

phụ: phải tìm vị trí hiện hành của đối tượng trong bộ nhớ bởi tìm con trỏ bền trong một

bảng. Nếu đối tượng chưa nằm trong bộ nhớ, nó phải được nạp từ đĩa. Ta có thể thực

thi bảng tìm kiếm này hoàn toàn hiệu quả bởi sử dụng băm, song tìm kiếm vẫn chậm.

Pointer swizling là một phương pháp để giảm cái giá tìm kiếm các đối tượng bền đã

hiện diện trong bộ nhớ. ý tưởng là khi một con trỏ bền được dereference, đối tượng

được định vị và mang vào trong bộ (nhớ nếu nó chưa có ở đó). Bây giờ một bước phụ

được thực hiện: một con trỏ trong bộ nhớ tới đối tượng được lưu vào vị trí của con trỏ

bền. Lần kế con trỏ bền tương tự được dereference, vị trí trong bộ nhớ có thể được đọc

ra trực tiếp. Trong trường hợp các đối tượng bền phải di chuyển lên đĩa để lấy không

gian cho đối tượng bền khác, cần một bước phụ để đảm bảo đối tượng vẫn trong bộ

nhớ cũng phải được thực hiện. Khi một đối tượng được viết ra. bất kỳ con trỏ bền nào

                                                73

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

mà nó chứa và bị swizzling phải được unswizzling như vậy được chuyển đổi về biểu

diễn bền của chúng. pointer swizzling trên poiter dereferenc được mô tả này được gọi

là software swizzling. Quan trị buffer sẽ phức tạp hơn nếu pointer swizzling được sử

dụng.

Hardware swizzling

Việc có hai kiểu con trỏ, con trỏ bền (persistent pointer) và con trỏ tạm

(transient pointer / con trỏ trong bộ nhớ), là điều khá bất lợi. Người lập trình phải nhớ

kiểu con trỏ và có thể phải viết mã chương trình hai lần- một cho các con trỏ bền và

một cho con trỏ tạm. Sẽ thuận tiên hơn nếu cả hai kiểu con trỏ này cùng kiẻu. Một

cách đơn giản để trộn lãn hai con rỏ này là mở rộng chiều dài con trỏ bộ nhớ cho bằng

kích cỡ con trỏ bền và sử dụng một bit của phần định danh để phân biệt chúng. Cách

làm này sẽ làm tăng chi phí lưu trữ đối với các con trỏ tạm. Ta sẽ mô tả một kỹ thuật

được gọi là hardware swizzling nó sử dụng phần cứng quản trị bộ nhớ để giải quyết

vấn đề này. Hardware swizzling có hai điểm lợi hơn so với software swizzling: Thứ

nhất, nó cho phép lưu trữ các con trỏ bền trong đối tượng trong lượng không gian bằng

với lượng không gian con trỏ bộ nhớ đòi hỏi. Thứ hai, nó chuyển đổi trong suốt giữa

các con trỏ bền và các con trỏ tạm một cách thông minh và hiệu quả. Phần mềm được

viết để giải quyết các con trỏ trong bộ nhớ có thể giải quyết các con trỏ bền mà không

cần thay đổi. Hardware swizzling sử dụng sự biểu diễn các con trỏ bền được chứa

trong đối tượng trên đĩa như sau: Một con trỏ bền được tách ra thành hai phần, một là

định danh trang và một là offset bên trong trang. Định danh trang thường là một con

trỏ trực tiếp nhỏ: mỗi trưng có một bảng dịch (translation table) cung cấp một ánh xạ

từ các định danh trang ngắn đến các định danh CSDL đầy đủ. Hệ thống phải tìm định

danh trang nhỏ trong một con trỏ bền trong bảng dịch để tìm định danh trang đầy đủ.

Bảng dịch, trong trường hợp xấu nhất, chỉ lớn bằng số tối đa các con trỏ có thể được

chứa trong các đối tượng trong một trang. Với một trang kích thước 4096 byte, con trỏ

kích thước 4 byte, số tối đa các con trỏ là 1024. Trong thực tế số tối đa nhỏ hơn con số

này rất nhiều. Định danh trang nhỏ chỉ cần đủ số bit để định danh một dòng trong

bảng, nếu số dòng tối đa là 1024, chỉ cần 10 bit để định danh trang nhỏ. Bảng dịch cho

phép toàn bộ một con trỏ bền lấp đầy một không gian bằng không gian cho một con trỏ

trong bộ nhớ.

                                                  74

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Trong hình 1, trình bày sơ đồ biểu diễn con trỏ bền, có ba đối tượng trong trang,

mỗi một chứa một con trỏ bền. Bảng dịch cho ra ánh xạ giữa định danh trang ngắn và

định danh trang CSDL đầy đủ đối với mỗi định danh trang ngắn trong các con trỏ bền

này. Định danh trang CSDL được trình bày dưới dạng volume.file.offset. Thông tin

phụ được duy trì với mỗi trang sao cho tất cảc các con trỏ bền trong trang có thể tìm

thấy. Thông tin được cập nhất khi một đối tượng được tạo ra hay bị xoá khỏi trang.

Khi một con trỏ trong bộ nhớ được dereferencing, nếu hệ điều hành phát hiện trang

trong không gian địa chỉ ảo được trỏ tới không được cấp phát lưu trữ hoặc có truy xuất

được bảo vệ, khi đó một sự vi phạm đoạn được ước đoán là xảy ra. Nhiều hệ điều hành

cung cấp một cơ chế xác định một hàm sưe được gọi khi vi phạm đoạn xảy ra, một cơ

chế cấp phát lưu trữ cho các trang trong không gian địa chỉ ảo, và một tập các quyền

truy xuất trang. Đầu tiên, ta xét một con trỏ trong bộ nhớ trỏ tới trang v được khử tham

chiếu, khi lưu trữ chưa được cấp phát cho trang này. Một vi phạm đoạn sẽ xảy ra và

kết quả là một lời gọi hàm trên hệ CSDL. Hệ CSDL dầu tiên xác định trang CSDL nào

đã được cấp phát cho trang bộ nhớ ảo v, gọi định danh trang đầy đủ của trang CSDL là

P, nếu không có trang CSDL cấp phát cho v, một lỗi được thông báo., nếu không, hệ

CSDL cấp phát không gian lưu trữ cho trang v và nạp trang CSDL P vào trong v.

Pointer swizzling bây giờ được làm đối với trang P như sau: Hệ thông tìm tất cả các

con trỏ bèn được chứa trong các đối tương trong trang, bằng cách sử dụng thông tin

phụ được lưu trữ trong trang. Ta xét một con trỏ như vậy và gọi nó là (pi, oi), trong đó

                                                 75

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

pi là định danh trang ngắn và oi là offset trong trang. Giả sử Pi là định danh trang đầy

đủ của pi được tìm thấy trong bảng dịch trong trang P. Nếu trang Pi chưa có một trang

bộ nhớ ảo được cấp cho nó, một trang tự do trong không gian địa chỉ ảo sẽ được cấp

cho nó. Trang Pi sẽ nằm ở vị trí địa chỉ ảo nàynếu và khi nó được mang vào. Tại điểm

này, trang trong không gian địa chỉ ảo không có bất kỳ một lưu trữ nào được cấp cho

nó, cả trong bộ nhớ lẫn trên đĩa, đơn tuần chỉ là một khoảng địa chỉ dự trữ cho trang

CSDL. Bây giờ giả sử trang bộ nhớ ảo đã được cấp phát cho Pi là vi . Ta cập nhật con

trỏ (pi, oi) bởi thay thế pi bởi vi , cuối cùng sau khi swizzling tất cả các con trỏ bền

trong P, sự khử tham chiếu gây ra vi phạm đoạn được cho phép tiếp tục và sẽ tìm thấy

đối tượng đang được tìm kiếm trong bộ nhớ.

Trong hình 2, trình bày trạng thái trang trong hình 1 sau khi trang này được

mang vào trong bộ nhớ và các con trỏ trong nó đã được swizzling. ở đây ta giả thiết

trang định danh trang CSDL của nó là 679.34.28000 được ánh xạ đến trang 5001 trong

bộ nhớ, trong khi trang định danh của nó là 519.56.84000 được ánh xạ dến trang 4867.

Tất cả các con trỏ trong đối tượng đã được cập nhật để phản ánh tương ứng mới và bây

giờ có thể được dùng như con trỏ trong bộ nhớ. ở cuối của giai đoạn dịch đói với một

trang, các đối tượng trong trang thoả mãn một tính chất quan trọng: Tất cả các con trỏ

bền được chứa trong đối tượng trong trang được chuyển đổi thành các con trỏ trong bộ

nhớ.

                                                 76

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Câu hỏi

1. Nêu tóm tắc các đặc trưng của các phương tiện lưu trữ vật lý

2. Xét sự sắp xếp các khối dữ liệu và các khối parity trên bốn đĩa sau:

Trong đó các Bi biểu diễn các khối dữ liệu, các khối Pi biểu diễn các khối

parity. Khối Pi là khối parity đối với các khối dữ liệu B4i - 3 , B4i - 2 , B4i - 1 , B4i .

Hãy nêu các vấn đề gặp phải của cách sắp xếp này.

3. Một sự mất điện xảy ra trong khi một khối đang được viết sẽ dẫn tới kết quả là khối

đó có thể chỉ được viết một phần. Giả sử rằng khối được viết một phần có thể phát

hiện được. Một viết khối nguyên tử là hoặc toàn bộ khối được viết hoặc không có gì

được viết ( không có khối được viết một phần ). Hãy đề nghị những sơ đồ để có được

các viết khối nguyên tử hiệu quả trên các sơ đồ RAID.

4. Các hệ thống RAID tiêu biểu cho phép thay thế các đĩa hư không cần ngưng truy

xuất hệ thống. Như vậy dữ liệu trong đĩa bị hư sẽ phải được tái tạo và viết lên đĩa thay

thế trong khi hệ thống vẫn tiếp tục hoạt động. Với mức RAID nào thời lượng giao

thoa giữa việc tái tạo và các truy xuất đĩa còn đang chạy là ít nhất ? Giải thích.

5. Xét việc xoá mẩu tin 5 trong file:

                                                    77

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

So sánh các điều hay/dở tương đối của các kỹ thuật xoá sau:

1.        Di chuyển mẩu tin 6 đến không gian chị chiếm bởi mẩu tin 5, rồi di chuyển

mẩu tin 7 đến chỗ bị chiếm bởi mẩu tin 6.

2.        Di chuyển mẩu tin 7 đến chỗ bị chiếm bởi mẩu tin 5

3.        Đánh dấu xoá mẩu tin 5.

6. Vẽ cấu trúc của file:

Sau mỗi bước sau:

1.        Insert( Brighton, A-323, 1600 )

2.        Xoá mẩu tin 2

3.        Insert( Brighton, A-636, 2500 )

7. Vẽ lại cấu trúc file:

Sau mỗi bước sau:

1.        Insert( Mianus, A-101, 2800 )

                                            78

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

2.        Insert( Brighton, A-323, 1600 )

3.        Delete ( Perryridge, A-102, 400 )

8.  Vẽ lại cấu trúc file dưới đây sau mỗi bước sau:

1.        Insert( Mianus, A-101, 2800

2.        Insert( Brighton, A-323, 1600 )

3.        Delete ( Perryridge, A-102, 400 )

9.  Nếu một khối trở nên rỗng sau khi xoá. Khối này được tái sử dụng vào mục đích gì

?

10. Trong tổ chức file tuần tự, tại sao khối tràn được sử dụng thậm chí, tại thời điểm

đang xét, chỉ có một mẩu tin tràn ?

11. Khi nào sử dụng chỉ mục đặc phù hợp hơn chỉ mục thưa ? Giải thích.

12. Nêu các điểm khác nhau giữa chỉ mục sơ cấp và chỉ mục thứ cấp .

13. Xây dựng một B+-cây đối với tập các giá trị khoá: ( 2, 3, 5, 7, 11, 15, 19, 25, 29,

33, 37, 41, 47 ). Giả thiết ban đầu cây là rỗng và các giá trị được xen theo thứ tự tăng.

Xét trong các trường hợp sau:

1.        Mỗi nút chứa tối đa 4 con trỏ

2.        Mỗi nút chứa tối đa 6 con trỏ

                                                  79

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

14. Đối với mỗi B+-cây trong bài tập 13 ở trên,  hãy bày tỏ các bước thực hiện trong

các vấn tin sau:

1.        Tìm mẩu tin với giá trị khoá tìm kiếm 11

2.        Tìm các mẩu tin với giá trị khoá nằm trong khoảng [ 7..19 ]

15. Đối với mỗi B+-cây trong bài tập13. Vẽ cây sau mỗi một trong dãy hoạt động sau:

1.        Insert 9

2.        Insert 11

3.        Insert 11

4.        Delete 25

5.        Delete 19

16.  Xây dựng một B-cây đối với tập các giá trị khoá: ( 2, 3, 5, 7, 11, 15, 19, 25, 29,

33, 37, 41, 47 ). Giả thiết ban đầu cây là rỗng và các giá trị được xen theo thứ tự tăng.

Xét trong các trường hợp sau:

1.        Mỗi nút chứa tối đa 4 con trỏ

2.        Mỗi nút chứa tối đa 6 con trỏ

17. Nêu và giải thích sự khác nhau giữa băm đóng và băm mở. Nêu các ưu, nhược

điểm của mỗi kỹ thuật này.

18.  Điều gì gây ra sự tràn bucket trong một tổ chức file băm ? Làm gì để giảm sự tràn

này ?

19.  Giả sử ta đang sử dụng băm có thể mở rộng trên một trên một file chứa các mẩu

tin với các giá trị khoá tìm kiếm sau:

2, 3, 5, 7, 11, 17, 19, 23, 37, 31, 35, 41, 49, 55

Vẽ cấu trúc băm có thể mở rộng đối với file này nếu hàm băm là h( x ) = x

mod 8 và mỗi bucket  có thể chứa nhiều nhất được ba mẩu tin.

20.  Vẽ lại cấu trúc băm có thể mở rộng trong bài tập 19 sau mỗi bước sau:

1.        Xoá 11

2.        Xoá 55

3.        Xen 1

                                                  80

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Chương 4

GIAO DỊCH

4.1. Khái niệm

Một giao dịch là một đơn vị thực hiện chương trình truy xuất và có thể cập nhật

nhiều hạng mục dữ liệu. Một giao dịch thường là kết quả của sự thực hiện một chương

trình người dùng được viết trong một ngôn ngữ thao tác dữ liệu mức cao hoặc một

ngôn ngữ lập trình (SQL, COBOL, PASCAL ...), và được phân cách bởi các câu lệnh

(hoặc các lời gọi hàm) có dạng begin transaction và end transaction. Giao dịch bao

gồm tất cả các hoạt động được thực hiện giữa begin và end transaction.

Để đảm bảo tính toàn vẹn của dữ liệu, ta yêu cầu hệ CSDL duy trì các tính chất

sau của giao dịch:

Tính nguyên tử (Atomicity). Hoặc toàn bộ các hoạt động của giao dịch được

phản ánh đúng đắn trong CSDL hoặc không có gì cả.

Tính nhất quán (consistency). Sự thực hiện của một giao dịch là cô lập

(Không có giao dịch khác thực hiện đồng thời) để bảo tồn tính nhất quán của CSDL.

Tính cô lập (Isolation). Cho dù nhiều giao dịch có thể thực hiện đồng thời, hệ

thống phải đảm bảo rằng đối với mỗi cặp giao dịch Ti, Tj , hoặc Tj kết thúc thực hiện

trước khi Ti khởi động hoặc Tj bắt đầu sự thực hiện sau khi Ti kết thúc. Như vậy mỗi

giao dịch không cần biết đến các giao dịch khác đang thực hiện đồng thời trong hệ

thống.

Tính bền vững (Durability). Sau một giao dịch hoàn thành thành công, các

thay đổi đã được tạo ra đối với CSDL vẫn còn ngay cả khi xảy ra sự cố hệ thống.

Các tính chất này thường được gọi là các tính chất ACID (Các chữ cái đầu của

bốn tính chất). Ta xét một ví dụ: Một hệ thống nhà băng gồm một số tài khoản và một

tập các giao dịch truy xuất và cập nhật các tài khoản. Tại thời điểm hiện tại, ta giả thiết

rằng CSDL nằm trên đĩa, nhưng một vài phần của nó đang nằm tạm thời trong bộ nhớ.

Các truy xuất CSDL được thực hiện bởi hai hoạt động sau:

•  READ(X): chuyển hạng mục dữ liệu X te CSDL đến buffer của giao dịch thực

                                                    81

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

hiện hoạt động READ này.

•  WRITE(X): chuyển hạng mục dữ liệu X te buffer của giao dịch thực hiện

WRITE đến CSDL.

Trong hệ CSDL thực, hoạt động WRITE không nhất thiết dẫn đến sự cập nhật

trực tiếp dữ liệu trên đĩa; hoạt động WRITE có thể được lưu tạm thời trong bộ nhớ và

được thực hiện trên đĩa muộn hơn. Trong ví dụ, ta giả thiết hoạt động WRITE cập

nhật trực tiếp CSDL.

Ti là một giao dịch chuyển 50 te tài khoản A sang tài khoản B. Giao dịch này

có thể được xác định như sau:

Ti : READ(A);

A:=A - 50;

WRITE(A)

READ(B);

B:=B + 50;

WRITE(B);

Ta xem xét mỗi một trong các yêu cầu ACID

Tính nhất quán: Đòi hmi nhất quán ở đây là tổng của A và B là không thay đổi

bởi sự thực hiện giao dịch. Nếu không có yêu cầu nhất quán, tiền có thể được tạo ra

hay bị phá hun bởi giao dịch. Do dàng kiểm nghiệm rằng nếu CSDL nhất quán trước

một thực hiện giao dịch, nó vẫn nhất quán sau khi thực hiện giao dịch. Đảm bảo tính

nhất quán cho một giao dịch là trách nhiệm của người lập trình ứng dụng người đã viết

ra giao dịch. Nhiệm vụ này có thể được làm cho do dàng bởi kiểm thp tự động các

ràng buộc toàn vẹn.

Tính nguyên tử: Giả sp rằng ngay trước khi thực hiện giao dịch Ti, giá trị của

các tài khoản A và B tương ứng là 1000 và 2000. Giả sp rằng trong khi thực hiện giao

dịch Ti, một sự cố xảy ra cản trở Ti hoàn tất thành công sự thực hiện của nó. Ta cũng

giả sp rằng sự cố xảy ra sau khi hoạt động WRITE(A) đã được thực hiện, nhưng trước

khi hoạt động WRITE(B) được thực hiện. Trong trường hợp này giá trị của tài khoản

A và B là 950 và 2000. Ta đã phá hun 50$. Tổng A+B không còn được bảo tồn. Như

vậy, kết quả của sự cố là trạng thái của hệ thống không còn phản ánh trạng thái của thế

giới mà CSDL được giả thiết nắm giữ. Ta su gọi trạng thái như vậy là trạng thái không

                                                82

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

nhất quán. Ta phải đảm bảo rằng tính bất nhất này không xuất hiện trong một hệ

CSDL. Chú ý rằng, cho dù thế nào tại một vài thời điểm, hệ thống cũng phải ở trong

trạng thái không nhất quán. Ngay cả khi giao dịch Ti , trong quá trình thực hiện cũng

tồn tại thời điểm tại đó giá trị của tài khoản A là 950 và tài khoản B là 2000 - một

trạng thái không nhất quán. Trạng thái này được thay thế bởi trạng thái nhất quán khi

giao dịch đã hoàn tất. Như vậy, nếu giao dịch không bao giờ khởi động hoặc được

đảm bảo su hoàn tất, trạng thái không nhất quán su không bao giờ xảy ra. Đó chính là

lý  do  có  yêu  cầu  về  tính  nguyên  tp:  Nếu  tính  chất  nguyên  tp

được cung cấp, tất cả các hành động của giao dịch được phản ánh trong CSDL hoặc

không có gì cả. ý tưởng cơ sở để đảm bảo tính nguyên tp là như sau: hệ CSDL lưu vết

(trên  đĩa)  các  giá  trị  cũ  của  bất  kỳ  dữ  liệu  nào  trên  đó  giao  dịch  đang

thực hiện viết, nếu giao dịch không hoàn tất, giá trị cũ được khôi phục để đặt trạng

thái của hệ thống trở lại trạng thái trước khi giao dịch dion ra. Đảm bảo tính nguyên tp

là trách nhiệm của hệ CSDL, và được quản lý bởi một thành phần được gọi là

thành phần quản trị giao dịch (transaction-management component).

Tính bền vững: Tính chất bền vững đảm bảo rằng mỗi khi một giao dịch hoàn

tất, tất cả các cập nhật đã thực hiện trên cơ sở dữ liệu vẫn còn đó, ngay cả khi xảy ra

sự có hệ thống sau khi giao dịch đã hoàn tất. Ta giả sp một sự cố hệ thống có thể gây

ra việc mất dữ liệu trong bộ nhớ chính, nhưng dữ liệu trên đĩa thì không mất. Có thể

đảm bảo tính bền vững bởi việc đảm bảo hoặc các cập nhật được thực hiện bởi giao

dịch đã được viết lên đĩa trước khi giao dịch kết thúc hoặc thông tin về sự cập nhật

được thực hiện bởi giao dịch và được viết lên đĩa đủ cho phép CSDL xây dựng lại các

cập nhật khi hệ CSDL được khởi động lại sau sự cố. Đảm bảo tính bền vững là trách

nhiệm của một thành phần của hệ CSDL được gọi là thành phần quản trị phục hồi

(recovery management component). Hai thành phần quản trị giao dịch và quản trị phục

hồi quan hệ mật thiết với nhau.

Tính cô lập: Ngay cả khi tính nhất quán và tính nguyên tp được đảm bảo cho

mỗi giao dịch, trạng thái không nhất quán vẫn có thể xảy ra nếu trong hệ thống có một

số giao dịch được thực hiện đồng thời và các hoạt động của chúng đan xen theo một

cách không mong muốn. Ví dụ, CSDL là không nhất quán tạm thời trong khi giao dịch

chuyển khoản te A sang B đang thực hiện, nếu một giao dịch khác thực hiện đồng thời

đọc A và B tại thời điểm trung gian nàyvà tính A+B, nó đã tham khảo một giá trị

                                                 83

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

không nhất quán, sau đó nó thực hiện cập nhật A và B dựa trên các giá trị không nhất

quán này, như vậy CSDL có thể ở trạng thái không nhất quán ngay cả khi cả hai giao

dịch hoàn tất thành công. Một giải pháp cho vấn đề các giao dịch thực hiện đồng thời

là thực hiện tuần tự các giao dịch, tuy nhiên giải pháp này làm giả hiệu năng của hệ

thống. Các giải pháp khác cho phép nhiều giao dịch thực hiện cạnh tranh đã được phát

triển ta su thảo luận về chúng sau này. Tính cô lập của một giao dịch đảm bảo rằng sự

thực hiện đồng thời các giao dịch dẫn đến một trạng thái hệ thống tương đương với

một trạng thái có thể nhận được bởi thực hiện các giao dịch này một tại một thời điểm

theo một thứ nào đó. Đảm bảo tính cô lập là trách nhiệm của một thành phần của hệ

CSDL được gọi là thành phần quản trị cạnh tranh (concurrency-control component).

4.2. Trạng thái giao dịch

Nếu không có sự cố, tất cả các giao dịch đều hoàn tất thành công. Tuy nhiên,

một giao dịch trong thực tế có thể không thể hoàn tất sự thực hiện của nó. Giao dịch

như vậy được gọi là bị bm dở. Nếu ta đảm bảo được tính nguyên tp, một giao dịch bị

bm dở không được phép làm ảnh hưởng tới trạng thái của CSDL. Như vậy, bất kỳ thay

đổi nào mà giao dịch bị bm dở này phải bị hun bm. Mỗi khi các thay đổi do giao dịch bị

bm dở bị hun bm, ta nói rằng giao dịch bị cuộn lại (rolled back). Việc này là trách

nhiệm của sơ đồ khôi phục nhằm quản trị các giao dịch bị bm dở. Một giao dịch hoàn

tất  thành  công  sự  thực  hiện  của  nó  được  gọi  là  được  bàn  giao

(committed). Một giao dịch được bàn giao (committed), thực hiện các cập nhật su biến

đổi CSDL sang một trạng thái nhất quán mới và nó là bền vững ngay cả khi có sự cố.

Mỗi khi một giao dịch là được bàn giao (committed), ta không thể hun bm các hiệu quả

của nó bằng các bm dở nó. Cách duy nhất để hun bm các hiệu quả của một giao dịch

được bàn giao (committed) là thực hiện một giao dịch bù (compensating transaction);

nhưng không phải luôn luôn có thể tạo ra một giao dịch bù. Do vậy trách nhiệm viết

và thực hiện một giao dịch bù thuộc về người sp dụng và không được quản lý bởi hệ

CSDL.

Một giao dịch phải ở trong một trong các trạng thái sau:

Hoạt động (Active). Trạng thái khởi đầu; giao dịch giữ trong trạng thái này

trong khi nó đang thực hiện, được bàn giao bộ phận (Partially Committed). Sau khi

lệnh cuối cùng được thực hiện.

                                               84

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Thất bại (Failed). Sau khi phát hiện rằng sự thực hiện không thể tiếp tục

được nữa.

Bỏ dở (Aborted). Sau khi giao dịch đã bị cuộn lại và CSDL đã phục hồi lại

trạng thái của nó trước khi khởi động giao dịch.

Được bàn giao (Committed). Sau khi hoàn thành thành công giao dịch. Ta nói

một giao dịch đã được bàn giao (committed) ch{ nếu nó đã di vào trạng thái

Committed, tương tự, một giao dịch bị bm dở nếu nó đã đi vào trạng thái Aborted. Một

giao dịch được gọi là kết thúc nếu nó hoặc là committed hoặc là Aborted. Một giao

dịch khởi đầu bởi trạng thái Active. Khi nó kết thúc lệnh sau cùng của nó, nó chuyển

sang trạng thái partially committed. Tại thời điểm này, giao dịch đã hoàn thành sự

thực hiện của nó, nhưng nó vẫn có thể bị bm dở do đầu ra hiện tại vẫn có thể trú tạm

thời trong bộ nhớ chính và như thế một sự cố phần cứng vẫn có thể ngăn cản sự hoàn

tất của giao dịch. Hệ CSDL khi đó đã kịp viết lên đĩa đầy đủ thông tin giúp việc tái tạo

các cập nhật đã được thực hiện trong quá trình thực hiện giao dịch, khi hệ thống tái

khởi động sau sự cố. Sau khi các thông tin sau cùng này được viết lên đĩa, giao dịch

chuyển sang trạng thái committed. Biểu đồ trạng thái tương ứng với một giao dịch như

sau:

Với giả thiết sự cố hệ thống không gây ra sự mất dữ liệu trên đĩa, Một giao dịch

đi vào trạng thái Failed sau khi hệ thống xác định rằng giao dịch không thể tiến triển

bình thường được nữa (do lỗi phần cứng hoặc phần mềm). Như vậy, giao dịch phải

được cuộn lại rồi chuyển sang trạng thái bm dở. Tại điểm này, hệ thống có hai lựa

chọn:

                                                 85

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Khởi động lại giao dịch, nhưng ch{ nếu giao dịch bị bở dở là do lỗi phần cứng

hoặc phần mềm nào đó không liên quan đến logic bên trong của giao dịch. Giao dịch

được khởi động lại được xem là một giao dịch mới.

Giết giao dịch thường được tiến hành hoặc do lỗi logic bên trong giao dịch, lỗi

này cần được ch{nh spa bởi viết lại chương trình ứng dụng hoặc do đầu vào xấu hoặc

do dữ liệu mong muốn không tìm thấy trong CSDL.

Ta phải thận trọng khi thực hiện viết ngoài khả quan sát (observable external

Write - như viết ra terminal hay máy in). Mỗi khi một viết như vậy x~y ra, nó không

thể bị xoá do nó có thể phải giao tiếp với bên ngoài hệ CSDL. Hầu hết các hệ thống

cho phép các viết như thế x~y ra ch{ khi giao dịch đã di vào trạng thái committed. Một

cách để thực thi một sơ đồ như vậy là cho hệ CSDL lưu trữ tạm thời bất kỳ giá trị nào

kết hợp với các viết ngoài như vậy trong lưu trữ không hay thay đổi và thực hiện các

viết hiện tại ch{ sau khi giao dịch đã đi vào trạng thái committed. Nếu hệ thống thất

bại sau khi giao dịch đi vào trạng thái committed nhưng trước khi hoàn tất các viết

ngoài, hệ CSDL su làm các viết ngoài này (sp dụng dữ liệu trong lưu trữ không hay

thay đổi) khi hệ thống khởi động lại.

Trong một số ứng dụng, có thể muốn cho phép giao dịch hoạt động trình bày dữ

liệu cho người sp dụng, đặc biệt là các giao dịch kéo dài trong vài phút hay vài giờ. Ta

không thể cho phép xuất ra dữ liệu khả quan sát như vậy tre phi ta buộc phải làm tổn

hại tính nguyên tp giao dịch. Hầu hết các hệ thống giao dịch hiện hành đảm bảo tính

nguyên tp và do vậy cấm dạng trao đổi với người dùng này.

4.3. Thực thi tính nguyên tử và tính bền vững

Thành phần quản trị phục hồi của một hệ CSDL hỗ trợ tính nguyên tp và tính

bền vững. Trước tiên ta xét một sơ đồ đơn giản (song cực kỳ thiếu hiệu quả). Sơ đồ

này giả thiết rằng ch{ một giao dịch là hoạt động tại một thời điểm và được dựa trên

tạo bản sao của CSDL được gọi là các bản sao bóng (shadow copies). Sơ đồ giả thiết

rằng CSDL ch{ là một file trên đĩa. Một con trm được gọi là db_pointer được duy trì

trên đĩa; nó trm tới bản sao hiện hành của CSDL.

Trong sơ đồ CSDL bóng (shadow-database), một giao dịch muốn cập nhật

CSDL, đầu tiên tạo ra một bản sao đầy đủ của CSDL. Tất cả các cập nhật được làm

trên bản sao này, không đụng chạm tới bản gốc (bản sao bóng). Nếu tại một thời điểm

                                                 86

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

bất kỳ giao dịch bị bm dở, bản sao mới bị xoá. Bản sao cũ của CSDL không bị ảnh

hưởng. Nếu giao dịch hoàn tất, nó được được bàn giao (committed) như sau. Đầu tiên,

Hmi hệ điều hành để đảm bảo rằng tất cả các trang của bản sao mới đã được viết lên

đĩa (flush). Sau khi flush con trm db_pointer được cập nhật để trm đến bản sao mới; bản

sao mới trở thành bản sao hiện hành của CSDL. Bản sao cũ bị xoá đi. Giao dịch được

gọi là đã được được bàn giao (committed) tại thời điểm sự cập nhật con trm db_pointer

được ghi lên đĩa. Ta xét k‚ thuật này quản lý sự cố giao dịch và sự cố hệ thống ra sao?

Trước tiên, ta xét sự cố giao dịch. Nếu giao dịch thất bại tại thời điểm bất kỳ trước khi

con trm db_pointer được cập nhật, nội dung cũ của CSDL không bị ảnh hưởng. Ta có

thể bm dở giao dịch bởi xoá bản sao mới. Mỗi khi giao dịch được được bàn giao

(committed), tất cả các cập nhật mà nó đã thực hiện là ở trong CSDL được trm bởi

db_pointer. Như vậy, hoặc tất cả các cập nhật của giao dịch đã được phản ánh hoặc

không hiệu quả nào được phản ánh, bất chấp tới sự cố giao dịch. Bây giờ ta xét sự cố

hệ thống. Giả sp sự cố hệ thống xảy ra tại thời điểm bất kỳ trước khi db_pointer đã

được cập nhật được viết lên đĩa. Khi đó, khi hệ thống khởi động lại, nó su đọc

db_pointer và như vậy su thấy nội dung gốc của CSDL - không hiệu quả nào của giao

dịch được nhìn thấy trên CSDL. Bây giờ lại giả sp rằng sự cố hệ thống xảy ra sau khi

db_pointer đã được cập nhật lên đĩa. Trước khi con trm được cập nhật, tất cả các trang

được cập nhật của bản sao mới đã được viết lên đĩa. Te giả thiết file trên đĩa không bị

hư hại do sự cố hệ thống. Do vậy, khi hệ thống khởi động lại, nó su đọc db_pointer và

su thấy nội dung của CSDL sau tất cả các cập nhật đã thực hiện bởi giao dịch. Sự thực

thi này phụ thuộc vào việc viết lên db_pointer, việc viết này phải là nguyên tp, có

nghĩa là hoặc tất cả các byte của nó được viết hoặc không byte nào được viết. Nếu ch{

một số byte của con trm được cập nhật bởi việc viết nhưng các byte khác thì không thì

con trm trở thành vô nghĩa và cả bản cũ lẫn bản mới của CSDL có thể tìm thấy khi hệ

thống khởi động lại. May mắn thay, hệ thống đĩa cung cấp các cập nhật nguyên tp toàn

bộ khối đĩa hoặc ít nhất là một sector đĩa. Như vậy hệ thống đĩa đảm bảo việc cập nhật

con trm db_pointer là nguyên tp. Tính nguyên tp và tính bền vững của giao dịch được

đảm bảo bởi việc thực thi bản sao bóng của thành phần quản trị phục hồi. Sự thực thi

này cực kỳ thiếu hiệu quả trong ngữ cảnh CSDL lớn, do sự thực hiện một giao dịch

đòi hmi phải sao toàn bộ CSDL. Hơn nữa sự thực thi này không cho phép các giao dịch

thực hiện đồng thời với các giao dịch khác. Phương pháp thực thi tính nguyên tp và

tính lâu bền mạnh hơn và đ„ tốn kém hơn được trình bày trong chương hệ thống phục

                                                  87

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

hồi.

4.4. Các thực hiện cạnh tranh

Hệ thống xp lý giao dịch thường cho phép nhiều giao dịch thực hiện đồng thời.

Việc cho phép nhiều giao dịch cập nhật dữ liệu đồng thời gây ra những khó khăn trong

việc bảo đảm sự nhất quán dữ liệu. Bảo đảm sự nhất quán dữ liệu mà không đếm x{a

tới sự thực hiện cạnh tranh các giao dịch su cần thêm các công việc phụ. Một phương

pháp do tiến hành là cho các giao dịch thực hiện tuần tự: đảm bảo rằng một giao dịch

khởi động ch{ sau khi giao dịch trước đã hoàn tất. Tuy nhiên có hai lý do hợp lý để

thực hiện cạnh tranh là:

Một giao dịch gồm nhiều bước. Một vài bước liên quan tới hoạt động I/O; các

bước khác liên quan đến hoạt động CPU. CPU và các đĩa trong một hệ thống có thể

hoạt động song song. Do vậy hoạt động I/O có thể được tiến hành song song với xp lý

tại CPU. Sự song song của hệ thống CPU và I/O có thể được khai thác để chạy nhiều

giao dịch song song. Trong khi một giao dịch tiến hành một hoạt động đọc/viết trên

một đĩa, một giao dịch khác có thể đang chạy trong CPU, một giao dịch thứ ba có thể

thực hiện đọc/viết trên một đĩa khác ... như vậy su tăng lượng đầu vào hệ thống có

nghĩa là tăng số lượng giao dịch có thể được thực hiện trong một lượng thời gian đã

cho, cũng có nghĩa là hiệu suất sp dụng bộ xp lý và đĩa tăng lên. Có thể có sự trộn lẫn

các  giao  dịch  đang  chạy  trong  hệ  thống,  cái  thì  dài  cái  thì  ngắn.

Nếu thực hiện tuần tự, một quá trình ngắn có thể phải chờ một quá trình dài đến trước

hoàn tất, mà điều đó dẫn đến một sự trì hoãn không lường trước được trong việc chạy

một giao dịch. Nếu các giao dịch đang hoạt động trên các phần khác nhau của CSDL,

su tốt hơn nếu ta cho chúng chạy đồng thời, chia s‡ các chu kỳ CPU và truy xuất đĩa

giữa chúng. Thực hiện cạnh tranh làm giảm sự trì hoãn không lường trước trong việc

chạy các giao dịch, đồng thời làm giảm thời gian đáp ứng trung bình: Thời gian để một

giao dịch được hoàn tất sau khi đã được đệ trình.

Động cơ để sp dụng thực hiện cạnh tranh trong CSDL cũng giống như động cơ

để thực hiện đa chương trong hệ điều hành. Khi một vài giao dịch chạy đồng thời, tính

nhất quán CSDL có thể bị phá hun cho dù mỗi giao dịch là đúng. Một giải pháp để

giải quyết vấn đề này là sp dụng định thời. Hệ CSDL phải điều khiển sự trao đổi giữa

các giao dịch cạnh tranh để ngăn ngea chúng phá hun sự nhất quán của CSDL. Các cơ

                                                88

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

chế cho điều đó được gọi là sơ đồ điều khiển cạnh tranh (concurrency-control

scheme). Xét hệ thống nhà băng đơn giản, nó có một số tài khoản và có một tập hợp

các giao dịch, chúng truy xuất, cập nhật các tài khoản này. Giả sp T1 và T2 là hai giao

dịch chuyển khoản te một tài khoản sang một tài khoản khác. Giao dịch T1 chuyển 50

$ te tài khoản A sang tài khoản B và được xác định như sau:

T1 : Read(A);

A:=A-50;

Write(A);

Read(B);

B:=B+50;

Write(B);

Giao dịch T2 chuyển 10% số dư te tài khoản A sang tài khoản B, và được xác định

như sau:

T2 : Read(A);

Temp:=A*0.1;

A:=A-temp;

Write(A);

Read(B);

B:=B+temp;

Write(B);

Giả sp giá trị hiện tại của A và B tương ứng là 1000                                      $ và 2000                  $. Giả sp rằng

hai giao dịch này được thực hiện mỗi một tại một thời điểm theo thứ tự T1 rồi tới T2.

Như vậy, dãy thực hiện này là như hình bên dưới, trong đó dãy các bước ch{ thị ở

trong thứ tự thời gian te đ{nh xuống đáy, các ch{ thị của T1 nằm ở cột trái còn các ch{

thị của T2 nằm ở cột phải:

                                                89

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Schedule-1

Giá trị sau cùng của các tài khoản A và B, sau khi thực hiện dãy các ch{ thị

theo trình tự này là 855$ và 2145                                              $ tương ứng. Như vậy, tổng giá trị của hai tài khoản

này (A + B) được bảo tồn sau khi thực hiện cả hai giao dịch.

Tương tự, nếu hai giao dịch được thực hiện mỗi một tại một thời điểm song

theo trình tự T2 rồi đến T1 , khi đó dãy thực hiện su là:

Schedule-2

                                                                 90

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Và kết quả là các giá trị cuối cùng của tài khoản A và B tương ứng su là 850              $

và 2150                                                                                   $. Các dãy thực hiện vea được mô tả trên được gọi là các lịch trình

(schedules). Chúng biểu dion trình tự thời gian các ch{ thị được thực hiện trong hệ

thống. Một lịch trình đối với một tập các giao dịch phải bao gồm tất cả các ch{ thị của

các giao dich này và phải bảo tồn thứ tự các ch{ thị xuất hiện trong mỗi một giao dịch.

Ví dụ, đối với giao dịch T1 , ch{ thị Write(A) phải xuất hiện trước ch{ thị Read(B),

trong bất kỳ lịch trình hợp lệ nào. Các lịch trình schedule-1 và schedule-2 là tuần tự.

Mỗi lịch trình tuần tự gồm một dãy các ch{ thị te các giao dịch, trong đó các ch{ thị

thuộc về một giao dịch xuất hiện cùng nhau trong lịch trình. Như vậy, đối với một tập

n giao dịch, có n! lịch trình tuần tự hợp lệ khác nhau. Khi một số giao dịch được thực

hiện đồng thời, lịc trình tương ứng không nhất thiết là tuần tự. Nếu hai giao dịch đang

chạy đồng thời, hệ điều hành có thể thực hiện một giao dịch trong một khoảng ngắn

thời gian, sau đó chuyển đổi ngữ cảnh, thực hiện giao dịch thứ hai một khoảng thời

gian sau đó lại chuyển sang thực hiện giao dịch thứ nhất một khoảng và cứ như vậy

(hệ thống chia s‡ thời gian).

Có thể có một vài dãy thực hiện, vì nhiều ch{ thị của các giao dịch có thể đan

xen nhau. Nói chung, không thể dự đoán chính xác những ch{ thị nào của một giao

dịch su được thực hiện trước khi CPU chuyển cho giao dịch khác. Do vậy, số các lịch

trình có thể đối với một tập n giao dịch lớn hơn n! nhiều.

Schedule-3, một lịch trình cạnh tranh tương đương Schedule-1

                                                                                           91

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Không phải tất cả các thực hiện cạnh tranh cho ra một trạng thái đúng. Ví dụ

schedule-4 sau cho ta một minh hoạ về nhận định này:

Sau khi thực hiện giao dịch này, ta đạt tới trạng thái trong đó giá trị cuối của A

và B tương ứng là 950 $ và 2100                                                          $. Trạng thái này là một trạng thái không nhất quán

(A+B trước khi thực hiện giao dịch là 3000$ nhưng sau khi giao dịch là 3050              $). Như

vậy, nếu giao phó việc điều khiển thực hiện cạnh tranh cho hệ điều hành, su có thể dẫn

tới các trạng thái không nhất quán. Nhiệm vụ của hệ CSDL là đảm bảo rằng một lịch

trình được phép thực hiện su đưa CSDL sang một trạng thái nhất quán. Thành phần

của hệ CSDL thực hiện nhiệm vụ này được gọi là thành phần điều khiển cạnh tranh

(concurrency-control component). Ta có thể đảm bảo sự nhất quán của CSDL với thực

hiện cạnh tranh bằng cách nắm chắc rằng một lịch trình được thực hiện có cùng hiệu

quả như một lịch trình tuần tự.

Schedule-4, một lịch trình cạnh tranh

4.5. Tính khả tuần tự

Hệ CSDL phải điều khiển sự thực hiện cạnh tranh các giao dịch để đảm bảo

rằng trạng thái CSDL giữ nguyên ở trạng thái nhất quán. Trước khi ta kiểm tra hệ

CSDL có thể thực hiện nhiệm vụ này như thế nào, đầu tiên ta phải hiểu các lịch trình

nào su đảm bảo tính nhất quán và các lịch trình nào không. Vì các giao dịch là các

chương trình, nên thật khó xác định các hoạt động chính xác được thực hiện bởi một

                                                                          92

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

giao dịch là hoạt động gì và những hoạt động nào của các giao dịch tác động lẫn nhau.

Vì lý do này, ta su không giải thích kiểu hoạt động mà một giao dịch có thể thực hiện

trên một hạng mục dữ liệu. Thay vào đó, ta ch{ xét hai hoạt động: Read và Write. Ta

cũng giả thiết rằng giữa một ch{ thị Read(Q) và một ch{ thị Write(Q) trên một hạng

mục dữ liệu Q, một giao dịch có thể thực hiện một dãy tuỳ ý các hoạt động trên bản

sao của Q được lưu trú trong buffer cục bộ của giao dịch. Vì vậy ta su ch{ nêu các ch{

thị Read và Write trong lịch trình, như trong biểu dion với quy ước như vậy của

schedule-3 dưới đây:

4.5.1. Tuần tự xung đột

Xét lịch trình S trong đó có hai ch{ thị liên tiếp Ii và Ij của các giao dịch Ti , Tj

tương ứng với i ≠ j. Nếu Ii và Ij tham khảo đến các hạng mục dữ liệu khác nhau, ta có

thể đổi chỗ Ii và Ij mà không làm ảnh hưởng đến kết quả của bất kỳ ch{ thị nào trong

lịch trình. Tuy nhiên, nếu Ii và Ij tham khảo cùng một hạng mục dữ liệu Q, khi đó thứ

tự của hai bước này có thể rất quan trọng. Do ta đang thực hiện ch{ các ch{ thị Read và

Write, nên ta có bốn trường hợp cần phải xét sau:

1. Ii = Read(Q); Ij = Read(Q): Thứ tự của Ii và Ij không gây ra vấn đề nào, do

Ti và Tj đọc cùng một giá trị Q bất kể đến thứ tự giữa Ii và Ij.

2. Ii = Read(Q); Ij = Write(Q): Nếu Ii thực hiện trước Ij, Khi đó Ti không đọc

giá trị được viết bởi Tj bởi ch{ thị Ij . Nếu Ij thực hiện trước Ii , Ti su đọc giá trị của Q

                                                      93

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

được viết bởi Ij , như vậy thứ tự của Ii và Ij là quan trọng.

3. Ii = Write(Q); Ij = Read(Q): Thứ tự của Ii và Ij là quan trọng do cùng lý do

trong trường hợp trước.

4. Ii = Write(Q); Ij = Write(Q): Cả hai ch{ thị là hoạt động Write, thứ tự của

hai ch{ thị này không ảnh hưởng đến cả hai giao dịch Ti và Tj . Tuy nhiên, giá trị nhận

được bởi ch{ thị Read kế trong S su bị ảnh hưởng do kết quả phụ thuộc vào ch{ thị

Write được thực hiện sau cùng trong hai ch{ thị Write này. Nếu không còn ch{ thị

Write nào sau Ii và Ij trong S, thứ tự của Ii và Ij su ảnh hưởng trực tiếp đến giá trị cuối

của Q trong trạng thái CSDL kết quả (của lịch trình S).

Như vậy ch{ trong trường hợp cả Ii và Ij là các ch{ thị Read, thứ tự thực hiện

của hai ch{ thị này (trong S) là không gây ra vấn đề.

Ta nói Ii và Ij xung đột nếu các hoạt động này nằm trong các giao dịch khác

nhau, tiến hành trên cùng một hạng mục dữ liệu và có ít nhất một hoạt động là Write.

Ta xét lịch trình schedule-3 như ví dụ minh hoạ cho các ch{ thị xung đột.

Ch{ thị Write(A) trong T1 xung đột với Read(A) trong T2. Tuy nhiên, ch{ thị

Write(A) trong T2 không xung đột với ch{ thị Read(B) trong T1 do các ch{ thị này

truy xuất các hạng mục dữ liệu khác nhau. Ii và Ij là hai ch{ thị liên tiếp trong lịch

trình S. Nếu Ii và Ij là các ch{ thị của các giao dịch khác nhau và không xung đột, khi

đó ta có thể đổi thứ tự của chúng mà không làm ảnh hưởng gì đến kết quả xp lý và

như vậy ta nhận được một lịch trình mới S’ tương đương với S. Do ch{ thị Write(A)

của T2 không xung đột với ch{ thị Read(B) của T1, ta có thể đổi chỗ các ch{ thị này để

được một lịch trình tương đương - schedule-5 dưới đây :

                                                    94

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Schedule-5

Ta tiếp tục đổi chỗ các ch{ thị không xung đột như sau:

- Đổi chỗ ch{ thị Read(B) của T1 với ch{ thị Read(A) của T2.

- Đổi chỗ ch{ thị Write(B) của T1 với ch{ thị Write(A) của T2.

- Đổi chỗ ch{ thị Write(B) của T1 với ch{ thị Read(A) của T2.

Kết quả cuối cùng của các bước đổi chỗ này là một lịch trình mới (schedule-6 -

lịch trình tuần tự) tương đương với lịch trình ban đầu (schedule-3):

Schedule-6

Sự tương đương này cho ta thấy: bất chấp trạng thái hệ thống ban đầu, schedule-

3 su sinh ra cùng trạng thái cuối như một lịch trình tuần tự nào đó.

Nếu một lịch trình S có thể biến đổi thành một lịch trình S’ bởi một dãy các đổi chỗ

các ch{ thị không xung đột, ta nói S và S’ là tương đương xung đột (conflict

                                             95

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

equivalent). Trong các schedule đã được nêu ở trên, ta thấy schedule-1 tương đương

xung đột với schedule-3.

Khái niệm tương đương xung đột dẫn đến khái niệm tuần tự xung đột. Ta nói

một lịch trình S là khả tuần tự xung đột (conflict serializable) nếu nó tương đương

xung đột với một lịch trình tuần tự. Như vậy, schedule-3 là khả tuần tự xung đột. Như

một ví dụ, lịch trình schedule-7 dưới đây không tương đương xung đột với một lịch

trình tuần tự nào do vậy nó không là khả tuần tự xung đột:

Schedule-7

Có thể có hai lịch trình sinh ra cùng kết quả, nhưng không tương đương xung

đột. Ví dụ, giao dịch T5 chuyển 10                                                        $ te tài khoản B sang tài khoản A. Ta xét lịch trình

schedule-8 như dưới đây, lịch trình này không tương đương xung đột với lịch trình

tuần tự < T1, T5 > do trong lịch trình schedule-8 ch{ thị Write(B) của T5 xung đột với

ch{ thị Read(B) của T1 như vậy ta không thể di chuyển tất cả các ch{ thị của T1 về

trước các ch{ thị của T5 bởi việc hoán đổi liên tiếp các ch{ thị không xung đột. Tuy

nhiên, các giá trị sau cùng của tài khoản A và B sau khi thực hiện lịch schedule-8 hoặc

sau khi thực hiện lịch trình tuần tự < T1, T5 > là như nhau là 960 và 2040 tương ứng.

Qua ví dụ này ta thấy cần thiết phải phân tích cả sự tính toán được thực hiện bởi các

giao dịch mà không ch{ các hoạt động Read và Write. Tuy nhiên sự phân tích như vậy

su nặng nề và phải trả một giá tính toán cao hơn.

                                                                            96

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Schedule-8

4.5.2. Tuần tự View

Xét hai lịch trình S và S’, trong đó cùng một tập hợp các giao dịch tham gia vào

cả hai lịch trình. Các lịch trình S và S’ được gọi là tương đương view nếu ba điều kiện

sau được thoả mãn:

1. Đối với mỗi hạng mục dữ liệu Q, nếu giao dịch Ti đọc giá trị khởi đầu của Q

trong lịch trình S, thì giao dịch Ti phải cũng đọc giá trị khởi đầu của Q trong lịch trình

S’.

2. Đối với mỗi hạng mục dữ liệu Q, nếu giao dịch Ti thực hiện Read(Q) trong

lịch trình S và giá trị đó được sản sinh ra bởi giao dịch Tj thì Ti cũng phải đọc giá trị

của Q được sinh ra bởi giao dịch Tj trong S’.

3. Đối với mỗi hạng mục dữ liệu Q, giao dịch thực hiện hoạt động Write(Q)

sau cùng trong lịch trình S, phải thực hiện hoạt động Write(Q) sau cùng trong lịch

trình S’. Điều kiện 1 và 2 đảm bảo mỗi giao dịch đọc cùng các giá trị trong cả hai lịch

trình và do  vậy thực hiện cùng tính toán. Điều kiện 3 đi cặp với các điều kiện 1 và 2

đảm bảo cả hai lịch trình cho ra kết quả là trạng thái cuối cùng của hệ thống như nhau.

Trong các ví dụ trước, schedule-1 là không tương tương view với lịch trình 2 do, trong

schedule-1, giá trị của tài khoản A được đọc bởi giao dịch T2 được sinh ra bởi T1 ,

trong khi điều này không xảy ra trong schedule-2. Schedule1 tương đương view với

                                                   97

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

schedule-3 vì các giá trị của các tài khoản A và B được đọc bởi T2 được sinh ra bởi T1

trong cả hai lịch trình.

Quan niệm tương đương view đưa đến quan niểm tuần tự view. Ta nói lịch

trình S là khả tuần tự view (view serializable) nếu nó tương dương view với một lịch

trình tuần tự. Ta xét lịch trình sau:

Schedule-9

Nó tương đương view với lịch trình tuần tự < T3, T4, T6 > do ch{ thị Read(Q)

đọc giá trị khởi đầu của Q trong cả hai lịch trình và T6 thực hiện Write sau cùng trong

cả hai lịch trình như vậy schedule-9 khả tuần tự view.

Mỗi lịch trình khả tuần tự xung đột là khả tuần tự view, nhưng có những lịch

trình khả tuần tự view không khả tuần tự xung đột (ví dụ schedule-9).

Trong schedule-9 các giao dịch T4 và T6 thực hiện các hoạt động Write(Q) mà

không thực hiện hoạt động Read(Q), Các Write dạng này được gọi là các Write mù

(blind write). Các Write mù xuất hiện trong bất kỳ lịch trình khả tuần tự view không

khả tuần tự xung đột.

4.6. Tính khả phục hồi

Ta đã nghiên cứu các lịch trình có thể chấp nhận dưới quan điểm sự nhát quán

của CSDL với giả thiết không có giao dịch nào thất bại. Ta su xét hiệu quả của thất bại

giao dịch trong thực hiện cạnh tranh.

Nếu giao dịch Ti thất bại vì lý do nào đó, ta cần hun bm hiệu quả của giao dịch

này để đảm bảo tính nguyên tp của giao dịch. Trong hệ thống cho phép thực hiện cạnh

tranh, cũng cần thiết đảm bảo rằng bất kỳ giao dịch nào phụ thuộc vào Ti cũng phải bị

bm. Để thực hiện sự chắc chắn này, ta cần bố trí các hạn chế trên kiểu lịch trình được

phép trong hệ thống.

                                                98

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

4.6.1. Lịch trình khả phục hồi

Xét lịch trình schedule-10 trong đó T9 là một giao dịch ch{ thực hiện một ch{ thị

Read(A). Giả sp hệ thống cho phép T9 bàn giao (commit) ngay sau khi thực hiện ch{

thị Read(A). Như vậy T9 bàn giao trước T8. Giả sp T8 thất bại trước khi bàn giao, vì

T9 vì T9 đã đọc giá trị của hạng mục giữ liệu A được viết bởi T8 , ta phải bm dở T9 để

đảm bảo tính nguyên tp giao dịch. Song T9 đã được bàn giao và không thể bm dở được.

Ta có tình huống trong đó không thể khôi phục đúng sau thất bại của T8:

Schedule-10

Lịch trình schedule-10 là một ví dụ về lịch trình không phục hồi được và không

dược phép. Hầu hết các hệ CSDL đòi hmi tất cả các lịch trình phải phục hồi được. Một

lịch trình khả phục hồi là lịch trình trong đó, đối với mỗi cặp giao dịch Ti, Tj, nếu Tj

đọc hạng mục dữ liệu được viết bới Ti thì hoạt động bàn giao của Tj phải xảy ra sau

hoạt động bàn giao của Ti .

4.6.2. Lịch trình cascadeless

Ngay cả khi lịch trình là khả phục hồi, để phục hồi đúng sau thất bại của một

giao dịch Ti ta phải cuộn lại một vài giao dịch. Tình huống như thế xảy ra khi các giao

dịch đọc dữ liệu được viết bởi Ti . Ta xét lich trình schedule-11 sau

                                                 99

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Giao dịch T10 viết một giá trị được đọc bởi T11 . Giao dịch T12 đọc một giá trị

được viết bởi T11. Giả sp rằng tại điểm này T10 thất bại. T10 phải cuộn lại, do T11 phụ

thuộc vào T10 nên T11 cũng phải cuộn lại và cũng như vậy với T12. Hiện tượng trong

đó một giao dịch thất bại kéo theo một dãy các giao dịch phải cuộn lại được gọi là sự

cuộn lại hàng loạt (cascading rollback).

Cuộn lại hàng loạt dẫn đến việc hun bm một khối lượng công việc đáng kể. Phải

hạn chế các lịch trình để việc cuộn lại hàng loạt không thể xảy ra. Các lịch trình như

vậy được gọi là các lịch trình cascadeless. Một lịch trình cascadeless là một lịch trình

trong đó mỗi cặp giao dịch Ti, Tj nếu Tj đọc một hạng mục dữ liệu đước viết trước đó

bởi Ti, hoạt động bàn giao của Ti phải xuất hiện trước hoạt động đọc của Tj. Một lịch

trình cascadeless là khả phục hồi.

4.6.3. Thực thi cô lập

Có nhiều sơ đồ điều khiển cạnh tranh có thể được sp dụng để đảm bảo các tính

chất một lịch trình phải có (nhằm giữ CSDL ở trạng thái nhất quán, cho phép quản lý

các giao dịch ...), ngay cả khi nhiều giao dịch thực hiện cạnh tranh, ch{ các lịch trình

có thể chấp nhận được sinh ra, bất kể hệ điều hành chia s‡ thời gian tài nguyên như thế

nào giữa các giao dịch.

Như một ví dụ, ta xét một sơ đồ điều khiển cạnh tranh sau: Một giao dịch tậu

một chốt (lock) trên toàn bộ CSDL trước khi nó khởi động và tháo chốt khi nó đã bàn

giao. Trong khi giao dịch giữ chốt không giao dịch nào khác được phép tậu chốt và

như vậy phải chờ đến tận khi chốt được tháo. Trong đối sách chốt, ch{ một giao dịch

được thực hiện tại một thời điểm và như vậy ch{ lịch trình tuần tự được sinh ra. Sơ đồ

điều khiển cạnh tranh này cho ra một hiệu năng cạnh tranh nghèo nàn. Ta nói nó cung

cấp một bậc cạnh tranh nghèo (poor degree of concurrency).

Mục đích của các sơ đồ điều khiển cạnh tranh là cung cấp một bậc canh tranh

cao trong khi vẫn đảm bảo các lịch trình được sinh ra là khả tuần tự xung đột hoặc khả

tuần tự view và cascadeless.

4.7. Định nghĩa giao dịch trong SQL

Chu~n SQL đặc tả sự bắt đầu một giao dịch một cánh không tường minh. Các

giao dịch được kết thúc bởi một trong hai lệnh SQL sau:

                                                 100

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

•  Commit work bàn giao giao dịch hiện hành và bắt đầu một giao dịch

mới

•  Rollback work gây ra sự hun bm giao dịch hiện hành

Te khoá work là chọn lựa trong cả hai lệnh. Nếu một chương trình kết thúc

thiếu cả hai lệnh này, các cập nhật hoặc được bàn giao hoặc bị cuộn lại là các sự thực

hiện phụ thuộc. Chu~n cũng đặc tả hệ thống phải đảm bảo cả tính khả tuần tự và tính

tự do te việc cuộn lại hàng loạt. Định nghĩa tính khả tuần tự được ding bởi chu~n là

một lịch trình phải có cùng hiệu quả như một lịch trình tuần tự như vậy tính khả tuần

tự xung đột và view đều được chấp nhận. Chu~n SQL-92 cũng cho phép một giao dịch

đặc tả nó có thể được thực hiện theo một cách mà có thể làm cho nó trở nên không khả

tuần tự với sự tôn trọng các giao dịch khác. Ví dụ, một giao dịch có thể hoạt động ở

mức Read uncommitted, cho phép giao dịch đọc các m~u tin them chí nếu chúng

không được bàn giao. Đặc điểm này được cung cấp cho các giao dich dài các kết quả

của chúng không nhất thiết phải chính xác. Ví dụ, thông tin xấp x{ thường là đủ cho

các thống kê được dùng cho tối ưu hoá vấn tin.

Các mức nhất quán được đặc tả trong SQL-92 là:

Serializable : mặc nhiên

Repeatable read : ch{ cho phép đọc các record đã được bàn giao, hơn nữa yêu

cầu giữa hai Read trên một record bởi một giao dịch không một giao dịch nào khác

được phép cập nhật record này. Tuy nhiên, giao dịch có thể không khả tuần tự với sự

tôn trọng các giao dịch khác. Ví dụ, khi tìm kiếm các record thoả mãn các điều kiện

nào đó, một giao dịch có thể tìm thấy một vài record được xen bởi một giao dịch đã

bàn giao.

Read committed: Ch{ cho phép đọc các record đã được bàn giao, nhưng không

có yêu cầu thêm trên các Read khả lặp. Ví dụ, giữa hai Read của một record bởi một

giao dịch, các m~u tin có thể được cập nhật bởi các giao dịch đã bàn giao khác.

Read uncommitted: Cho phép đọc cả các record chưa được bàn giao. Đây là

mức nhất quán thấp nhất được phép trong SQL-92.

4.7.1. Kiểm thử tính khả tuần tự

Khi thiết kế các sơ đồ điều khiển cạnh tranh, ta phải chứng tm rằng các lịch

trình được sinh ra bởi sơ đồ là khả tuần tự. Để làm điều đó, trước tiên ta phải biết làm

                                                 101

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

thế nào để xác định, với một lịch trình cụ thể đã cho, có là khả tuần tự hay không.

4.7.2. Kiểm thử tính khả tuần tự xung đột

Giả sp S là một lịch trình. Ta xây dựng một đồ thị định hướng, được gọi là đồ

thị trình tự (precedence graph), te S. Đồ thị gồm một cặp (V, E) trong đó V là tập các

đ{nh và E là tập các cung. Tập các đ{nh bao gồm tất cả các giao dịch tham gia vào lịch

trình. Tập các cung bao gồm tất cả các cung dạng Ti → Tjsao cho một trong các điều

kiện sau được thoả mãn:

1. Ti thực hiện Write(Q) trước Tj thực hiện Read(Q).

2. Ti thực hiện Read(Q) trước khi Tj thực hiện Write(Q).

3. Ti thực hiện Write(Q) trước khi Tj thực hiện Write(Q).

Nếu một cung Ti → Tj tồn tại trong đồ thị trình tự, thì trong bất kỳ lịch trình tuần tự S’

nào tương đương với S, Ti phải xuất hiện trước Tj.

Đồ thị trình tự đối với schedule-1 là:                                                       vì tất cả các ch{ thị của

T1 được thực hiện trước ch{ thị đầu tiên của T2.

Đồ thị trình tự đối với schedule-2 là:                                                       vì tất cả các ch{ thị của

T2 được thực hiện trước ch{ thị đầu tiên của T1.

Đồ thị trình tự đối với schedule-4 chứa các cung T1→ T2 vì T1 thực hiện

Read(A) trước T2 thực hiện Write(A). Nó cũng chứa cung T2 → T1 vì T2 thực hiện

Read(B) trước khi T1 thực hiện Write(B):

Nếu đồ thị trình tự đối với S có chu trình, khi đó lịch trình S không là khả tuần

tự xung đột. Nếu đồ thị không chứa chu trình, khi đó lịch trình S là khả tuần tự xung

đột. Thứ tự khả tuần tự có thể nhận được thông qua sắp xếp topo (topological sorting),

nó xác định một thứ tự tuyến tính nhất quán với thứ tự bộ phận của đồ thị trình tự. Nói

chung, có một vài thứ tự tuyến tính có thể nhận được qua sắp xếp topo. Ví dụ, đồ thị

sau:

                                                    102

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Có hai thứ tự tuyến tính chấp nhận được là:

Như vậy, để kiểm thp tính khả tuần tự xung đột, ta cần xây dựng đồ thị trình tự

và gọi thuật toán phát hiện chu trình. Ta nhận được một sơ đồ thực nghiệm để xác

định tính khả tuần tự xung đột. Như ví dụ, schedule-1 và schedule-2, đồ thị trình tự

của chúng không có chu trình, do vậy chúng là các chu trình khả tuần tự xung đột,

trong khi đồ thị trình tự của schedule-4 chứa chu trình do vậy nó không là khả tuần tự

xung đột.

4.7.3. Kiểm thử tính khả tuần tự View

Ta có thể spa đổi phép kiểm thp đồ thị trình tự đối với tính khả tuần tự xung đột

dể kiểm thp tính khả tuần tự view. Tuy nhiên, phép kiểm thp này phải trả giá cao về

thời gian chạy.

Xét lịch trình schedule-9, nếu ta tuân theo quy tắc trong phép kiểm thp tính khả

tuần tự xung đột để tạo đồ thị trình tự, ta nhận được đồ thị sau:

                                               103

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Đồ thị này có chu trình, do vậy schedule-9 không là khả tuần tự xung đột. Tuy

nhiên, đã đã thấy nó là khả tuần tự view (do nó tương đương với lịch trình tuần tự <

T3, T4 , T6 >). Cung T3 → T4 không được xen vào đồ thị vì các giá trị của hạng mục Q

được sản sinh bởi T3 và T4 không được dùng bởi bất kỳ giao dịch nào khác và T6 sản

sinh ra giá trị cuối mới của Q. Các ch{ thị Write(Q) của T3 và T4 được gọi là các

Write vô dụng (Useless Write). Điều trên ch{ ra rằng không thể sp dụng đơn thuần sơ

đồ đồ thị trình tự dể kiểm thp tính khả tuần tự view. Cần thiết phát triển một sơ đồ cho

việc quyết định cung nào là cần phải xen vào đồ thị trình tự.

Xét một lịch trình S. Giả sp giao dịch Tj đọc hạng mục dữ liệu Q được viết bởi

Ti . Rõ ràng là nếu S là khả tuần tự view, khi đó, trong bất kỳ lịch trình tuần tự S’

tương đương với S, Ti phải đi trước Tj . Bây giờ giả sp rằng, trong lịch trình S, giao

dịch Tk thực hiện một Write(Q), khi đó, trong lịch trình S’, Tk phải hoặc đi trước Ti

hoặc đi sau Tj . Nó không thể xuất hiện giữa Ti và Tj vì như vậy Tj không đọc giá trị

của Q được viết bởi Ti và như vậy S không tương đương view với S’. Các ràng buộc

này không thể biểu dion được trong thuật ngữ của mô hình đồ thị trình tự đơn giản

được nêu lên trước đây. Như trong ví dụ trước, khó khăn nảy sinh ở chỗ ta biết một

trong hai cung Tk → Ti và Tj → Tk phải được xen vào đồ thị nhưng ta chưa tạo được

quy tắc để xác định sự lựa chọn thích hợp. Để tạo ra quy tắc này, ta cần mở rộng đồ thị

định hướng để bao hàm các cung gán nhãn, ta gọi đồ thị như vậy là đồ thị trình tự gán

nhãn (Label precedence graph). Cũng như trước đây, các nút của đồ thị là tất cả các

giao dịch tham gia vào lịch trình. Các quy tắc xen cung gán nhãn được dion giải như

sau:

Giả sp S là lịch trình gồm các giao dịch { T1, T2, ... , Tn }. Tb và Tf là hai giao

dịch giả: Tb phát ra Write(Q) đối với mỗi Q được truy xuất trong S, Tf phát ra

Read(Q) đối với mỗi Q được truy xuất trong S. Ta xây dựng lich trình mới S’ te S

                                                 104

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

bằng cách xen Tb ở bắt đầu của S và Tf  ở cuối của S. Đồ thị trình tự gán nhãn đố với

S’ được xây dung dựa trên các quy tắc:

1. Thêm cung Ti → 0 Tj , nếu Tj đọc giá trị của hạng mục dữ liệu Q được viết

bởi Ti.

2. Xoá tất cả các cung liên quan tới các giao dịch vô dụng. Một giao dịch Ti

được gọi là vô dụng nếu không có con đường nào trong đồ thị trình tự dẫn te Ti đến Tf.

3. Đối với mỗi hạng mục dữ liệu Q sao cho Tj đọc giá trị của Q được viết bởi Ti

và Tk thực hiện Write(Q), Tk ≠Tb tiến hành các bước sau :

a. Nếu Ti = Tb và Tj ≠Tf, khi đó xen cung Tj → 0  Tk vào đồ thị trình tự gán   nhãn.

b. Nếu Ti ≠ Tb và Tj = Tf khi đó xen cung Tk → 0    Ti vào đồ thị trình tự gán nhãn.

c. Nếu Ti ≠ Tb và Tj ≠ Tf khi đó xen cả hai cung Tk → p Ti và Tj → p Tk vào đồ thị trình

tự gán nhãn, trong đó p là một số nguyên duy nhất lớn hơn 0 mà chưa được sp dụng

trước đó để gán nhãn cung.

Quy tắc 3c phản ánh rằng nếu Ti viết hạng mục dữ liệu được đọc bởi Tj thì một

giao dịch Tk viết cùng hạng mục dữ liệu này phải hoặc đi trước Ti hoặc đi sau Tj. Quy

tắc 3a và 3b là trường hợp đặc biệt là kết quả của sự kiện Tb và Tf cần thiết là các giao

dịch đầu tiên và cuối cùng tương ứng. Như một ví dụ, ta xét schedule-7. Đồ thị trình tự

gán nhãn của nó được xây dựng qua các bước 1 và 2 là:

Đồ thị sau cùng của nó là (cung T3 → T4 là kết quả của 3a, cung T4 → T3 là kết

quả của 3b) :

                                                  105

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Đồ thị trình tự gán nhãn của schedule-9 là:

Cuối cùng, ta xét lịch trình schedule-10:

Đồ thị trình tự gán nhãn của schedule-10 là:

        106

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

T3

                                                                                           0                          0     1   0    1

Tb

                                                                                                                                T4           Tf

                                                                                                                      0                  0

T7

Đồ thị trình tự gán nhãn của schedule-7 chứa chu trình tối tiểu : T3 → T4 → T3

Đồ thị trình tự gán nhãn của schedule-10 chứa chu trình tối tiểu: T3 → T1 → T3

Đồ thị trình tự gán nhãn của schedule-9 không chứa chứa chu trình nào.

Nếu đồ thị trình tự gán nhãn không chứa chu trình, lịch trình tương ứng là khả

tuàn tự view, như vậy schedule-9 là khả tuần tự view. Tuy nhiên, nếu đồ thị chứa chu

trình, điều kiện này không kéo theo lịch trình tương ứng không là khả tuần tự view.

Đồ thị trình tự gán nhãn của schedule-7 chứa chu trình và lịch trình này không là khả

tuần tự view. Bên cạnh đó, lịch trình schedule-10 là khả tuần tự view, nhưng đồ thị

trình tự gán nhãn của nó có chứa chu trình. Bây giờ ta giả sp rằng có n cặp cung tách

biệt, đó là do ta đã áp dụng n lần quy tắc 3c trong sự xây dựng đồ thị trình tự. Khi đó

có 2n đồ thị khác nhau, mỗi một chứa đúng một cung trong mỗi cặp. Nếu một đồ thị

nào đó trong các đồ thị này là phi chu trình, khi đó lịch trình tương ứng là khả tuần tự

view. Thuật toán này đòi hmi một phép kiểm thp vét cạn các đồ thị riêng biệt, và như

vậy thuộc về lớp vấn đề NP-đầy đủ.

Ta xét đồ thị schedule-10. nó có đúng một cặp tách biệt. Hai đồ thị riêng biệt

là:

                                                 107

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Đồ thị thứ nhất không chứa chu trình, do vậy lịch trình là khả tuần tự view.

                                     108

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Câu hỏi

1. Hãy nêu và phân tích các tính chất cần có của một giao dịch.

2. Trong khi thực hiện, một giao dịch  trải qua một vài trạng thái đến tận khi nó bàn giao

hoặc bm dở. Liệt kê tất cả các dãy trạng thái có thể giao dịch có thể trải qua. Giải thích tại sao

mỗi bắc cầu trạng thái có thể xảy ra.

3. Giải  thích  sự  khác  biệt giữa  lịch trình tuần tự  (Serial schedule) và lịch trình khả tuần tự

(Serializable schedule).

4. Xét hai giao dịch sau:

T1 :                                                                                                   Read(A);

Read(B);

If A=0 then B:=B+1;

Write(B).

T2 :                                                                                                   Read(B);

Read(A);

If B=0 then A:=A+1;

Write(A).

Giả thiết yêu cầu nhất quán là A=0 V B=0 với A=B=0 là các giá trị khởi đầu

a.          Chứng tm rằng mỗi sự thự hiện tuần tự bao gồm hai giao dịch này bảo tồn tính

nhất quán của CSDL.

b.         Nêu một sự thực hiện cạnh tranh của T1 và T2 sinh ra một lịch trình không khả

tuần tự.

c.          Có một sự thực hiện cạnh tranh của T1 và T2 sinh ra một lịch trình khả tuần tự

không ?

5. Do một lịch trình khả tuần tự xung đột là một lịch trình khả tuần tự view. Tại sao ta lại

nhấn mạnh tính khả tuần tự xung đột hơn tính khả tuần tự view?

6. Xét đồ thị trình tự sau:

                                                             109

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Lịch trình tương ứng là khả tuần tự xung đột không? Giải thích

7. Xét đồ thị trình tự gán nhãn sau:

Lịch trình tương ứng là khả tuần tự view không? Giải thích.

8. Lịch trình khả phục hồi là gì? Tại sao cần thiết tính khả phục hổi của một lịch trình?

9. Lịch trình cascadeless là gì? Tại sao cần thiết tính cascadeless của lịch trình?

                                                  110

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Chương 5

ĐIỀU KHIỂN CẠNH TRANH

5.1. Giao thức dựa trên chốt

Một phương pháp để đảm bảo tính khả tuần tự là yêu cầu việc truy xuất đến

hạng mục dữ liệu được tiến hành theo kiểu loại trừ tương hỗ; có nghĩa là trong khi

một giao dịch đang truy xuất một hạng mục dữ liệu, không một giao dịch nào khác có

thể sửa đổi hạng mục này. Phương pháp chung nhất được dùng để thực thi yêu cầu

này là cho phép một giao dịch truy xuất một hạng mục dữ liệu chỉ nếu nó đang giữ

chốt trên hạng mục dữ liệu này.

5.1.1. Chốt

Có nhiều phương thức chốt hạng mục dữ liệu. Ta hạn chế việc nghiên cứu trên

hai phương thức:

1. Shared. Nếu một giao dịch Ti nhận được một chốt ở phương thức shared (ký

hiệu là S) trên hạng mục Q, khi đó Ti có thể đọc, nhưng không được viết Q.

2. Exclusive. Nếu một giao dịch Ti nhận được một chốt ở phương thức

Exclusive (ký                                                                         hiệu là X), khi đó Ti có thể cả đọc lẫn viết Q.

Ta yêu cầu là mỗi giao dịch đòi hỏi một chốt ở một phương thức thích hợp trên hạng

mục dữ liệu Q, phụ thuộc vào kiểu hoạt động mà nó sẽ thực hiện trên Q. Giả sử một

giao dịch Ti đòi hỏi một chốt phương thức A trên hạng mục Q mà trên nó giao dich Tj

(Tj ≠ Ti) hiện đang giữ một chốt phương thức B. Nếu giao dịch Ti có thể được cấp

một chốt trên Q ngay, bất chấp sự hiện diện của chốt phương thức B, khi đó ta nói

phương thức A tương thích với phương thức B. Một hàm như vậy có thể được biểu

diễn bởi một ma trận. Quan hệ tương thích giữa hai phương thức chốt được cho bởi

ma trận comp sau:

                                                                                      S                                                 X

S                                                                                     True                                              False

X                                                                                     False                                             False

Comp(A, B)= true có nghĩa là các phương thức A và B tương thích. Các chốt

phương thức shared có thể được giữ đồng thời trên một hạng mục dữ liệu. Một

chốt exclusive đến sau phải chờ đến tận khi tất cả các chốt phương thức shared

đếntrước được tháo ra.

                                                                   111

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Một giao dịch yêu cầu một chốt shared trên hạng mục dữ liệu Q bằng cách

thực hiện chỉ thị lock-S(Q), yêu cầu một chốt exclusive thông qua chỉ thị lock-X(Q).

Một hạng mục dữ liệu Q có thể được tháo chốt thông qua chỉ thị unlock(Q).

Để truy xuất một hạng mục dữ liệu, giao dịch Ti đầu tiên phải chốt hạng mục

này. Nếu hạng mục này đã bị chốt bởi một giao dịch khác ở phương thức không

tương thích, bộ điều khiển cạnh tranh sẽ không cấp chốt cho đến tận khi tất cả các

chốt không tương thích bị giữ bởi các giao dịch khác được tháo. Như vậy Ti phải chờ

đến tận khi tất cả các chốt không tương thích bị giữ bởi các giao dịch khác được giải

phóng.

Giao dịch Ti có thể tháo chốt một hạng mục dữ liệu mà nó đã chốt trước đây.

Một giao dịch cần thiết phải giữ một chốt trên một hạng mục dữ liệu chừng nào mà

nó còn truy xuất hạng mục này. Hơn nữa, đối với một giao dịch việc tháo chốt ngay

sau truy xuất cuối cùng đến hạng mục dữ liệu không luôn luôn là điều mong muốn vì

như vậy tính khả tuần tự có thể không được đảm bảo. Để minh hoạ cho tình huống

này, ta xét ví dụ sau: A và B là hai tài khoản có thể được truy xuất bởi các giao dịch

T1 và T2 .

Giao dịch T1 chuyển 50$ từ tài khoản B sang tài khoản A và được xác định

như sau:

T1 :    Lock-X(B);

Read(B);

B:=B-50;

Write(B);

Unlock(B);

Lock-X(A);

Read(A);

A:=A+50;

Write(A);

Unlock(A);

Giao dịch T2 hiển thị tổng số lượng tiền trong các tài khoản A và B (A + B) và

được xác định như sau;

T2 :    Lock-S(A);

Read(A);

Unlock(A);

Lock-S(B);

                                               112

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Read(B);

Unlock(B);

Display(A+B);

Giả sử giá trị của tài khoản A và B tương ứng là 100                                       $ và 200                                                                          $. Nếu hai giao

dịch này thực hiện tuần tự, hoặc theo thứ tự T1, T2 hoặc theo thứ tự T2, T1, và khi dó

T2 sẽ hiển thị giá trị 300                                                                 $. Tuy nhiên nếu các giao dịch này thực hiện cạnh tranh, giả

sử theo lịch trình schedule-1, trong trường hợp như vậy giao dịch T2 sẽ hiển thị giá trị

250                                                                                        $ một kết quả không đúng. Lý do của sai lầm này là do giao dịch T1 đã tháo chốt

hạng   mục   B   quá   sớm   và   T2   đã   tham   khảo   một   trạng

thái không nhất quán.

Lịch trình schedule 1 bày tỏ các hành động được thực hiện bởi các giao dịch

cũng như các thời điểm khi các chốt được cấp bởi bộ quản trị điều khiển cạnh tranh.

Giao dịch đưa ra một yêu cầu chốt không thể thực hiện hành động kế của mình đến

tận khi chốt được cấp bởi bộ quản trị điều khiển cạnh tranh; do đó, chốt phải được

cấp trong khoảng thời gian giữa hoạt động yêu cầu chốt và hành động sau của giao

dịch.  Sau  này  ta  sẽ  luôn  giả  thiết  chốt  được  cấp  cho  giao  dịch

ngay trước hành động kế và như vậy ta có thể bỏ qua cột bộ quản trị điều khiển cạnh

tranh trong bảng .

Schedule-1

                                                                                                        113

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Bây giờ giả sử rằng tháo chốt bị làm trễ đến cuối giao dịch. Giao dịch T3

tương ứng với T1 với tháo chốt bị làm trễ được định nghĩa như sau:

T3 :    Lock-X(B);

Read(B);

B:=B-50;

Write(B);

Lock-X(A);

Read(A);

A:=A+50;

Write(A);

Unlock(B);

Unlock(A);

Giao dịch T4 tương ứng với T2 với thá chốt bị làm trễ được xác định như sau:

T4 :    Lock-S(A);

Read(A);

Lock-S(B);

Read(B);

Display(A+B);

Unlock(A);

Unlock(B);

Các lịch trình có thể trên T3 và T4 không để cho T4 hiển thị trạng thái không

nhất quán. Tuy nhiên, sử dụng chốt có thể dẫn đến một tình huống không mong đợi.

Ta hãy xét lịch  trình bộ phận schedule-2 trên T3 và T4 sau:

Schedule-2

                                         114

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Do T3 giữ một chốt phương thức Exclusive trên B, nên yêu cầu một chốt

phương thức shared của T4 trên B phải chờ đến khi T3 tháo chốt. Cũng vậy, T3 yêu

cầu một chốt Exclusive trên A trong khi T4 đang giữ một chốt shared trên nó và như

vậy phải chờ. Ta gặp phải tình huống trong đó T3 chờ đợi T4 đồng thời T4 chờ đợi T3

một sự chờ đợi vòng tròn, và như vậy không giao dịch nào có thể tiến triển. Tình

huống này được gọi là deadlock (khoá chết). Khi tình huống khoá chết xảy ra hệ

thống buộc phải cuộn lại một trong các giao dịch. Mỗi khi một giao dịch bị cuộn lại,

các hạng mục dữ liệu bị chốt bởi giao dịch phải được tháo chốt và nó trở nên sẵn có

cho giao dịch khác, như vậy các giao dịch này có thể tiếp tục được sự thực hiện của

nó.

Nếu ta không sử dụng chốt hoặc tháo chốt hạng mục dữ liệu ngay khi có thể

sau đọc hoặc viết hạng mục, ta có thể rơi vào trạng thái không nhất quán. Mặt khác,

nếu ta không tháo chốt một hạng mục dữ liệu trước khi yêu cầu một chốt trên một

hạng mục khác, dealock có thể xảy ra. Có các phương pháp tránh dealock trong một

số tình huống, tuy nhiên nói chung dealock là khó tránh khi sử dụng chốt nếu ta

muốn tránh trạng thái không nhất quán. Dealock được ưa thích hơn trạng thái không

nhất quán vì chúng có thể điều khiển được bằng cách cuộn lại các giao dịch trong khi

đó trạng thái không nhất quán có thể dẫn đến các vấn đề thực tế mà hệ CSDL không

thể điều khiển.

Ta sẽ yêu cầu mỗi giao dịch trong hệ thống tuân theo một tập các quy tắc ,

được gọi là giao thức chốt (locking protocol), chỉ định khi một giao dịch có thể chốt

và tháo chốt mỗi một trong các hạng mục dự liệu. Giao thức chốt hạn chế số các lịch

trình có thể. Tập các lịch trình như vậy là một tập con thực sự của tập tất cả các lịch

trình khả tuần tự có thể.

Xét { T0 , T1 , ..., Tn } một tập các giao dịch tham gia vào lịch trình S. Ta nói

Ti đi trước Tj trong S, và được viết là Ti → Tj , nếu tồn tại một hạng mục dữ liệu Q

sao cho Ti giữ chốt phương thức A trên Q , Tj giữ chốt phương thức B trên Q muộn

hơn và comp(A,B) = false. Nếu Ti → Tj , thì Ti sẽ xuất hiện trước Tj trong bất kỳ lịch

trình tuần tự nào. Ta nói một lịch trình S là hợp lệ dưới một giao thức chốt nếu S là

một lịch trình tuân thủ các quy tắc của giao thức chốt đó. Ta nói rằng một giao thức

chốt đảm bảo tính khả tuần tự xung đột nếu và chỉ nếu đối với tất cả các lịch trình

hợp lệ, quan hệ → kết hợp là phi chu trình.

5.1.2. Cấp chốt

Khi một giao dịch yêu cầu một chốt trên một hạng mục dữ liệu ở một phương

                                                115

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

thức và không có một giao dịch nào khác giữ một chốt trên cùng hạng mục này ở một

phương thức xung đột, chốt có thể được cấp. Tuy nhiên, phải thận trọng để tránh kịch

bản sau: giả sử T2 giữ một chốt phương thức shared trên một hạng mục dữ liệu, một

giao dịch khác T1 yêu cầu một chốt phương thức exclusive cũng trên hạng mục này,

rõ ràng T1 phải chờ T2 tháo chốt. Trong khi đó một giao dịch khác T3 yêu cầu một

chốt phương thức shared, do yêu cầu chốt này tương thích với phương thức chốt

được giữ bởi T1 nên nó được cấp cho T3. Tại thời điểm T2 tháo chốt, T1 vẫn phải chờ

sự tháo chốt của T3, nhưng bây giờ lại có một giao dịch T4 yêu cầu một chốt phương

thức shared và nó lại được cấp do tính tương thích và cứ như vậy, có thể T1 sẽ không

bao giờ được cấp chốt mà nó yêu cầu trên hạng mục dữ liệu. Ta gọi hiện tượng này là

bị chết đói (starved).

Để tránh sự chết đói của các giao dịch, việc cấp chốt được tiến hành như sau:

Khi một giao dịch Ti yêu cầu một chốt trên một hạng mục dữ liệu Q ở phương thức

M, chốt sẽ được cấp nếu các điều kiện sau được thoả mãn:

1. Không có giao dịch khác đang giữ một chốt trên Q ở phương thức xung đột

với M .

2. Không có một giao dịch nào đang chờ được cấp một chốt trên M và đã đưa

ra yêu cầu về chốt trước Ti .

5.1.3. Giao thức chốt hai kỳ

Giao thức chốt hai kỳ là một giao thức đảm bảo tính khả tuần tự. Giao thức

này yêu cầu mỗi một giao dịch phát ra yêu cầu chốt và tháo chốt thành hai kỳ:

1. Kỳ xin chốt (Growing phase). Một giao dịch có thể nhận được các chốt,

nhưng có không thể tháo bất kỳ chốt nào

2. Kỳ tháo chốt (Shrinking phase). Một giao dịch có thể tháo các chốt nhưng

không thể nhận được một chốt mới nào.

Khởi đầu, một giao dịch ở kỳ xin chốt. Giao dịch tậu được nhiều chốt như cần

thiết. Mỗi khi giao dịch tháo một chốt, nó đi vào kỳ tháo chốt và nó không thể phát ra

bất kỳ một yêu cầu chốt nào nữa. Các giao dich T3 và T4 là hai kỳ. Các giao dịch T1

và T2 không là hai kỳ. Người ta có thể chứng minh được giao thức chốt hai kỳ đảm

bảo tính khả tuần tự xung đột, nhưng không đảm bảo tránh được dealock và việc

cuộn lại hàng loạt. Cuộn lại hàng loạt có thể tránh được bởi một sự sửa đổi chốt hai

kỳ được gọi là giao thức chốt hai kỳ nghiêm ngặt. Chốt hai kỳ nghiêm ngặt đòi hỏi

thêm tất cả các chốt phương thức exclusive phải được giữ đến tận khi giao dịch bàn

                                               116

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

giao. Yêu cầu này đảm bảo rằng bất kỳ dữ liệu nào được viết bởi một giao dịch chưa

bàn giao bị chốt trong phương thức exclusive đến tận khi giao dịch bàn giao, điều đó

ngăn ngừa bất kỳ giao dịch khác đọc dữ liệu này.

Một biến thể khác của chốt hai kỳ là giao thức chốt hai kỳ nghiêm khắc. Nó đòi hỏi

tất cả các chốt được giữ đến tận khi giao dịch bàn giao. Hầu hết các hệ CSDL thực

hiện chốt hai kỳ nghiêm ngặt hoặc nghiêm khắc.

Một sự tinh chế giao thức chốt hai kỳ cơ sở dựa trên việc cho phép chuyển đổi

chốt: nâng cấp một chốt shared sang exclusive và hạ cấp một chốt exclusive thành

chốt shared. Chuyển đổi chốt không thể cho phép một cách tuỳ tiện, nâng cấp chỉ

được phép diễn ra trong kỳ xin chốt, còn hạ cấp chỉ được diễn ra trong kỳ tháo chốt.

Một giao dịch thử nâng cấp một chốt trên một hạng mục dữ liệu Q có thể phải chờ.

Giao thức chốt hai kỳ với chuyển đổi chốt cho phép chỉ sinh ra các lịch trình khả tuần

tự xung đột. Nếu các chốt exclusive được giữ đến tận khi bàn giao, các lịch trình sẽ là

cascadeless.

Ta xét một ví dụ: Các giao dịch T8 và T9 được nêu trong ví dụ chỉ được trình

bày bởi các hoạt động ý nghĩa là Read và Write.

T8 :    Read(A1);

Read(A2);

…………

Read(An);

Write(A1).

T9 :    Read(A1);

Read(A2);

Display(A1 + A2)

Nếu ta sử dụng giao thức chốt hai kỳ, khi đó T8 phải chốt A1 ở phương thức

exclusive. Bởi vậy, sự thực hiện cạnh tranh của hai giao dịch rút cuộc trở thành thực

hiện tuần tự. Ta thấy rằng T8 cần một chốt exclusive trên A1 chỉ ở cuối sự thực hiện

của nó, khi nó write(A1). Như vậy, T8 có thể khởi động chốt A1 ở phương thức

shared, và đổi chốt này sang phương thức exclusive sau này. Như vậy ta có thể nhận

được tính cạnh tranh cao hơn, vì như vậy T8 và T9 có thể truy xuất đến A1 và A2

đồng thời.

Ta biểu thị sự chuyển đổi từ phương thức shared sang phương thức exclusive

bởi upgrade và từ phương thức exclusive sang phương thức shared bởi downgrade.

                                                117

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Upgrade chỉ được phép xảy ra trong kỳ xin chốt và downgrade chỉ được phép xảy ra

trong kỳ tháo chốt. Lịch trình chưa hoàn tất dưới đây cho ta một minh hoạ về giao

thức chốt hai kỳ với chuyển đổi chốt.

Chú ý rằng một giao dịch thử cập nhật một chốt trên một hạng mục dữ liệu Q

có thể buộc phải chờ. Việc chờ bắt buộc này xảy ra khi Q đang bị chốt bởi giao dịch

khác ở phương thức shared.

Giao thức chốt hai kỳ với chuyển đổi chốt chỉ sinh ra các lịch trình khả tuần tự

xung đột, các giao dịch có thể được tuần tự hoá bởi các điểm chốt của chúng. Hơn

nữa, nếu các chốt exclusive được giữ đến tận khi kết thúc giao dịch, lịch trình sẽ là

cascadeless.

Ta mô tả một sơ đồ đơn giản nhưng dược sử dụng rộng rãi để sinh tự động các

chỉ thị chốt và tháo chốt thích hợp cho một giao dịch: Mỗi khi giao dich T xuất ra

một chỉ thị Read(Q), hệ thống sẽ xuất ra một chỉ thị Lock-S(Q) ngay trước chỉ thị

Read(Q). Mỗi khi giao dịch T xuất ra một hoạt động Write(Q), hệ thống sẽ kiểm tra

xem T đã giữ một chốt shared nào trên Q hay chưa, nếu đã, nó xuất ra một chỉ thị

Upgrade(Q) ngay trước chỉ thị Write(Q), nếu chưa, nó xuất ra chỉ thị Lock-X(Q)

ngay trước Write(Q). Tất cả các chốt giao dịch nhận được sẽ được tháo chốt sau khi

giao dịch bàn giao hay bỏ dở.

5.1.4. Giao thức dựa trên đồ thị

Ta đã biết, trong trường hợp thiếu vắng các thông tin liên quan đến cách thức

các hạng mục dữ liệu được truy xuất, giao thức chốt hai kỳ là cần và đủ để đảm bảo

tính khả tuần tự. Nếu ta muốn phát triển các giao thức không là hai kỳ, ta cần các

thông tin bổ xung trên cách thức mỗi giao dịch truy xuất CSDL. Có nhiều mô hình

                                              118

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

khác nhau về lượng thông tin được cung cấp. Mô hình đơn giản nhất đòi hỏi ta phải

biết trước thứ tự trong đó các hạng mục dữ liệu sẽ được truy xuất. Với các thông tin

như vậy, có thể xây dựng các giao thức chốt không là hai kỳ nhưng vẫn đảm bảo tính

khả tuần tự xung đột.

Để có được hiểu biết trước như vậy, ta áp đặt một thứ tự bộ phận, ký hiệu →,

trên tập tất cả các hạng mục dữ liệu D ={ d1 , d2 , ..., dn }. Nếu di → dj , bất kỳ giao

dịch nào truy xuất cả di và dj phải truy xuất di trước khi truy xuất dj. Thứ tự bộ phận

này cho phép xem D như một đồ thị định hướng phi chu trình, được gọi là đồ thị

CSDL (DataBase Graph). Trong phần này, để đơn giản, ta hạn chế chỉ xét các đồ thị

là các cây và ta sẽ đưa ra một giao thức đơn giản, được gọi là giao thức cây (tree

protocol), giao thức này hạn chế chỉ dùng các chốt exclusive.

Trong giao thức cây, chỉ cho phép chỉ thị chốt Lock-X, mỗi giao dịch T có thể

chốt một hạng mục dữ liệu nhiều nhất một lần và phải tuân theo các quy tắc sau:

1. Chốt đầu tiên bởi T có thể trên bất kỳ hạng mục dữ liệu nào

2. Sau đó, một hạng mục dữ liệu Q có thể bị chốt bởi T chỉ nếu cha của Q hiện

đang bị chốt bởi T

3. Các hạng mục dữ liệu có thể được tháo chốt bất kỳ lúc nào

4. Một hạng mục dữ liệu đã bị chốt và được tháo chốt bởi T, không thể bị T

chốt lại lần nữa. Các lịch trình hợp lệ trong giao thức cây là khả tuần tự xung đột. Ví

dụ 6.1. Cây CSDL là:

Chỉ các chỉ thị chốt và tháo chốt của các giao dịch được trình bày:

T10: Lock-X(B); Lock-X(E); Lock-X(D); Unlock(B); Unlock(E); Lock-X(G);

Unlock(D); Unlock(G).

T11 : Lock-X(D); Lock-X(H); Unlock(D); Unlock(H).

                                                 119

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

T12 : Lock-X(B); Lock-X(E); Unlock(B); Unlock(E).

T13 : Lock-X(D); Lock-X(H); Unlock(D); Unlock(H).

Một lịch trình tuân theo giao thức cây chứa tất cả bốn giao dịch trên được cho

trong hình bên dưới. Ta nhận thấy, các lịch trình tuân thủ giao thức cây không chỉ là

khả tuần tự xung đột mà còn đảm bảo không có dealock. Giao thức cây có mặt thuận

lợi so với giao thức hai kỳ là tháo chốt có thể xảy ra sớm hơn. Việc tháo chốt sớm có

thể dẫn đến rút ngắn thời gian chờ đợi và tăng tính cạnh tranh. Hơn nữa, do giao thức

là không dealock, nên không có cuộn lại. Tuy nhiên giao thức cây có điểm bất lợi là,

trong một vài trường hợp, một giao dịch có thể phải chốt những hạng mục dữ liệu mà

nó không truy xuất. Chẳng hạn, một giao dịch cần truy xuất các hạng mục dữ liệu A

và J trong đồ thị CSDL trên, phải chốt không chỉ A và J mà phải chốt cả các hạng

mục B, D, H. Việc chốt bổ xung này có thể gây ra việc tăng tổng phí chốt, tăng thời

gian chờ đợi và giảm tính cạnh tranh. Hơn nữa, nếu không biết trước các hạng mục

dữ liệu nào sẽ cần thiết phải chốt, các giao dịch sẽ phải chốt gốc của cây mà điều này

làm giảm mạnh tính cạnh tranh.

Đối với một tập các giao dịch, có thể có các lịch trình khả tuần tự xung đột

không thể nhận được từ việc tuân theo giao thức cây. Có các lịch trình được sinh ra

bởi tuân theo giao thức chốt hai kỳ nhưng không thể được sinh ra bởi tuân theo giao

thức cây và ngược lại.

Lịch trình khả tuần tự dưới giao thức cây

5.1.5. Đa hạt

                                               120

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Trong các sơ đồ điều khiển cạnh tranh được mô tả trước đây, ta đã sử dụng

hạng mục dữ liệu như đơn vị trên nó sự đồng bộ hoá được thực hiện. Tuy nhiên, có

các hoàn cảnh trong đó việc nhóm một vài hạng mục dữ liệu và xử lý chúng như một

đơn vị đồng bộ hoá mang lại nhiều lợi ích. Nừu một giao dich Ti phải truy xuất toàn

bộ CSDL và giao thức chốt được sử dụng, khi đó Ti phải chốt mỗi hạng mục dữ liệu

trong CSDL. Như vậy việc thực hiện các chốt này sẽ tiêu tốn một thời gian đáng kể.

Sẽ hiệu quả hơn nếu Ti chỉ cần một yêu cầu chốt để chốt toàn bộ CSDL. Mặt khác,

nếu Ti cần truy xuất chỉ một vài hạng mục dữ liệu, nó không cần thiết phải chốt toàn

bộ CSDL vì như vậy sẽ giảm tính cạnh tranh. Như vậy, cái mà ta cần là một cơ chế

cho phép hệ thống xác định nhiều mức hạt. Một cơ chế như vậy là cho phép các hạng

mục dữ liệu có kích cỡ khác nhau và xác định một sự phân cấp các hạt dữ liệu, trong

đó các hạt nhỏ được ẩn náu bên trong các hạt lớn. Sự phân cấp như vậy có thể được

biểu diễn đồ thị như một cây. Một nút không là lá của cây đa hạt biểu diễn dữ liệu

được kết hợp với con cháu của nó. Như một ví dụ minh hoạ, ta xét cây sau:

Nó gồm bốn mức nút. Mức cao nhất là toàn bộ CSDL. Thấp hơn là các nút

kiểu vùng: CSDL bao gồm các vùng này. Mỗi vùng lại có các nút kiểu file như các

con của nó, mỗi vùng chứa đúng các file này và không file nào nằm trong nhiều hơn

một vùng. Cuối cùng, mỗi file có các nút con kiểu mẩu tin, không mẩu tin nào hiện

diện trong hơn một file.

Mỗi nút trong cây có thể được chốt một các cá nhân. Như đã làm trong giao

thức chốt hai kỳ, ta sẽ sử dụng các phương thức chốt shared và exclusive . Khi một

giao dịch chốt một nút, trong phương thức shared hoặc exclusive, giao dịch cũng chốt

tất cả các nút con cháu của nút này ở cùng phương thức. Ví dụ Ti chốt tường minh

file Fb ở phương thức exclusive, nó đã chốt ẩn tất cả các mẩu tin của Fb cũng trong

phương thức exclusive.

Giả sử giao dịch Tj muốn chốt mẩu tin Rb6 của file Fb. vì giao địch Ti đã chốt

tường minh file Fb, mẩu tin Rb6 cũng bị chốt ẩn. Song làm thế nào để hệ thống biết

                                             121

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

được Tj có thể chốt Rb6 hay không: Tj phải duyệt cây từ gốc đến mẩu tin Rb6, nếu có

một nút bất kỳ tren đường dẫn bị chốt ở phương thức không tương thích, Tj phải chờ.

Bây giờ, nếu Tk muốn chốt toàn bộ CSDL, nó phải chốt nút gốc. Tuy nhiên, do Ti

hiện đang giữ một chốt trên Fb, một bộ phận của cây, nên Tk sẽ không thành công.

Vậy làm thế nào để hệ có thể chốt được nút gốc: Một khả năng là tìm kiếm trên toàn

bộ cây, giải pháp này phá huỷ hoàn toàn sơ đồ mục đích của sơ đồ chốt đa hạt. Một

giải pháp hiệu quả hơn là đưa vào một lớp mới các phương thức chốt, được gọi là

phương thức chốt tăng cường (intension lock mode). Nếu một nút bị chốt ở phương

thức tăng cường, chốt tường minh được tiến hành ở mức thấp hơn của cây (hạt min

hơn). Chốt tăng cường được được đặt trên tất cả các tổ tiên của một nút trước khi nút

đó được chốt tường minh. Như vậy một giao dịch không cần thiết phải tìm kiếm toàn

bộ cây để xác định nó có thể chốt một nút thành công hay không. Một giao dịch

muốn chốt một nút, chẳng hạn Q, phải duyệt một đường dẫn từ gốc đến Q, trong khi

duyệt cây, giao dịch chốt các nút trên đường đi ở phương thức tăng cường.

Có một phương thức tăng cường kết hợp với phương thức shared và một với

phương thức exclusive. Nếu một nút bị chốt ở phương thức tăng cường shared (IS),

chốt tường minh được tiến hành ở mức thấp hơn trong cây, nhưng chỉ là một các chốt

phương thức shared. Tương tự, nếu một nút bị chốt ở phương thức tăng cường

exclusive (IX), chốt tường minh được tiến hành ở mức thấp hơn với các chốt

exclusive hoặc shared. Nếu một nút bị chốt ở phương thức shared và phương thức

tăng cường exclusive (SIX), cây con có gốc là nút này bị chốt tường minh ở phương

thức shared và chốt tường minh được tiến hành ở mức thấp hơn với các chốt

exclusive. Hàm tính tương thích đối với các phương thức chốt này cho bởi ma trận:

Giao thức chốt đa hạt dưới đây đảm bảo tính khả tuần tự. Mỗi giao địch T có

thể chốt một nút Q theo các quy tắc sau:

1. Hàm tương thích chốt phải được kiểm chứng

2. Gốc của cây phải được chốt đầu tiên, và có thể được chốt ở bất kỳ phương

                                              122

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

thức nào .

3. Một nút Q có thể được chốt bởi T ở phương thức S hoặc IS chỉ nếu cha của

Q hiện đang bị chốt bởi T ở hoặc phương thức IX hoặc phương thức IS.

4. Một nút Q có thể được chốt bởi T ở phương thức X, SIX hoặc IX chỉ nếu

cha của Q hiện đang bị chốt ở hoặc phương thức IX hoặc phương thức SIX .

5. T có thể chốt một nút chỉ nếu trước đó nó chưa tháo chốt một nút nào.

6. T có thể tháo chốt một nút Q chỉ nếu không con nào của Q hiện đang bị

chốt bởi T. Ta thấy rằng giao thức đa hạt yêu cầu các chốt được tậu theo thứ tự Top-

Down, được tháo theo thứ tự Bottom-Up.

Ví dụ 6.2. Xét cây phân cấp hạt như trên và các giao dịch sau:

Giả sử giao dịch T18 đọc mẩu tin Ra2 của file Fa. Khi đó T18 cần phải chốt DB,

vùng A1                                                                                và Fa ở phương thức IS và Ra2 ở phương thức S: Lock-IS(DB); Lock-

IS(A1);Lock-IS(Fa); lock-S(Ra2)

Giả sử giao dịch T19 sửa đổi mẩu tin Ra9 trong file Fa , khi đó T19 cần phải chốt

CSDL, vùng A1 và file Fa ở phương thức IX và Ra9 ở phương thức X: Lock-IX(DB);

Lock-IX(A1); lock-IX(Fa); lock-X(Ra9)

Giả sử giao dịch T20 đọc tất cả các mẩu tin của file Fa , khi đó T20 cần phải

chốt CSDL, và vùng A1 ở phương thức IS và chốt Fa ở phương thức S: Lock-IS(DB);

Lock  IS(A1); Lock-S(F=a)

Giả sử giao dịch T=21 đọc toàn bộ CSDL, nó có thể làm điều đó sau khi chốt

CSDL ở phương thức S: Lock-S(DB)

Chú ý rằng T18, T20 và T21 có thể truy xuất đồng thời CSDL, giao dịch T19 có

thể thực hiện cạnh tranh với T18 nhưng không với T20 hoặc T21.

5.2. Giao thức dựa trên tem thời gian

5.2.1. Tem thời gian

Ta kết hợp với mỗi giao dịch Ti trong hệ thống một tem thời gian cố định duy

nhất, được biểu thị bởi TS(Ti). Tem thời gian này được gán bởi hệ CSDL trước khi

giao dịch Ti bắt đầu thực hiện. Nếu một giao dịch Ti đã được gán tem thời gian

TS(Ti) và một giao dịch mới Tj đi vào hệ thống, khi đó TS(Ti) < TS(Tj). Có hai

phương pháp đơn giản để thực hiện sơ đồ này:

1. Sử dụng giá trị của đồng hồ hệ thống như tem thời gian: Một tem thời gian

của một                                                                                giao dịch bằng giá trị của đồng hồ khi giao dịch đi vào hệ thống.

                                                                                      123

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

2. Sử dụng bộ đếm logic: bộ đếm được tăng lên mỗi khi một tem thời gian đã

được gán, tem thời gian của một giao dịch bằng với giá trị của bộ đếm khi giao dich

đi vào hệ thống. Tem thời gian của các giao dịch xác định thứ tự khả tuần tự. Như

vậy, nếu TS(Ti) < TS(Tj), hệ thống phải đảm bảo rằng lịch trình được sinh ra là tương

đương với một lịch trình tuần tự trong đó Ti xuất hiện trước Tj .

Để thực hiện sơ đồ này, ta kết hợp với mỗi hạng mục dữ liệu Q hai giá trị tem

thời gian:

- W-timestamp(Q) biểu thị tem thời gian lớn nhất của giao dịch bất kỳ đã thực

hiện Write(Q) thành công

- R-timestamp(Q) biểu thị tem thời gian lớn nhất của giao dịch bất kỳ đã thực

hiện Read(Q) thành công

Các tem thời gian này được cập nhật mỗi khi một Write hoặc một Read mới

được thực hiện.

5.2.2. Giao thức thứ tự tem thời gian

Giao thức thứ tự tem thời gian đảm bảo rằng các Write và Read xung đột bất

kỳ được thực hiện theo thứ tự tem thời gian. Giao thức này hoạt động như sau:

1. Giả sử giao dịch Ti phát ra Read(Q).

a. Nếu TS(Ti) < W-Timestamp(Q), Ti cần đọc một giá trị của Q đã được viết

rồi. Do đó, hoạt động Read bị vứt bỏ và Ti bị cuộn lại.

b. Nếu TS(Ti)≥ W-Timestamp(Q), hoạt động Read được thực hiện và R-

Timestamp  được  đặt  bằng  giá  trị  lớn  nhất  trong  hai  giá  trị  R-Timestamp

và TS(Ti).

2. Giả sử giao dịch Ti phát ra Write(Q).

a. Nếu TS(Ti) < R-Timestamp(Q), Giá trị của Q mà Ti đang sinh ra được giả

thiết là để được dùng cho các giao dịch đi sau nó                                       (theo trình tự thời gian),

nhưng nay không cần đến nũa. Do vậy, hoạt động Write này bị vứt bỏ và Ti bị cuộn

lại

b. Nếu TS(Ti) < W-Timestamp(Q), Ti đang thử viết một giá trị đã quá hạn

của Q, Từ đó, hoạt động Write bị vứt bỏ và Ti bị cuộn lại

c. Ngoài ra, hoạt động Write được thực hiện và W-Timestamp(Q) được đặt là

TS(Ti) .

Một giao dịch Ti bị cuộn lại bởi sơ đồ điều khiển cạnh tranh như kết quả của

                                                124

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

hoạt động Read hoặc Write đang được phát ra, được gán với một tem thời gian mới

và được tái khởi động lại (được xem như một giao dịch mới tham gia vào hệ thống) .

Ta  xét  các  giao  dịch  T14  và  T15  được  xác  định  như  dưới  đây:

T14 :    Read(B);

Read(A);

Display(A+B);

T15 : Read(B);

B:=B-50;

Write(B);

Read(A);

A:=A+50;

Write(A);

Display(A+B).

Ta giả thiết rằng một giao dịch được gán cho một tem thời gian ngay trước chỉ

thị đầu tiên của nó. Như vậy, lịch trình schedule-3 dưới đây có TS(T14) < TS(T15), và

là một lịch trình hợp lệ dưới giao thức tem thời gian:

Schedule-3

Giao thức thứ tự tem thời gian đảm bảo tính khả tuần tự xung đột và không

dealock.

5.2.3. Quy tắc viết Thomas

Một biến thể của giao thức tem thời gian cho phép tính cạnh tranh cao hơn

giao thức thứ tự tem thời gian. Trước hết ta xét lịch trình schedule-4 sau:

                                              125

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Scheduele-4

Nếu áp dụng giao thức thứ tự tem thời gian, ta có TS(T16)< TS(T17). Hoạt

dộng Read(Q) của T16 và Write(Q) của T17 thành công, khi T16 toan thực hiện hoạt

động Write(Q) của nó, vì TS(T16) < TS(T17) = W-timestamp(Q), nên Write(Q) của

T16 bị vứt bỏ và giao dịch T16 bị cuộn lại. Sự cuộn lại này là không cần thiết. Nhận

xét này cho ta một sửa đổi phiên bản giao thức thứ tự tem thời gian: Các quy tắc giao

thức đối với Read không thay đổi, các quy tắc đối với Write được thay đổi chút ít như

sau: Giả sử giao dịch Ti phát ra Write(Q).

1. Nếu TS(Ti) < R-timestamp(Q), Giá trị của Q mà Ti đang sinh ra được giả

thiết là để được dùng cho các giao dịch đi sau nó (theo trình tự thời gian), nhưng nay

không cần đến nữa. Do vậy, hoạt động Write này bị vứt bỏ và Ti bị cuộn lại.

2. Nếu TS(Ti) < W-timestamp(Q), Ti đang thử viết một giá trị lỗi thời của Q.

Do vậy, hoạt động Write này có thể bị bỏ lơ (không được thực hiện, nhưng Ti không

bị cuộn lại).

3. Ngoài ra, hoạt động Write được thực hiện và W-timestamp(Q) được đặt là

TS(Ti). Sự sửa đổi đối với giao thức thứ tự tem thời gian này được gọi là quy tắc viết

Thomas.   Quy tắc viết Thomas cho khả năng sinh các lịch trình khả tuần tự mà các

giao thức thức trước đây không thể.

5.2.4. Giao thức dựa trên tính hợp lệ

Trong trường hợp đa số các giao dịch trong hệ thống là các giao dịch chỉ đọc

(read-only), tỷ suất xung đột giữa các giao dịch là thấp. Như vậy nhiều giao dịch

trong chúng thực hiện thiếu sự giám sát của sơ đồ điều khiển cạnh tranh cũng vẫn giữ

cho hệ thống ở trạng thái nhất quán. Hơn nữa, một sơ đồ điều khiển cạnh tranh đưa

vào một tổng phí đáng kể (cho thực hiện mã lệnh, thời gian chờ của giao dịch ...).

Việc tìm một sơ đổ với tổng phí nhỏ là một mục tiêu. Nhưng khó khăn là ta phải biết

trước những giao dịch sẽ bị dính líu vào một xung đột. Để có được các hiểu bét đó, ta

cần một sơ đồ để giám sát hệ thống.

Ta giả thiết rằng mỗi giao dịch Ti , trong thời gian sống của nó, thực hiện

trong hai hoặc ba kỳ khác nhau, phụ thuộc vào nó là một giao dịch chỉ đọc hay là một

                                               126

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

giao dịch cập nhật. Các kỳ này, theo thứ tự, là như sau:

1. Kỳ đọc. Trong kỳ này, các giá trị của các hạng mục dữ liệu khác nhau được

đọc vào các biến cục bộ của Ti . Tất cả các hoạt động Write được thực hiện trên các

biến cục bộ tạm, không cập nhật CSDL hiện hành.

2. Kỳ hợp lệ. Giao dịch Ti thực hiện một phép kiểm thử sự hợp lệ để xác định

xem nó có thể sao chép đến CSDL các biến cục bộ tạm chứa các kết quả của các hoạt

Write mà không vi phạm tính khả tuần tự xung đột hay không.

3. Kỳ viết. Nếu Ti thành công trong kỳ hợp lệ, các cập nhật hiện hành được áp

dụng vào CSDL, nếu không Ti bị cuộn lại. Mỗi giao dịch phải trải qua ba kỳ theo thứ

tự trên, tuy nhiên, ba kỳ của các giao dịch đang thực hiện cạnh tranh có thể đan xen

nhau.

Các kỳ đọc và kỳ viết tự nó đã rõ ràng. Chỉ có kỳ hợp lệ là cần thảo luận thêm.

Để thực hiện kiểm thử sự hợp lệ, ta cần biết khi nào các kỳ khác nhau của giao dịch

Ti xảy ra. Do vậy, ta sẽ kết hợp ba tem thời gian với giao dịch Ti :

1. Start(Ti). Thời gian khi Ti bắt đầu sự thực hiện.

2. Validation(Ti). Thời gian khi Ti kết thúc kỳ đọc và khởi động kỳ hợp lệ.

3. Finish(Ti). Thời gian khi Ti kết thúc kỳ viết.

Ta xác định thứ tự khả tuần tự bởi kỹ thuật thứ tự tem thời gian sử dụng giá trị

tem thời gian Validation(Ti). Như vậy, giá trị TS(Ti) = Validation(Ti) và nếu TS(Tj) <

TS(Tk) thì bất kỳ lịch trình nào được sinh ra phải tương đương với một lịch trình tuần

tự trong đó giao dịch Ti xuất hiẹn trước giao dịch Tk . Lý dota chọn Validation(Ti)

như tem thời gian của Ti , mà không chọn Start(Ti), là vì ta hy vọng thời gian trả lời

sẽ nhanh hơn.

Phép kiểm thử hợp lệ đối với Tj đòi hỏi rằng, đối với mỗi giao dịch Ti với

TS(Ti) < TS(Tj), một trong các điều kiện sau phải được thoả mãn:

1. Finish(Ti) < Start(Tj). Do Ti hoàn tất sự thực hiện của nó trước khi Tj bắt

đầu, thứ tự khả tuần tự được duy trì.

2. Tập các hạng mục dữ liệu được viết bởi Ti không giao với tập các hạng mục

dữ liệu được đọc bởi Tj và Ti hoàn tất kỳ viết của nó trước khi Tj bắt đầu kỳ

hợp lệ (Start(Tj) < Finish(Ti) < Validation(Tj)). Điều kiện này đảm bảo rằng các

viết của Ti và Tj là không chồng chéo. Do các viết của Ti không ảnh hưởng tới đọc

của Tj và do Tj không thể ảnh hưởng tới đọc của Ti , thứ tự khả tuần tự được duy trì.

Lịch trình schedule-5 cho ta một minh hoạ về giao thức dựa trên tính hợp lệ:

                                               127

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Sơ đồ hợp lệ tự động canh chừng việc cuộn lại hàng loạt, do các Write hiện tại

xảy ra chỉ sau khi giao dịch phát ra Write đã bàn giao.

5.3. Các sơ đồ đa phiên bản

Các sơ đồ điều khiển cạnh tranh được thảo luận trước đây đảm bảo tính khả

tuần tự hoặc bởi làm trễ một hoạt động hoặc bỏ dở giao dịc đã phát ra hoạt động đó.

Chẳng hạn, một hoạt động Read có thể bị làm trễ vì giá trị thích hợp còn chưa được

viết hoặc nó có thể bị vứt bỏ vì giá trị mà nó muốn đọc đã bị viết đè rồi. Các khó

khăn này có thể được che đi nếu bản sao cũ của mỗi hạng mục dữ liệu được giữ trong

một hệ thống.

Trong các hệ CSDL đa phiên bản, mỗi hoạt động Write(Q) tạo ra một bản mới

của Q. Khi một hoạt động Read(Q) được phát ra, hệ thống chọn lựa một trong các

phiên bản của Q để đọc. Sơ đồ điều khiển cạnh tranh phải đảm bảo rằng việc chọn

lựa này được tiến hành sao cho tính khả tuần tự được đảm bảo. Do lý do hiệu năng,

một giao dịch phải có khả năng xác định dễ dàng và mau chóng phiên bản dhạng mục

dữ liệu sẽ đọc.

5.3.1. Thứ tự tem thời gian đa phiên bản

Kỹ thuật chung được dùng trong các sơ đồ đa phiên bản là tem thời gian. Ta

kết hợp với một giao dịch một tem thời gian tĩnh duy nhất, ký hiệu TS(Ti). Tem thời

gian này được gán trước khi khi giao dịch bắt đầu sự thực hiện. Mỗi hạng mục dữ

liệu Q kết hợp với một dãy < Q1, Q2, ... , Qm > mỗi phiên bản Qk chứa ba trường dữ

liệu:

                                            128

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

- Content là giá trị của phiên bản Qi

- W-timestamp(Qk) là tem thời gian của giao dịch đã tạo ra phiên bản Qk

- R-timestamp(Qk) là tem thời gian lớn nhất của giao dịch đã đọc thành công

phiên bản Qk .Một giao dịch, gọi là Ti , tạo ra phiên bản Qk của hạng mục dữ liệu Q

bằng cách phát ra một hoạt động Write(Q). Trường Content của phiên bản chứa giá

trị được viết bởi Ti. Wtimestamp và R-timestamp được khởi động là TS(Ti). Giá trị

R-timestamp được cập nhật mỗi khi một giao dịch Tj đọc nội dung của Qk và R-

timestamp(Qk) < TS(Tj).

Sơ đồ tem thời gian đa phiên bản dưới đây sẽ đảm bảo tính khả tuần tự. Sơ đồ

hoạt động như sau: giả sử Tj phát ra một hoạt động Read(Q) hoặc Write(Q). Qk ký

hiệu phiên bản của Q, tem thời gian viết của nó là tem thời gian viết lớn nhất nhỏ hơn

hoặc bằng TS(Tj).

1. Nếu giao dịch Tj phát ra một Read(Q), khi đó giá trị trả lại là nội dung của

phiên bản Qk.

2. Nếu Tj phát ra một Write(Q) và nếu TS(Tj) < R-timestamp(Qk) khi đó giao

dịch Tj bị cuộn lại. Nếu không, nếu TS(Tj) = W-timestamp(Qk) nội dung của Qk bị

viết đè, khác đi một phiên bản mới của Q được tạo.

Các phiên bản không còn được dùng đến nữa bị xoá đi dựa trên quy tắc sau:

Giả sử có hai phiên bản Qi và Qj của một hạng mục dữ liệu và cả hai phiên bản này

cùng có Wtimestamp nhỏ hơn tem thời gian của giao dịch già nhất trong hệ thống,

khi đó phiên bản già hơn trong hai phiên bản Qi và Qj sẽ không còn được dùng nữa

và bị xoá đi.

Sơ đồ thứ tự tem thời gian đa phiên bản có tính chất hay đó là một yêu cầu

Read không bao giờ thất bại và không phải chờ đợi. Trong một hệ thống mà hoạt

động Read xảy ra nhiều hơn Write cái lợi này là đáng kể. Tuy nhiên có vài điều bất

lợi của sơ đồ này là: thứ nhất đọc một hạng mục dữ liệu cũng đòi hỏi cập nhật trường

R-timestamp, thứ hai là xung đột giữa các giao dịch được giải quyết bằng cuộn lại.

5.3.2. Chốt hai kỳ đa phiên bản

Giao thức chốt hai kỳ đa phiên bản cố gắng tổ hợp những ưu điểm của điều

khiển cạnh tranh với các ưu điểm của chốt hai kỳ. Giao thức này phân biệt các giao

dịch chỉ đọc và các giao dịch cập nhật.

Các giao dịch cập nhật thực hiện chốt hai kỳ nghiêm khắc (các chốt được giữ đến tận

khi kết thúc giao dịch). Mỗi hạng mục dữ liệu có một tem thời gian. Tem thời gian

                                               129

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

trong trường hợp này không là tem thời gian dựa trên đồng hồ thực mà là một bộ

đếm, sẽ được gọi là TScounter.

Các giao dịch chỉ đọc được gán tem thời gian là giá trị hiện hành của TS-

counter trước khi chúng bắt đầu sự thực hiện: chúng tuân theo giao thức thứ tự tem

thời gian đa phiên bản để thực hiện đọc. Như vậy, khi một giao dịch chỉ đọc Ti phát

ra một Read(Q), giá trị trả lại là nội dung của phiên bản mà tem thời gian của nó là

tem thời gian lớn nhất nhỏ hơn TS(Ti).

Khi một giao dịch cập nhật đọc một hạng mục, nó tậu một chốt shared trên

hạng mục, rồi đọc phiên bản mới nhất của hạng mục (đối với nó). Khi một giao dịch

cập nhật muốn viết một hạng mục, đầu tiên nó tậu một chốt exclusive trên hạng mục

này, rồi tạo ra một phiên bản mới cho hạng mục. Write được thực hiện trên phiên bản

mới này và tem thời gian của phiên bản mới được khởi động là +∞.

Khi một giao dịch cập nhật Ti hoàn tất các hoạt động của nó, nó thực hiện xử

lý bàn giao như sau: Đầu tiên, Ti đặt tem thời gian trên mỗi phiên bản nó đã tạo là

TS-counter+1; sau đó Ti tăng TS-counter lên 1. Chỉ một giao dịch cập nhật được

phép thực hiện xử lý bàn giao tại một thời điểm.

Các phiên bản bị xoá cùng kiểu cách với thứ tự tem thời gian đa phiên bản.

5.4. Quản trị Deadlock

Một hệ thống ở trạnh thái deadlock nếu tồn tại một tập hợp các giao dịch sao

cho mỗi giao dịch trong tập hợp đang chờ một giao dịch khác trong tạp hợp. Chính

xác hơn, tồn tại một tập các giao dịch { T0 , T2 , ..., Tn } sao cho T0 đang chờ một

hạng mục dữ liệu được giữ bởi T1 , T1 đang chờ một hạng mục dữ liệu đang bị chiếm

bởi T2 , ..., Tn-1 đang chờ một hạng mục dữ liệu được giữ bởi Tn và Tn đang chờ một

hạng mục T0 đang chiếm. Không một giao dịch nào có thể tiến triển được trong tình

huống như vậy. Một cách chữa trị là viện dẫn một hành động tẩy rửa, chẳng hạn cuộn

lại một vài giao dịch tham gia vào deadlock.

Có hai phương pháp chính giải quyết vấn đề deadlock: Ngăn ngừa deadlock,

phát hiện deadlock và khôi phục. Giao thức ngăn ngừa deadlock đảm bảo rằng hệ

thống sẽ không bao giờ đi vào trạng thái deadlock. Sơ đồ phát hiện deadlock và khôi

phục (deadlock-detection and deadlock-recovery scheme) cho phép hệ thống đi vào

trạng thái deadlock và sau đó cố gắng khôi phục. Cả hai phương pháp đều có thể dẫn

đến việc cuộn lại giao dịch. Phòng ngừa deadlock thường được sử dụng nếu xác suất

hệ thống đi vào deadlock cao, phát hiện và khôi phục hiệu quả hơn trong các trường

                                             130

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

hợp còn lại.

5.4.1. Phòng ngừa deadlock

Có hai cách tiếp cận phòng ngừa deadlock: Một đảm bảo không có chờ đợi

vòng tròn xảy ra bằng cách sắp thứ tự các yêu cầu chốt hoặc đòi hỏi tất cả các chốt

được tậu cùng nhau. Một cách tiếp cận khác gần hơn với khắc phục deadlock và thực

hiện cuộn lại thay vì chờ đợi một chốt. Chờ đợi là tiểm ẩn của deadlock.

Sơ đồ đơn giản nhất dưới cách tiếp cận thứ nhất đòi hỏi mỗi giao dịch chốt tất

cả các hạng mục dữ liệu trước khi nó bắt đầu thực hiện. Hơn nữa, hoặc tất cả được

chốt trong một bước hoặc không hạng mục nào được chốt. Giao thức này có hai bất

lợi chính: một là khó dự đoán, trước khi giao dịch bắt đầu, các hạng mục dữ liệu nào

cần được chốt, hai là hiệu suất sử dụng hạng mục dữ liệu rất thấp do nhiều hạng mục

có thể bị chốt nhưng không được sử dụng trong một thời gian dài.

Sơ đồ phòng ngừa deadlock khác là áp đặt một thứ tự bộ phận trên tất cả các

hạng mục dữ liệu và yêu cầu một giao dịch chốt một hạng mục dữ liệu theo thứ tự

được xác định bởi thứ tự bộ phận này.

Cách tiếp cận thứ hai để phòng ngừa deadlock là sử dụng ưu tiên và cuộn lại

quá trình. Với ưu tiên, một giao dịch T2 yêu cầu một chốt bị giữ bởi giao dịch T1 ,

chốt đã cấp cho T1 có thể bị lấy lại và cấp chgo T2 , T1 bị cuộn lại. Để điều khiển ưu

tiên, ta gán một tem thời gian duy nhất cho mỗi giao dịch. Hệ thống sử dụng các tem

thời gian này để quyết định một giao dịch phải chờ hay cuộn lại. Việc chốt vẫn được

sử dụng để điều khiển cạnh tranh. Nếu một giao dịch bị cuộn lại, nó vẫn giữ tem thời

gian cũ của nó khi tái khởi động. Hai sơ đồ phòng ngừa deadlock sử dụng tem thời

gian khác nhau được đề nghị:

1. Sơ đồ Wait-Die dựa trên kỹ thuật không ưu tiên. Khi giao dịch Ti yêu cầu

một hạng mục dữ liệu bị chiếm bởi Tj , Ti được phép chờ chỉ nếu nó có tem thời gian

nhỏ hơn của Tj nếu không Ti bị cuộn lại (die).

2. Sơ đồ Wound-Wait dựa trên kỹ thuật ưu tiên. Khi giao dịch Ti yêu cầu một

hạng mục dữ liệu hiện đang bị giữ bởi Tj , Ti được phép chờ chỉ nếu nó có tem thời

gian lớn hơn của Tj , nếu không Tj bị cuộn lại (Wounded).

Một điều quan trọng là phải đảm bảo rằng, mỗi khi giao dịch bị cuộn lại, nó

không bị chết đói (starvation) có nghĩa là nó sẽ không bị cuộn lại lần nữa và được

phép tiến triển. Cả hai sơ đồ Wound-Wait và Wait-Die đều tránh được sự chết đói: tại

một thời điểm, có một giao dịch với tem thời gian nhỏ nhất. Giao dịch này không thể

                                               131

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

bị yêu cầu cuộn lại trong cả hai sơ đồ. Do tem thời gian luôn tăng và do các giao dịch

không được gán tem thời gian mới khi chúng bị cuộn lại, một giao dịch bị cuộn lại sẽ

có tem thời gian nhỏ nhất (vào thời gian sau) và sẽ không bị cuộn lại lần nữa. Tuy

nhiên, có những khác nhau lớn trong cách thức hoạt động của hai sơ đồ:

- Trong sơ đồ Wait-Die, một giao dịch già hơn phải chờ một giao dịch trẻ hơn

giải phóng hạng mục dữ liệu. Như vậy, giao dịch già hơn có xu hướng bị chờ nhiều

hơn. Ngược lại, trong sơ đồ Wound-Wait, một giao dịch già hơn không bao giờ phải

chờ một giao dịch trẻ hơn.

- Trong sơ đồ Wait-Die, nếu một giao dịch Ti chết và bị cuộn lại vì nó đòi hỏi

một hạng mục dữ liệu bị giữ bởi giao dịch Tj , khi đó Ti có thể phải tái phát ra cùng

dãy các yêu cầu khi nó khởi động lại. Nếu hạng mục dữ liệu vẫn bị chiếm bởi Tj , Ti

bị chết lần nữa. Như vậy, Ti có thể bị chết vài lần trước khi tậu được hạng mục dữ

liệu    cần thiết. Trong sơ đồ Wound-Wait, Giao dịch Ti bị thương và bị cuộn lại do

Tj yêu cầu hạng mục dữ liệu nó chiếm giữ. Khi Ti khởi động lại, và yêu cầu hạng

mục dữ liệu, bây giờ, đang bị Tj giữ, Ti chờ. Như vậy, có ít cuộn lại hơn trong sơ đồ

Wound-Wait. Một vấn đề nổi trội đối với cả hai sơ đồ là có những cuộn lại không cần

thiết vẫn xảy ra.

5.4.2. Sơ đồ dựa trên timeout

Một cách tiếp cận khác để quản lý deadlock được dựa trên lock timeout. Trong

cách tiếp cận này, một giao dịch đã yêu cầu một chốt phải chờ nhiều nhất một

khoảng thời gian xác định. Nếu chốt không được cấp trong khoảng thời gian này,

giao dịch được gọi là mãn kỳ (time out), giao dịch tự cuộn lại và khởi động lại. Nếu

có một deadlock, một hoặc một vài giao dịch dính líu đến deadlock sẽ time out và

cuộn lại, để các giao dịch khác tiến triển. Sơ đồ này nằm trung gian giữa phòng ngừa

deadlock và phát hiện và khôi phục deadlock.

Sơ đồ timeout dễ thực thi và hoạt động tốt nếu giao dịch ngắn và nếu sự chờ

đợi lâu là do deadlock. Tuy nhiên, khó quyết định được khoảng thời gian timeout. Sơ

đồ này cũng có thể đưa đến sự chết đói.

5.4.3. Phát hiện deadlock và khôi phục

Nếu một hệ thống không dùng giao thức phòng ngừa deadlock, khi đó sơ đồ

phát hiện và khôi phục phải được sử dụng. Một giải thuật kiểm tra trạng thái của hệ

thống được gọi theo một chu kỳ để xác định xem deadlock có xẩy ra hay không. Nếu

có, hệ thống phải khôi phục lại từ deadlock, muốn vậy hệ thống phải:

                                               132

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

- Duy trì thông tin về sự cấp phát hiện hành các hạng mục dữ liệu cho các giao

dịch cũng như các yêu cầu hạng mục dữ liệu chưa được chưa được giải quyết.

- Cung cấp một thuật toán sử dụng các thông tin này để xác định hệ thống đã

đi vào trạng thái deadlock chưa.

- Phục hồi từ deadlock khi phát hiện được deadlock đã xảy ra.

a. Phát hiện deadlock

Deadlock có thể mô tả chính xác bằng đồ thị định hướng được gọi là đồ thị

chờ (wait for graph). Đồ thị này gồm một cặp G = < V, E >, trong đó V là tập các

đỉnh và E là tập các cung. Tập các đỉnh gồm tất cả các giao dịch trong hệ thống. Mỗi

phần tử của E là một cặp Ti → Tj , nó chỉ ra rằng Ti chờ Tj giải phóng một hạng mục

dữ liệu nó cần.

Khi giao dịch Ti yêu cầu một hạng mục dữ liệu đang bị giữ bởi giao dịch Tj

khi đó cung Ti → Tj được xen vào đồ thị. Cạnh này bị xoá đi chỉ khi giao dịch Tj

không còn giữ hạng mục dữ liệu nào mà Ti cần. Deadlock tồn tại trong hệ thống nếu

và chỉ nếu đồ thị chờ chứa một chu trình. Mỗi giao dịch tham gia vào chu trình này

được gọi là bị deadlock. Để phát hiện deadlock, hệ thống phải duy trì đồ thị chờ và

gọi theo một chu kỳ thủ tục tìm kiếm chu trình. Ta xét ví dụ sau:

Đồ thị chờ (phi chu trình)

Do đồ thị không có chu trình nên hệ thống không trong trạng thái deadlock.

Bây giờ, giả sử T28 yêu cầu một hạng mục dữ liệu được giữ bởi T27, cung T28 → T27

được xen vào đồ thị, điều này dẫn đến tồn tại một chu trình T26 → T27 → T28 → T26

có nghĩa là hệ thống rơi vào tình trạng deadlock và T26, T27, T28 bị deadlock.

                                             133

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Vấn đề đặt ra là khi nào thì chạy thủ tục phát hiện ? câu trả lời phụ thuộc hai

yêu tố sau:

1. Deadlock thường xảy ra hay không ?

2. Bao nhiêu giao dịch sẽ bị ảnh hưởng bởi deadlock

Nếu deadlock thường xảy ra, việc chạy thủ tục phát hiện diễn ra thường xuyên

hơn. Các hạng mục dữ liệu được cấp cho các giao dịch bị deadlock sẽ không sẵn

dùng cho các giao dịch khác đến khi deadlock bị phá vỡ. Hơn nữa, số chu trình trong

đồ thị có thể tăng lên. Trong trường hợp xấu nhất, ta phải gọi thủ tục phát hiện mỗi

khi có một yêu cầu cấp phát không được cấp ngay.

b. Khôi phục từ deadlock

Khi thuật toán phát hiện xác định được sự tồn tại của deadlock, hệ thống phải

khôi phục từ deadlock. Giải pháp chung nhất là cuộn lại một vài giao dịch để phá vỡ

deadlock. Ba việc cần phải làm là:

1. Chọn nạn nhân. Đã cho một tập các giao dịch bị deadlock, ta phải xác định

giao dịch nào phải cuộn lại để phá vỡ deadlock. Ta sẽ cuộn lại các giao dịch sao cho

giá phải trả là tối thiểu. Nhiều nhân tố xác định giá của cuộn lại:

a. Giao dịch đã tính toán được bao lâu và bao lâu nữa.

b. Giao dịch đã sử dụng bao nhiêu hạng mục dữ liệu

c. Giao dịch cần bao nhiêu hạng mục dữ liệu nữa để hoàn tất.

d. Bao nhiêu giao dịch bị cuộn lại.

2. Cuộn lại (Rollback). Mỗi khi ta đã quyết định được giao dịch nào phải bị

cuộn lại, ta   phải xác định giao dịch này bị cuộn lại bao xa. Giải pháp đơn giản nhất

là cuộn lại toàn bộ: bỏ dở giao dịch và bắt đầu lại nó. Tuy nhiên, sẽ là hiệu quả hơn

nếu chỉ cuộn lại giao dịch đủ xa như cần thiết để phá vỡ deadlock. Nhưng phương

pháp này đòi hỏi hệ thống phải duy trì các thông tin bổ xung về trạng thái của tất cả

các giao dịch đang chạy.

3. Sự chết đói (Starvation). Trong một hệ thống trong đó việc chọn nạn nhân

                                               134

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

dựa trên các nhân tố giá, có thể xảy ra là một giao dịch luôn là nạn nhân của việc

chọn này và kết quả là giao dịch này không bao giờ có thể hoàn thành. Tình huống

này được gọi là sự chết đói. Phải đảm bảo việc chọn nạn nhân không đưa đến chết

đói. Một giải pháp xem số lần bị cuộn lại của một giao dịch như một nhân tố về giá.

                                            135

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

Câu hỏi

1. Chứng tỏ rằng giao thức chốt hai kỳ đảm bảo tính khả tuần tự xung đột và các

giao dịch có thể được làm tuần tự tương ứng với các điểm chốt của chúng.

2. Xét hai giao dịch sau:

T31 :     Read(A);

Read(B);

If A=0 then B:=B+1;

Write(B);

T32 :                                                                                    Read(B);

Read(A);

If B=0 then A:=A+1;

Write(A);

Thêm các chỉ thị chốt và tháo chốt vào hai giao dịch T31 và T32 sao cho

chúng tuân theo giao thức chốt hai kỳ. Sự thực hiện các giao dịch này có thể dẫn đến

deadlock không?

3. Nêu các ưu điểm và nhược điểm của giao thức chốt hai kỳ nghiêm ngặt.

4. Nêu các ưu điểm và nhược điểm của giao thức chốt hai kỳ nghiêm khắc.

5. Bộ quản trị điều khiển cạnh tranh của một hệ CSDL phải quyết định cấp cho một

đòi hỏi chốt hoặc bắt giao dịch yêu cầu phải chờ.  Hãy  thiết kế  một cấu trúc dữ liệu

(tiết kiệm không gian ) cho phép bộ quản trị điều khiển cạnh tranh cho ra quyết định

mau chóng.

6. Xét sự mở rộng thành giao thức cây-chốt sau. Nó cho phép cả chốt shared và

exclusive:

•            Một giao dịch chỉ đọc chỉ có thể yêu cầu các chốt shared. Một giao dịch

cập nhật chỉ có thể yêu cầu các chốt exclusive

•           Mỗi giao dịch phải tuân theo các quy tắc của giao thức cây-chốt. Các giao

dịch chỉ đọc  đầu tiên có thể chốt bất kỳ hạng mục dữ liệu nào, các giao dịch cập nhật

đầu tiên phải chốt gốc.

Chứng tỏ giao thức đảm bảo tính khả tuần tự và không có deadlock

7. Xét một biến thể của giao thức cây, được gọi là giao thức rừng. CSDL được tổ

chức như một rừng. Mỗi giao dịch T phải tuân theo các quy tắc sau:

                                               136

Phần 1: Nguyên lý các hệ quản trị cơ sở dữ liệu

•           Chốt đầu tiên trong mỗi cây có thể trên bất kỳ hạng mục dữ liệu nào

•            Chốt từ thứ hai trở về sau có thể được yêu cầu chỉ nếu cha của nút được

yêu cầu hiện đang bị chốt

•           Các hạng mục dữ liệu có thể được tháo chốt bất kỳ lúc nào

•            Một hạng mục dữ liệu không được chốt lại bởi T sau khi T đã tháo chốt

cho nó

Chứng tỏ giao thức rừng không đảm bảo tính khả tuần tự

8. Trong chốt đa hạt, sự khác nhau giữa chốt tường minh và chốt ẩn là gì ?

9. Phương thức chốt SIX là hữu dụng trong chốt đa hạt. Phương thức exclusive và

shared tăng cường không được sử dụng. Tại sao nó lại vô dụng ?

10. Đối với mỗi một trong các giao thức sau, mô tả sắc thái ứng dụng thực tế gợi ý sử

dụng giao thức và sắc thái gợi ý không nên sử dụng giao thức:

•           Chốt hai kỳ

•           Chốt hai kỳ với chốt đa hạt

•           Giao thức cây

•           Thứ tự tem thời gian

•           Hợp lệ

•           Thứ tự tem thời gian đa phiên bản

•           Chốt hai kỳ đa phiên bản

11. Chứng tỏ rằng có những lịch trình là có thể dưới giao thức chốt hai kỳ nhưng

không thể dưới giao thức tem thời gian và ngược lại.

12. Với điều kiện nào tránh deadlock ít đắt giá hơn cho phép deadlock rồi phát hiện?

                                              137

Bạn đang đọc truyện trên: AzTruyen.Top

Tags: