HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Xin cám ơn bạn đã dành sự quan tâm cho tài liệu này! Tài liệu này tôi tổng hợp từ nhiều quyển sách khác nhau. Tôi nghĩ nó có ích cho những người muốn hiểu các hệ quản trị cơ sở dữ liệu làm việc như thế nào. Trên cơ sở đó, người đọc có thể thiết kế các cơ sở dữ liệu và tạo ra các hệ thống sử dụng cơ sở dữ liệu quan hệ tốt hơn. Ngoài ra, tôi còn giới thiệu một số hướng đang được phát triển trên thế giới để các bạn tham khảo. Trong quá trình biên-dịch-soạn dựa trên kiến thức của mình, tôi đã rất cố gắng nhưng chắc chắn vẫn có nhiều hạn chế và sai sót. Nếu bạn phát hiện sai sót, hoặc có ý kiến đóng góp nhằm mục đích giúp tôi nâng cao chất lượng của tài liệu này cũng như hoàn thiện chính mình, mong bạn phản hồi về ntquocvinh@gmail.com, ntquocvinh@yahoo.com và ntquocvinh@due.edu.vn. Tôi sẽ cố gắng hoàn thiện tài liệu này, và tất nhiên, không thể thiếu những ý kiến phản hồi của các bạn. Nguyễn Trần Quốc Vinh

i

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

MỤC LỤC

Phần I Kiến thức cơ bản ....................................................................................................... 1

Chương I.1 CSDL và hệ thống tệp tin ............................................................................. 1

I.1.1 Hệ thống tệp tin ..................................................................................................... 3

I.1.1.1 Cấu trúc tệp tin .............................................................................................. 3

I.1.1.2 Đặt tên (gán nhãn) cho tệp tin ....................................................................... 4

I.1.1.3 Bảo vệ tệp tin ................................................................................................ 5

I.1.1.4 Chế độ truy cập nhiều người dùng ................................................................ 6

I.1.2 Lĩnh vực ứng dụng của tệp tin ............................................................................... 6

I.1.3 Yêu cầu của các hệ thống thông tin ....................................................................... 7

Chương I.2 Các chức năng của HQT CSDL. Tổ chức điển hình của một HQT CSDL

hiện đại 10

I.2.1 Các chức năng của HQT CSDL .......................................................................... 10

I.2.1.1 Quản trị dữ liệu trực tiếp trong bộ nhớ ngoài ............................................. 10

I.2.1.2 Quản trị các bộ nhớ đệm (buffers) trong RAM .......................................... 10

I.2.1.3 Điều khiển các giao tác ............................................................................... 11

I.2.1.4 Nhật ký ........................................................................................................ 12

I.2.1.5 Hỗ trợ các ngôn ngữ CSDL ........................................................................ 14

I.2.1.6 Các lợi ích khác........................................................................................... 15

I.2.2 Tổ chức điển hình của một HQT CSDL hiện đại ................................................ 16

Phần II Tổ chức bên trong của HQT CSDL ........................................................................ 18

Chương II.1 Tổ chức bên trong của HQT CSDL ............................................................ 18

II.1.1 Kiến trúc của một HQT CSDL .......................................................................... 18

II.1.2 Các cấu trúc bộ nhớ ngoài, các phương pháp tổ chức chỉ mục (index)............. 18

II.1.3 Lưu trữ quan hệ.................................................................................................. 19

II.1.4 Các chỉ mục ....................................................................................................... 22

II.1.4.1 B-tree ........................................................................................................... 23

II.1.4.2 Băm (Hashing) ............................................................................................ 26

II.1.4.3 Thông tin nhật ký ........................................................................................ 27

ii

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

II.1.4.4 Thông tin phục vụ ....................................................................................... 27

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Chương II.2 Giao tác và tính toàn vẹn CSDL ................................................................. 29

II.2.1 Ví dụ sự phá huỷ tính toàn vẹn CSDL ............................................................... 29

II.2.2 Khái niệm giao tác ............................................................................................. 30

II.2.3 Phân loại giao tác ............................................................................................... 32

II.2.3.1 Giao tác tự chấp nhận (Autocommit mode) ................................................ 32

II.2.3.2 Giao tác được khai báo tường minh (Explicit) ........................................... 33

II.2.3.3 Giao tác giầm (Implicit ) ............................................................................. 34

II.2.3.4 Giao tác tự phục hồi (Auto rollback) .......................................................... 35

II.2.3.5 Giao tác lồng (Nested Transaction) ............................................................ 37

II.2.3.5.1 Khái niệm ............................................................................................... 37

II.2.3.5.2 Các quy tắc ............................................................................................. 37

II.2.3.5.3 Biến @@trancount trong HQT CSDL SQL Server ............................... 39

II.2.4 Ràng buộc tính toàn vẹn CSDL ......................................................................... 39

II.2.5 Phân loại ràng buộc tính toàn vẹn CSDL .......................................................... 41

II.2.5.1 Bằng các cách triển khai (realization)......................................................... 42

II.2.5.2 Phân loại ràng buộc tính toàn vẹn theo thời điểm kiểm tra ........................ 44

II.2.5.3 Phân loại ràng buộc tính toàn vẹn theo không gian ứng dụng .................... 45

II.2.5.3.1 Ràng buộc Miền giá trị ........................................................................... 45

II.2.5.3.2 Ràng buộc thuộc tính.............................................................................. 45

II.2.5.3.3 Ràng buộc bản ghi .................................................................................. 46

II.2.5.3.4 Ràng buộc quan hệ ................................................................................. 50

II.2.5.3.5 Ràng buộc CSDL ................................................................................... 51

II.2.6 Triển khai ràng buộc tính toàn vẹn dạng định nghĩa bằng công cụ SQL .......... 52

II.2.6.1 Các nguyên tắc chung trong triển khai ràng buộc bằng các công cụ SQL . 52

II.2.6.2 Cú pháp ràng buộc theo chuẩn SQL ........................................................... 54

Chương II.3 Giao tác và tính song song (tính đối ngẫu) ................................................. 64

II.3.1 Đôi điều về công việc của giao tác .................................................................... 65

II.3.2 Các vấn đề thực hiện song song các giao tác .................................................... 66

II.3.2.1 Vấn đề mất kết quả cập nhật dữ liệu ........................................................... 66

II.3.2.2 Vấn đề phụ thuộc chưa cố định (đọc dữ liệu bẩn, đọc không chuẩn…) ..... 67

II.3.2.3 Vấn đề xung khắc trong phân tích .............................................................. 67

iii

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

II.3.2.3.1 Đọc không lặp lại ................................................................................... 67

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

II.3.2.3.2 Các phần tử ảo ........................................................................................ 68

II.3.2.3.3 Phân tích xung khắc thực chất ................................................................ 69

II.3.2.3.4 Xung đột giữa các giao tác ..................................................................... 70

II.3.3 Đảm bảo thực thi song song (tính tuần tự) các giao tác .................................... 73

II.3.3.1 Định lý Esvaran về tính tuần tự .................................................................. 73

II.3.3.2 Chiếm lĩnh đồng bộ ..................................................................................... 75

II.3.3.2.1 Các phong toả ......................................................................................... 75

II.3.3.2.2 Giải quyết các vấn đề của tính song song bằng sự giúp đỡ của các phong

toả 76

II.3.3.2.2.1 Vấn đề mất kết quả cập nhật ............................................................ 77

II.3.3.2.2.2 Vấn đề phụ thuộc không được cố định (đọc dữ liệu bẩn, đọc không

chuẩn) 77

II.3.3.2.2.3 Vấn đề xung khắc trong phân tích ................................................... 78

II.3.3.2.2.4 Xung khắc thực chất trong phân tích ............................................... 80

II.3.3.2.2.5 Giải quyết (gỡ bỏ) các tình huống bế tắc ......................................... 81

II.3.3.2.2.6 Phong toả có chủ định (Chiếm lĩnh đồng bộ bằng cách tán nhỏ) .... 83

II.3.3.2.3 Phong toả theo mệnh đề ......................................................................... 88

II.3.3.2.4 Cơ chế tách phiên bản dữ liệu ................................................................ 89

II.3.3.3 Phương pháp mốc thời gian ........................................................................ 91

II.3.3.4 Triển khai tính cô lập các giao tác bằng các công cụ SQL ......................... 92

II.3.3.4.1 Các mức độ cô lập .................................................................................. 92

II.3.3.4.2 Cú pháp các lệnh SQL để định nghĩa mức độ cô lập ............................. 93

Chương II.4 Các giao tác và phục hồi dữ liệu ................................................................. 95

II.4.1 Nhật ký và ghi nhớ trung gian (buffering)......................................................... 96

II.4.2 Các kiểu phục hồi dữ liệu .................................................................................. 98

II.4.2.1 Rollback giao tác riêng biệt ........................................................................ 98

II.4.2.2 Phục hồi sau sự cố “mềm” .......................................................................... 99

II.4.2.3 Tính nhất quán vật lý của CSDL .............................................................. 101

II.4.2.4 Phục hồi sau sự cố “cứng” ........................................................................ 103

II.4.2.5 Phục hồi dữ liệu và chuẩn SQL ................................................................ 104

Chương II.5 Các trình biên dịch SQL. Các vấn đề tối ưu hoá ...................................... 105

iv

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

II.5.1 Sơ đồ chung trong xử lý các truy vấn .............................................................. 105

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

II.5.2 Tối ưu hoá cú pháp các truy vấn ...................................................................... 106

II.5.2.1 Biến đổi logic đơn giản các truy vấn ........................................................ 106

II.5.2.2 Biến đổi các truy vấn bằng cách thay đổi thứ tự các thao tác quan hệ ..... 106

II.5.2.3 Chuyển các truy vấn chứa các truy vấn lồng thành các truy vấn chứa các

phép nối 107

II.5.3 Tối ưu ngữ nghĩa các truy vấn ......................................................................... 108

II.5.3.1 Biến đổi các truy vấn trên cơ sở thông tin mạng ngữ nghĩa ..................... 108

II.5.3.2 Sử dụng các thông tin mạng ngữ nghĩa trong tối ưu hoá các truy vấn ..... 108

II.5.4 Chọn và đánh giá các kế hoạch thực thi các truy vấn khác nhau .................... 108

II.5.4.1 Tạo ra các kế hoạch................................................................................... 108

II.5.4.2 Đánh giá trị giá các kế hoạch thực thi truy vấn ........................................ 108

II.5.4.3 Các đánh giá chính xác hơn ...................................................................... 108

Phần III HQT CSDL trong ki ến trúc “Client−Server” .................................................... 109

Chương III.1 Ki ến trúc “Client−Server” ........................................................................ 109

III.1.1 Các hệ thống mở .............................................................................................. 109

III.1.2 Các máy khách và máy chủ trong mạng cục bộ .............................................. 110

III.1.3 Kiến trúc hệ thống “khách-chủ” ...................................................................... 111

III.1.3.1 Khách thông minh (Smart Client) ............................................................. 113

III.1.4 Các máy chủ CSDL ......................................................................................... 115

III.1.4.1 Các nguyên tắc tương tác giữa phần khách và phần chủ .......................... 115

III.1.4.2 Các ưu điểm của giao thức gọi thủ tục từ xa ............................................ 115

III.1.4.3 Sự phân bố chức năng điển hình giữa khách và chủ................................. 116

III.1.4.4 Các yêu cầu khả năng phần cứng và phần mềm nền tảng đối với khách và

chủ 116

Phần IV Các khung nhìn thực .......................................................................................... 117

Chương IV.1 Khái niệm khung nhìn thực....................................................................... 117

Chương IV.2 Ứng dụng của KNT ................................................................................... 119

IV.2.1 Ứng dụng KNT trong các HQT CSDL thương mại ........................................ 121

IV.2.2 Ứng dụng KNT nhằm đẩy nhanh tốc độ thực thi các truy vấn ........................ 122

IV.2.3 Ứng dụng KNT trong các kho dữ liệu ............................................................. 124

Chương IV.3 Cập nhật KNT ........................................................................................... 124

v

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

IV.3.1 Các cơ chế cập nhật KNT ................................................................................ 124

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

IV.3.2 Phân loại các thuật toán CNGT KNT .............................................................. 126

IV.3.2.1 CNGT có sử dụng đầy đủ thông tin (bảng KNT, các bảng gốc, văn bản truy

vấn và văn bản truy vấn thao tác dữ liệu) ................................................................. 126

IV.3.2.2 CNGT KNT sử dụng một phần thông tin ................................................. 127

IV.3.2.3 Cập nhật trì hoãn ....................................................................................... 130

Chương IV.4 Ứng dụng ý tưởng KNT trong các HQT CSDL chưa hỗ trợ KNT ........... 131

IV.4.1 Ví dụ về hạn chế của KNT trong các HQT CSDL thương mại ....................... 131

IV.4.2 “KNT” trong các HQT CSDL không hỗ trợ KNT .......................................... 134

Phần V Kho dữ liệu – DataWarehouse .............................................................................. 138

Phần VI CSDL phân tán .................................................................................................. 139

Chương VI.1 Các loại hình hệ thống phân tán ................................................................ 140

Chương VI.2 Các kiến trúc của HQT CSDL PT ............................................................ 142

VI.2.1 Các hệ thống khách-chủ .................................................................................. 142

VI.2.2 Các hệ thống máy chủ hợp tác ......................................................................... 142

VI.2.3 Các hệ thống tầng trung gian ........................................................................... 143

Chương VI.3 Lưu trữ dữ liệu trên HQT CSDL PT ......................................................... 144

VI.3.1 Phân mảnh (fragmentation) ............................................................................. 144

VI.3.2 Nhân bản (replication) ..................................................................................... 145

VI.3.2.1 Nhân bản đồng bộ ..................................................................................... 146

VI.3.2.2 Nhân bản không đồng bộ .......................................................................... 147

VI.3.2.2.1 Nhân bản theo nút chính và nhân bản ngang hàng ............................. 147

VI.3.3 Quản trị danh mục phân tán ............................................................................. 150

VI.3.3.1 Đặt tên cho các đối tượng ......................................................................... 150

VI.3.3.2 Cấu trúc danh mục phân tán ..................................................................... 151

VI.3.4 Tính độc lập của dữ liệu phân tán .................................................................... 152

Chương VI.4 Xử lý các truy vấn phân tán ...................................................................... 154

VI.4.1 Các thuật toán nối join ..................................................................................... 154

VI.4.1.1 Các truy vấn nonjoin ................................................................................. 154

VI.4.1.2 Thực thi phép nối trên HQT CSDL PT ..................................................... 155

VI.4.1.2.1 Rút ra những gì cần thiết ..................................................................... 155

VI.4.1.2.2 Chuyển đến một nút ............................................................................ 155

vi

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

VI.4.1.2.3 Semijoins và Bloomjoins .................................................................... 155

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

VI.4.2 Biên dịch phân tán các truy vấn ....................................................................... 157

Chương VI.5 Quản trị các giao tác và quá trình đồng bộ hoá ........................................ 159

VI.5.1 Giao thức cố định hai pha (2PC – Two-Phases Commit Protocol) ................. 159

VI.5.2 Các phương pháp quản trị ................................................................................ 161

VI.5.3 Các bế tắc phân tán .......................................................................................... 162

Chương VI.6 Khởi động lại sau sự cố............................................................................. 164

VI.6.1 Khởi động lại hệ thống sau sự cố .................................................................... 164

VI.6.2 Giao thức cố định 3 pha (3PC – Three Phases Commit Protocol) .................. 165

Chương VI.7 Các hệ thống tích hợp (hay liêng bang) và đa CSDL ............................... 168

Phần VII Các hướng nghiên cứu và phát triển hiện đại .................................................... 169

Chương VII.1 Các HQT CSDL thế hệ mới ..................................................................... 169

VII.1.1 Theo hướng mở rộng mô hình quan hệ ........................................................ 170

VII.1.2 Các kiểu dữ liệu trừu tượng .......................................................................... 172

VII.1.3 Tạo ra các hệ CSDL theo hướng trình ứng dụng ......................................... 173

VII.1.4 Tối ưu các truy vấn được điều khiển bởi các quy luật ................................. 174

VII.1.5 Hỗ trợ các thông tin lịch sử và các truy vấn biểu thị thời gian .................... 175

Chương VII.2 Các HQT CSDL hướng đối tượng ........................................................... 178

VII.2.1 Mối liên hệ giữa HQT CSDL hướng đối tượng với khái niệm chung về cách

tiếp cận hướng đối tượng .............................................................................................. 179

VII.2.2 Các mô hình dữ liệu hướng đối tượng ......................................................... 181

VII.2.3 Các ngôn ngữ lập trình các CSDL HĐT ...................................................... 184

VII.2.3.1 Sự đánh mất mối tương quan giữa các ngôn ngữ lập trình và các ngôn ngữ

truy vấn trong HQT CSDL quan hệ .......................................................................... 184

VII.2.3.2 Các ngôn ngữ lập trình CSDL HĐT như là các ngôn ngữ HĐT hỗ trợ các

đối tượng bền vững (persistent) ................................................................................ 185

VII.2.3.3 Các ví dụ ngôn ngữ lập trình CSDL HĐT ............................................... 186

VII.2.4 Các ngôn ngữ truy vấn CSDL HĐT ............................................................. 187

VII.2.4.1 Điều hướng (navigation) tường minh như là một công cụ vượt qua sự mất

mát tính tương ứng .................................................................................................... 187

VII.2.4.2 Các ngôn ngữ truy vấn không-điều hướng (non-navigation) .................. 187

VII.2.4.3 Các vấn đề tối ưu hoá truy vấn ................................................................ 189

vii

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

VII.2.5 Các ví dụ HQT CSDL HĐT ......................................................................... 191

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

VII.2.5.1 Dự án ORION .......................................................................................... 192

VII.2.5.2 Project O2................................................................................................. 193

Chương VII.3 Các hệ CSDL trên nền tảng các quy luật ................................................. 195

VII.3.1 Phần mở rộng và phần tăng cường của CSDL ............................................. 195

VII.3.2 Các CSDL năng động (chủ động – active DB) ............................................ 196

VII.3.3 CSDL suy diễn ............................................................................................. 197

Phần VIII Phụ lục ............................................................................................................... 199

A. MS SQL Server ......................................................................................................... 199

A.1 Kiến trúc của SQL Server ...................................................................................... 201

A.2 Cài đặt và khôi phục trong SQL Server ................................................................. 205

B. Oracle ........................................................................................................................ 205

B.1. Kiến trúc của Oracle ............................................................................................. 205

B.2. Cài đặt và khôi phục trong Oracle ........................................................................ 205

C. Các hình vẽ ............................................................................................................... 206

D. Các bảng .................................................................................................................... 207

viii

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

Tài liệu tham khảo ............................................................................................................... 208

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

ix

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Kiến thức cơ bản

Phần I Chương I.1 CSDL và hệ thống tệp tin

Đầu tiên, chúng ta hãy xem qua ý tưởng chung của các khái niệm cơ sở dữ liệu

(CSDL, DB – Database) và hệ quản trị cơ sở dữ liệu (HQT CSDL, DBMS – Databases

Managerment System).

CSDL là một tập hợp các dữ liệu mô tả một lĩnh vực ứng dụng nào đó hoặc một lĩnh

vực của thế giới thực. Ví dụ, CSDL về đào tạo của một trường đại học có thể chứa các

thông tin về:

– Các thực thể như sinh viên, giảng viên, các học phần, khoa, lớp, phòng học.

– Các mối quan hệ giữa các thực thể, chẳng hạn như sinh viên đăng ký một học

phần, giảng viên phụ trách một học phần cho lớp nào đó, việc sử dụng các phòng học,…

HQT CSDL là một hệ thống phần mềm được thiết kế nhằm mục đích quản trị và khai

thác một số lượng lớn các tập hợp lớn dữ liệu với khối lượng có thể tăng lên rất nhanh.

Từ buổi ban đầu của quá trình phát triển công nghệ tính toán, có hai định hướng

chính trong việc sử dụng nó. Thứ nhất, đó là ứng dụng kỹ thuật tính toán để thực hiện các

tính toán số mà nếu thực hiện thủ công thì rất lâu hoặc là không thể. Sự trưởng thành của

định hướng này đã khơi dậy sự tăng cường các phương pháp giải quyết bằng tính toán các

bài toán toán học phức tạp, sự phát triển của lớp các ngôn ngữ lập trình theo hướng đơn giản

hoá cài đặt các thuật toán tính toán, và thiết đặt mối quan hệ ngược lại với các nhà phát triển

các kiến trúc máy điện toán mới.

Định hướng thứ hai, đó là sử dụng các công cụ của kỹ thuật tính toán trong các hệ

thống thông tin tự động hoặc là tự động hoá. Theo nghĩa rộng, hệ thống thông tin là một tổ

hợp chương trình. Các chức năng của hệ thống thông tin chủ yếu là duy trì việc lưu trữ

thông tin một cách tin cậy trong bộ nhớ của máy tính, thực hiện các biến đổi thông tin

và/hoặc tính toán đặc thù cho một ứng dụng đã cho, và cung ứng cho người dùng một giao

diện thuận tiện và dễ tiếp thu. Thường thì khối lượng thông tin mà các hệ thống đó cần phải

quản lý/xử lý là rất lớn, và cấu trúc của chính dữ liệu cũng phức tạp. Ví dụ cổ điển của hệ

thống thông tin là các hệ thống ngân hàng, các hệ thống đặt vé máy bay hoặc là vé tàu, đặt

chỗ khách sạn, v.v…

Trong thực tế, định hướng thứ hai xuất hiện muộn hơn bởi vì trong thời gian đầu của

kỹ thuật tính toán các máy tính sở hữu các tính năng hạn chế ở phần bộ nhớ. Rõ ràng, chỉ có

1

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

thể nói về việc lưu trữ thông tin một cách tin cậy và lâu dài khi có các thiết bị ghi nhớ lưu

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

giữ thông tin sau khi nguồn điện của máy tính bị cắt. Bộ nhớ tạm thời truy cập ngẫu nhiên

(RAM – Random Access Memory) không có tính năng đó. Ban đầu có hai loại thiết bị bộ

nhớ ngoài được sử dụng là băng từ và trống. Dung lượng của băng từ khá lớn nhưng nó chỉ

cho phép truy cập nối tiếp đến dữ liệu. Các trống từ cho phép truy cập ngẫu nhiên đến dữ

liệu giống như các đĩa từ ngày nay (với đầu đọc cố định) nhưng dung lượng lại nhỏ.

Dễ thấy rằng, những giới hạn đã nêu trên không ảnh hưởng nhiều đến các tính toán

thuần số. Thậm chí nếu chương trình cần phải xử lý một khối lượng lớn thông tin thì trong

quá trình lập trình có thể nghĩ ra một các phân bố thông tin trong bộ nhớ ngoài để chương

trìn làm việc nhanh hơn đến mức có thể.

Mặt khác, cho các hệ thống thông tin mà trong đó người dùng yêu cầu trong các dữ

liệu hiện tại, thì các băng từ và trống không đáp ứng yêu cầu. Ví dụ, một khách hàng muốn

mua vé cần phải đứng chờ máy tính tua hết một băng từ. Một trong những yêu cầu rõ ràng

đối với các hệ thống như thế là thời gian trung bình để thực hiện một giao dịch cần phải

nhanh.

Có thể chính các yêu cầu trong kỹ thuật tính toán từ phía các ứng dụng không thuần

tính toán số đã đưa đến sự xuất hiện các đĩa từ có thể tháo ra với các đầu đọc di động. Sự

xuất hiện đó là cuộc cách mạng trong lịch sử kỹ thuật tính toán. Các thiết bị bộ nhớ ngo ài đó

sở hữu dung lượng lớn hơn nhiều so với các trống từ, còn khả năng thay thế các đĩa trên

thiết bị cho phép sở hữu kho dữ liệu gần như không giới hạn về mặt dung lượng.

Cũng tồn tại dạng đĩa đầu đọc cố định (Fixed-head), nghĩa là các đầu đọc không dịch

chuyển. Trong các ổ đĩa đó có nhiều đầu đọc và 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. Điều này làm giảm thiểu thời gian truy cập đĩa vì thời gian dịch chuyển đầu

đọc giữa các rãnh trong ổ đĩa với đầu đọc di động chiếm phần lớn thời gian của cả quá trình

truy cập đĩa. Tuy nhiên, cần một số rất lớn đầu đọc-viết cho loại ổ đĩa này,và như vậy giá

của thiết bị bị nâng cao lên rất nhiều.

Lịch sử các hệ thống quản trị dữ liệu trong bộ nhớ ngoài cũng được bắt đầu cùng với

sự xuất hiện các đĩa từ. Trước đó, mỗi trình ứng dụng cần đến việc lưu trữ dữ liệu trên bộ

nhớ ngoài cần phải tự xác định vị trí của từng phần dữ liệu trên băng từ hoặc trống, và phải

tự thực hiện việc trao đổi thông tin giữa bộ nhớ trong và bộ nhớ ngoài bằng sự giúp đỡ của

các phương tiện lập trình bậc thấp. Chế độ làm việc này không cho phép hoặc rất làm trì trệ

2

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

việc duy trì trên một phương tiện bên ngoài nhiều lưu trữ (archives) các thông tin cần lưu

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

trữ lâu dài. Ngoài ra, mỗi trình ứng dụng phải giải quyết vấn đề đặt tên (gắn nhãn) các phần

dữ liệu và phải cấu trúc dữ liệu trong bộ nhớ ngoài.

I.1.1 Hệ thống tệp tin

Chuyển sang sử dụng các hệ thống quản trị tệp tập trung là bước ngoặc lịch sử. Trên

quan điểm trình ứng dụng, tệp là một vùng đã được đặt tên của bộ nhớ ngoài và có thể ghi

dữ liệu lên hoặc đọc dữ liệu từ đó. Các quy luật đặt tên tệp, cách thức truy cập dữ liệu được

lưu trữ trong tệp, và cấu trúc các dữ liệu đó phụ thuộc vào một hệ thống quản lý tệp cụ thể,

và có thể, phụ thuộc vào kiểu tệp. Hệ thống quản lý tệp chịu trách nhiệm phân bổ bộ nhớ

ngoài, biểu diễn các tên tệp trên các địa chỉ tương ứng trong bộ nhớ ngoài và đảm bảo truy

cập đến dữ liệu.

Hệ thống tệp tin tiên tiến lần đầu tiên được phát triển ở công ty IBM. Chúng ta sẽ

không xem xét nó bởi vì nó quá lỗi thời so với các hệ thống tệp bây giờ như Ext3, NTFS,...

I.1.1.1 Cấu trúc tệp tin

Bây giờ chúng ta xem xét kỹ những hệ thống tệp có tổ chức tiên tiến hơn. Hiện tại,

hầu như trong tất cả các máy tính hiện đại, thiết bị bộ nhớ ngoài chủ đạo là những đĩa từ có

đầu đọc dịch chuyển, và chính chúng phục vụ cho việc lưu trữ tệp. Những đĩa từ như vậy

thực tế là những “gói” các bản từ (bề mặt), giữa chúng là “gói” những đầu đọc từ di động.

Bước chuyển động của gói đầu đọc là rời rạc (không liên tục, discrete), và mỗi vị trí của gói

đầu đọc tương ứng một cách luận lý các trụ (cylinder) của các đĩa từ. Trên mỗi bề mặt, trụ

vẽ ra một đường (track). Vì thế, mỗi bề mặt đĩa chứa số đường bằng số trụ. Trong quá trình

định dạng đĩa, mỗi đường sẽ được chia thành các khối (block) với số lượng như nhau, và số

lượng bytes có thể chứa tối đa trong mỗi khối là như nhau. Như vậy, để trao đổi thông tin

với đĩa từ trên cấp độ thiết bị cần phải chỉ ra số thứ tự của trụ, số thứ tự của bề mặt, số thứ

tự của khối trên đường tương ứng và số lượng bytes cần ghi vào hoặc là đọc ra tính từ đầu

khối.

Tuy nhiên, khả năng trao đổi thông tin với các đĩa từ theo những phần nhỏ hơn dung

lượng của khối hiện tại không được sử dụng trong các hệ thống tệp. Điều đó liên quan đến

hai điểm. Thứ nhất, quá trình trao đổi thông tin với đĩa của thiết bị được thực hiện theo ba

thao tác chính: dịch chuyển đầu đọc đến đường cần thiết – bước chiếm phần lớn thời gian

trong tổng thể, tìm trên đường đó khối cần thiết và trao đổi thông tính với khối đó. Thứ hai,

3

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

để có thể làm việc với những phần của các khối, hệ thống tệp cần phải đảm bảo một dung

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

lượng bộ nhớ tạm thời tương ứng, và điều đó làm phức tạp quá trình phân bổ bộ nhớ rất

nhiều.

Vì thế, trong tất cả các hệ thống tệp, hoặc là trực tiếp, hoặc là gián tiếp một cấp độ cơ

bản nào đó được phân ra. Cấp độ đó đảm bảo công việc với các tệp. Mỗi tệp là một tổ hợp

các khối có địa chỉ trong không gian địa chỉ của tệp. Kích thước các khối luận lý đó của tệp

trùng hoặc là bội số kích thước của khối vật lý của đĩa, và thường được chọn bằng kích

thước một trang bộ nhớ ảo (virtual memory). Bộ nhớ ảo này được duy trì bởi thiết bị máy

tính cùng với hệ điều hành.

Trong một vài hệ thống tệp cấp độ cơ bản là có thể truy cập được đối với người dùng,

nhưng thường thì bị bao phủ bởi một cấp độ cao hơn, và chuẩn hơn cho người dùng. Phổ

biến hơn là hai cách tiếp cận chủ đạo sau. Cách thứ nhất, tệp là một chuỗi các bản ghi. Mỗi

bản ghi là một chuỗi các bytes có kích thước cố định hoặc là thay đổi. Các bản ghi có thể

được đọc hoặc ghi một cách nối tiếp hoặc có thể theo vị trí bằng số thứ tự của bản ghi trong

tệp. Một vài hệ thống tệp cho phép cấu trúc hoá các bản ghi theo các trường và khai báo

những trường nào đó là các khoá của bản ghi. Trong các hệ thống tệp đó có thể yêu cầu

chọn ra một bản ghi từ một tệp theo khoá của nó. Rõ ràng, trong trường hợp này hệ thống

tệp phải duy trì những cấu trúc dữ liệu bổ trợ, ẩn với người dùng. Các phương pháp tổ chức

các tệp có khoá phổ biến dựa trên nền tảng kỹ thuật băm (hashing) và cây nhị phân (B-tree).

Cũng tồn tại các phương pháp tổ chức tệp nhiều khoá.

Cách tiếp cận thứ hai phổ biến song song cùng với hệ điều hành UNIX. Mà theo đó,

mỗi tệp là một chuỗi các bytes. Từ một tệp có thể đọc một số cho trước các byte hoặc là bắt

đầu từ đầu tệp, hoặc đầu tiên chuyển đến vị trí byte có số thứ tự cho trước. Tương tự, có thể

ghi một số cho trước các byte vào cuối tệp, hoặc vào một vị trí nào đó. Chú ý rằng, dù là ẩn

đối với người dùng, nhưng trong tất cả các biến thể của hệ thống tệp của hệ điều hành UNIX

là kiểu biểu diễn tệp theo khối.

I.1.1.2 Đặt tên (gán nhãn) cho tệp tin

Tất cả các hệ thống tệp hỗ trợ đặt tên các tệp theo nhiều tầng nhờ vào việc duy trì

trong bộ nhớ ngoài những tệp bổ trợ có cấu trúc đặc biệt. Đó là các thư mục. Mỗi một thư

mục chứa các tên của các thư mục khác hoặc/và các tệp được chứa trong thư mục đó. Như

vậy, tên đầy đủ của tệp được cấu thành thừ tên của các thư mục cộng với tên tệp trong thư

4

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

mục. Sự khác biệt giữa các phương pháp đặt tên tệp trong các hệ thống tệp khác nhau là ở

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

chỗ, từ cái gì chuỗi các tên đó được bắt đầu. Có hai phương án. Trong nhiều hệ thống quản

lý tệp yêu cầu mỗi một lưu trữ các tệp (cây tra cứu đầy đủ) đều hoàn toàn phân bổ trên một

gói đĩa, hoặc là trên một đĩa luận lý. Trong trường hợp đó, tên đầy đủ của một tệp được bắt

đầu từ tên của thiết bị đĩa, mà trên đó đĩa tương ứng được cài đặt. Có thể gọi cách tổ chức

đó là duy trì các hệ thống tệp cô lập.

Trong một phương án khác, là hệ thống tệp của hệ điều hành Multics, nhiều ý tưởng

gốc được phát triển, nhưng chúng ta chỉ quan tâm đến các đặc tính tổ chức lưu trữ các tệp.

Trong hệ thống tệp đó, người dùng biểu diễn tổ hợp các thư mục và các tệp của mình dưới

dạng một cây duy nhất. Tên đầy đủ của tệp được bắt đầu từ tên của thư mục gốc, và người

dùng không phải quan tâm đến các thiết đặt các đĩa cụ thể trên thiết bị đĩa. Bản thân hệ

thống sẽ hỏi về thiết đặt các đĩa cần thiết khi tìm một tệp theo tên của nó. Một hệ thống tệp

như thế có thể nói là hoàn toàn tập trung hoá. Ví dụ, các hệ thống tệp của Windows.

Tất nhiên, hầu hết các hệ thống tệp được cô lập thuận tiện hơn: hệ thống quản lý tệp

đảm nhận hầu hết công việc. Nhưng trong các hệ thống đó lại xuất hiện các vấn đề khá lớn,

nếu như một ai đó cần chuyển một phần của cây hệ thống tệp đến một trạm điện toán khác.

Một giải pháp thoả hiệp đã được áp dụng trong các hệ thống tệp hệ điều hành UNIX. Các

lưu trữ tệp cô lập được duy trì trên cấp độ cơ bản trong các hệ thống tệp. Một trong những

lưu trữ đó sẽ được khai báo như là hệ thống tệp gốc (root). Sau khi hệ thống được khởi

động, người dùng có thể lắp đặt (mount) hệ thống tệp gốc và hàng loạt các hệ thống tệp cô

lập vào một hệ thống tệp duy nhất. Việc đó được thực hiện bằng cách thêm vào hệ thống tệp

gốc các thư mục rỗng một cách chủ ý. Một phân hệ của hệ điều hành sẽ làm nhiệm vụ kết

nối thư mục gốc của lưu trữ tệp (hệ thống tệp) với một thư mục rỗng được tạo ra trước đó.

Sau khi lắp ghép thành hệ thống tệp chung, việc đặt tên cho các tệp được diễn ra như là

chính nó từ ban đầu đã được tập trung hoá. Nếu việc lắp đặt được diễn ra trong quá trình

khởi động hệ thống, thì người dùng không cảm giác về quá trình phát sinh ban đầu của hệ

thống tệp chung nhất.

I.1.1.3 Bảo vệ tệp tin

Bởi vì hệ thống tệp là kho lưu trữ chung của các tệp thuộc về nhiều người dùng khác

nhau, nên hệ thống quản lý tệp phải đảm bảo việc xác thực quyền truy cập các tệp. Thường

thì theo quan hệ với mỗi người dùng đã được đăng ký trong hệ thống máy tính, cho mỗi một

5

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

tệp sẽ có thông tin về những quyền truy cập hoặc là bị cấm đối với người dùng đó.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Trong hầu hết các hệ thống quản lý tệp hiện đại đều áp dụng biện pháp bảo vệ tệp.

Đầu tiên được triển khai trong hệ điều hành UNIX. Trong hệ thống đó, mỗi một người dùng

đã đăng ký tồn tại hai từ định danh: từ định danh của nhóm mà người đó thuộc về, và từ

định danh của chính người dùng trong nhóm. Tương ứng, kèm theo mỗi tệp sẽ được lưu trữ

từ định danh của người dùng đã tạo ra tệp đó, và đánh dấu những thao tác nào người dùng

đó có thể thực hiện với tệp, đánh dấu những thao tác nào các người dùng khác cùng nhóm

đó có thể thực hiện với tệp, và những thao tác nào những người dùng khác thuộc các nhóm

khác có thể thực hiện với tệp.

I.1.1.4 Chế độ truy cập nhiều người dùng

Nếu hệ điều hành hổ trợ chế độ nhiều người dùng, thì tình huống hai hoặc nhiều

người dùng đồng thời muốn làm việc với cùng một tệp nào đó là hoàn toàn có thể. Nếu tất

cả các người dùng đó chỉ định đọc tệp, thì không có vấn đề gì để bàn cãi. Nhưng nếu chỉ cần

một người trong họ thay đổi nội dung của tệp, thì để công việc của tất cả người dùng sử

dụng tệp lúc đó được đúng đắn cần phải có sự đồng bộ qua lại.

Thường thì trong các hệ thống tệp ứng dụng cách sau. Để bắt đầu một phiên làm việc

với tệp, tiến trình (chương trình) cần phải thực hiện thao tác mở tệp. Trong thao tác mở tệp,

ngoài những thông số cần thiết của hệ thống, cần phải chỉ ra chế độ làm việc với tệp – mở

chỉ để đọc hay là có sửa đổi. Nếu tại thời điểm tiến trình A tiến hành thao tác mở tệp X, tệp

X đã được mở bởi tiến trình B, và chế độ mở tệp mà tiến trình A mong muốn không tương

thích với chế độ mở tệp mà tiến trình B đã sử dụng, thì tuỳ thuộc vào các tính năng của hệ

thống mà tiến trình A sẽ được thông báo về việc không thể mở tệp X trong chế độ mong

muốn, hoặc là tiến trình A sẽ bị phong toả cho đến khi tiến trình B chưa thực hiện thao tác

đóng tệp X.

Trong các phiên bản mới của hệ điều hành UNIX có hỗ trợ chế độ đồng bộ hoá trong

khi mở tệp. Thậm chí, tồn tại khả năng đồng bộ nhiều tiến trình cùng mở và sử đổi nội dung

một tệp. Để thực hiện điều đó, một cơ chế các phong toả đồng bộ các khoảng địa chỉ của tệp

được mở được đưa vào áp dụng.

I.1.2 Lĩnh vực ứng dụng của tệp tin

Trước tiên, các tệp được sử dụng để lưu trữ các dữ liệu văn bản: tài liệu, mã nguồn

chương trình,… Những tệp như vậy thường được tạo ra và được thao tác bởi các chương

6

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

trình xử lý văn bản khác nhau. Cấu trúc của các tệp văn bản thường rất đơn giản: hoặc là

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

một chuỗi các bản ghi chứa các xâu ký tự, hoặc là chuỗi các bytes, mà trong chúng có thể

gặp những ký tự đặc biệt, ví dụ các ký tự cuối câu.

Các tệp chứa mã nguồn các chương trình được sử dụng là đầu vào của các trình biên

dịch. Đến phiên mình, các trình biên dịch cũng tạo ra các tệp chứa các mô-đun đối tượng.

Trên quan điểm hệ thống tệp, các tệp đối tượng cũng sở hữu cấu trúc rất đơn giản – chuỗi

các bản ghi hoặc các bytes. Hệ thống lập trình thiết đặt lên cấu trúc đó một cấu trúc mô-đun

đối tượng phức tạp hơn và chuyên biệt cho hệ thống đó. Đó là cấu trúc luận lý (logic), và

cấu trúc mô-đun đối tượng đó là “không hiểu” đối với hệ thống tệp.

Tương tự với các tệp được tạo ra bởi các trình soạn thảo các liên kết và chứa các

đoạn chương trình thực thi. Cấu trúc luận lý của các tệp như thể cũng chỉ “hiểu được” với

trình soạn thảo các liên kết và trình khởi động của hệ điều hành. Với các tệp chứa thông tin

đồ hoạ, âm thanh… cũng có tình huống như thế. Ví dụ, một tệp chứa ảnh có định dạng JPG

thì chỉ có các trình soạn thảo, xem ảnh có chức năng xem ảnh định dạng JPG hiểu được.

Như vậy, hệ thống tệp thường chỉ đảm bảo lưu trữ các thông tin được cấu trúc yếu,

và để phần cấu trúc hoá còn lại cho các trình ứng dụng. Điều đó thậm chí rất tốt trong các

trường hợp sử dụng tệp đã nêu trên, bởi vì trong quá trình phát triển một hệ thống ứng dụng

mới nào đó, chỉ cần dựa trên những công cụ chuẩn và đơn giản của hệ thống tệp có thể triển

khai các cấu trúc lưu trữ. Các cấu trúc lưu trữ gần gủi với các đặc thù của lĩnh vực ứng dụng

của hệ thống hơn.

I.1.3 Yêu cầu của các hệ thống thông tin

Tuy nhiên, thực chất tình huống của các hệ thống thông tin khác biệt với các ứng

dụng đã nêu trên. Các hệ thống này chủ yếu thiên về lưu trữ, lựa chọn và sửa đổi các thông

tìn tồn tại vĩnh viễn. Cấu trúc thông tin thường rất phức tạp, và dù cấu trúc dữ liệu khác biệt

nhau trong các hệ thống thông tin, nhưng giữa chúng thường tồn tại nhiều thứ chung. Ở giai

đoạn đầu sử dụng kỹ thuật máy tính để quản trị thông tin, các vấn đề cấu trúc hoá dữ liệu

được giải quyết riêng lẻ trong mỗi hệ thống thông tin. Nhưng bởi vì các hệ thống thông tin

yêu cầu các cấu trúc dữ liệu phức tạp, các công cụ bổ trợ riêng lẽ để quản trị dữ liệu đó là

một phần khá lớn của các hệ thống thông tin và trên thực tế gần như lặp lại trong các hệ

thống. Việc cố gắng phân ra và công bố phần chung của các hệ thống thông tin, phần chịu

trách nhiệm quản trị các dữ liệu được cấu trúc phức tạp có thể được xem là nguyên nhân đầu

7

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

tiên đánh thức việc cần thiết phải xây dựng HQT CSDL. Sau này thấy rằng, không thể bỏ

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

qua thư viện chương trình chung, mà trong đó các công cụ lưu trữ dữ liệu phức tạp hơn

được triển khai trên một hệ thống tệp chuẩn và căn bản.

Ví dụ, chúng ta muốn triển khai một hệ thống thông tin đơn giản để hổ trợ quản lý

nhân sự một tổ chức nào đó. Hệ thống cần phải có những tính năng sau: Cho xem danh sách

nhân viên theo phòng ban, chuyển một nhân viên từ phòng ban này sang phòng ban khác,

nhận nhân viên mới hoặc cho nghỉ việc một nhân viên. Ngoài ra, có thể tính tổng số nhân

viên trong mỗi phòng ban, tổng số tiền lương cho mỗi phòng ban, cũng như tổng số tiền

lương phải trả cho toàn cơ quan. Ngoài ra, với mỗi nhân viên có thể xem thông tin về họ,

công việc họ đang làm, trách nhiệm quyền hạn họ đang nắm giữ,…

Nếu chúng ta sử dụng hệ thống tệp để lưu trữ, nghĩa là tất cả thông tin được ghi vào

một tệp văn bản dạng text, tất nhiên, phải phát triển thêm thư viện công cụ đặc biệt để làm

việc với hệ thống tệp. Ở đây, đơn vị thông tin nhỏ nhất là nhân viên, vì thế mỗi bản ghi là

một dòng lưu giữ tất cả mọi thông tin liên quan nhân viên. Với một hệ thống thông tin đơn

giản như thế, trong trường hợp này đòi hỏi: 1) xây dựng các thiết đặt đủ phức tạp để truy

cập đến các tệp theo nhiều khoá; 2) rõ ràng, tồn tại sự dư thừa rất lớn trong lưu trữ dữ liệu,

và phải thực hiện quá nhiều phép chọn và tính toán để thu được thông tin tổng kết về một

phòng ban. Ngoài ra, trong quá trình khai thác hệ thống, nếu muốn đưa vào thêm chức năng

đơn giản, chẳng hạn như cho xem danh sách những nhân viên được hưởng mức lương cho

trước, chúng ta phải đọc toàn bộ tệp, hoặc là phải cấu trúc lại tệp để thêm khoá.

Cũng có thể làm việc trực tiếp trên nền tảng hệ thống tệp, nhưng chúng ta chia tệp đó

thành nhiều tệp. Và khi đó, những sự bất tiện và khó khăn nêu trên sẽ được vượt qua, nhưng

rõ ràng hệ thống thông tin của chúng ta bây giờ phải sở hữu những tính năng mới trong thư

viện các công cụ, và bước chuyển này đã làm hệ thống tiến gần đến HQT CSDL.

Trước tiên, hệ thống phải biết rằng, nó đang làm việc với nhiều tệp khác nhau chứa

thông tin liên quan mật thiết với nhau, và biết được ý nghĩa (ngữ nghĩa) của từng trường. Và

rằng, nếu thay đổi thông tin trong một tệp thì cũng phải tự động thay đổi tương ứng ở những

tệp khác chứa thông tin liên quan. Khái niệm tính nhất quán dữ liệu (tính toàn vẹn) là khái

niệm mang tính chìa khoá của CSDL. Thực tế, nếu hệ thống thông tin hỗ trợ lưu trữ dữ liệu

một cách nhất quán trong nhiều tệp, th ì có thể nói rằng, nó đã đảm bảo tính nhất quán, và có

thể gọi nó là hệ quản trị cơ sở dữ liệu (HQT CSDL). Dù bây giờ chỉ yêu cầu duy trì tính

nhất quán dữ liệu trong nhiều tệp, nhưng thư viện các chức năng (công cụ) của chúng ta

8

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

cũng không thể bỏ đi. Vì hệ thống như thế cần phải có những dữ liệu của riêng nó, đó là

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

những siêu dữ liệu (meta-data), và thậm chí những tri thức định nghĩa tính nhất quán của dữ

liệu.

Nhưng đó cũng chưa phải là tất cả những gì đòi hỏi từ một HQT CSDL. Thứ nhất, rõ

ràng trong hệ thống thông tin đơn giản đó cũng rất khó để triển khai những truy vấn rất đơn

giản kiểu như “cho xem số lượng nhân viên trong phòng ban mà nhân viên A làm trưởng”.

Suy ra, HQT CSDL cần phải hỗ trợ một ngôn ngữ gần với ngôn ngữ con người và cho phép

tạo ra các truy vấn một cách đơn giản, và người dùng không cần quan tâm cần phải thực thi

truy vấn như thế nào. Những ngôn ngữ như thế gọi là ngôn ngữ truy vấn đến CSDL. SQL

(Structured Query Language) cho mô hình dữ liệu quan hệ là một ngôn ngữ như thế.

Thứ hai, HQT CSDL phải nhận trách nhiệm về tính nhất quán của dữ liệu. Nếu

chúng ta làm việc trực tiếp trên nền tảng hệ thống tệp bằng thư viện các công cụ mở rộng để

làm việc với tệp, và phân tách CSDL ra làm nhiều tệp khác nhau; khi cần sửa đổi dữ liệu ở

một tệp thì tất nhiên cũng phải thực hiện những thay đổi t ương ứng trong những tệp chứa dữ

liệu liên quan. Nếu trong quá trình đó, chúng ta không kịp thực hiện các thay đổi cần thiết

trong tất cả các tệp liên quan và trong hệ thống xảy ra sự cố, ví dụ mất điện, thì sau khi hệ

thống khởi động lại, CSDL được chứa trong các tệp của chúng ta không còn nằm trong

trạng thái nhất quán nữa. Các HQT CSDL hiện đại nhận tất cả các trách nhiệm đó, nó đảm

bảo CSDL sẽ được khôi phục lại trạng thái nhất quán sau khi xảy ra sự cố và người dùng

cũng như trình ứng dụng không cần phải quan tâm đến vấn đề đó.

Và cuối cùng, nếu chúng ta muốn đảm bảo công việc song song của nhiều người

dùng đồng thời trên CSDL, và chúng ta chỉ dựa trên việc sử dụng trực tiếp các tệp, thì để

đảm bảo tính đúng đắn trong công việc trong cả thời gian sửa đổi dữ liệu bởi một người

dùng nào đó trong một trong số các tệp chứa thông tin liên quan, thì việc truy cập của tất cả

các người dùng còn lại đến tệp đó bị phong toả (như đã nói ở trên). Như vậy, thời gian để

thực hiện một truy vấn dù là trên các dữ liệu không liên quan cũng bị kéo dài. Các HQT

CSDL hiện đại đảm bảo cơ chế mềm dẽo hơn nhiều để đồng bộ hoá truy cập đồng thời đến

dữ liệu.

Và như thế, HQT CSDL giải quyết nhiều vấn đề mà hầu như không thể giải quyết

được hoặc rất khó nều giải quyết bằng việc sử dụng hệ thống tệp. Trong khi đó cũng tồn tại

nhiều trình ứng dụng, mà đối với chúng các tệp là đủ; hoặc cần phải xác định cho chúng

mức độ cần thiết để làm việc với dữ liệu được lưu trữ trong bộ nhớ ngoài; hoặc là đối với

9

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

chúng, HQT CSDL là cần thiết vô điều kiện.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Chương I.2 Các chức năng của HQT CSDL. Tổ chức điển hình của một HQT CSDL

hiện đại

Như đã chứng minh ở trên, các tính năng truyền thống của hệ thống tệp không đủ để

xây dựng một hệ thống thông tin, dù là đơn giản. Chúng ta đã chỉ ra những yêu cầu mà hệ

thống tệp không thể đáp ứng được: Hỗ trợ tính nhất quán luận lý của tổ hợp các tệp; đảm

bảo ngôn ngữ thao tác và truy vấn dữ liệu; khôi phục dữ liệu sau các sự cố khác nhau; và

đảm bảo công việc song song giữa các người dùng khác nhau. Có thể nói rằng, nếu một hệ

thống thông tin ứng dụng nào đó dựa trên một hệ thống quản trị dữ liệu sở hữu các tính năng

trên, thì hệ quản trị dữ liệu đó có thể được gọi là HQT CSDL.

I.2.1 Các chức năng của HQT CSDL

I.2.1.1 Quản trị dữ liệu trực tiếp trong bộ nhớ ngoài

Chức năng này bao gồm sự đảm bảo các cấu trúc cần thiết của bộ nhớ ngoài để lưu

trữ dữ liệu là dữ liệu của CSDL, và cả cho các mục đích phục dịch (phục vụ) khác, ví dụ, để

đẩy nhanh quá trình truy cập đến dữ liệu trong một số trường hợp nào đó. Trong một vài

phiên bản HQT CSDL các tính năng của hệ thống tệp được sử dụng rất tích cực, nhưng

trong vài phiên bản khác công việc được thực hiện trên cấp độ các thiết bị bộ nhớ ngoài.

Nhưng trong các HQT CSDL tiên tiến, người dùng không cần biết HQT CSDL sử dụng hệ

thống tệp hay không, và nếu sử dụng, thì người dùng không cần biết các tệp được tổ chức

như thế nào. Thông thường, HQT CSDL đảm bảo hệ thống chuyên biệt của mình để đặt tên

các đối tượng của CSDL.

I.2.1.2 Quản trị các bộ nhớ đệm (buffers) trong RAM

HQT CSDL thường làm việc với các CSDL có kích thước rất lớn, thường thì kích

thước đó lớn hơn gấp nhiều lần so với dung lượng RAM có thể truy cập. Nhưng rõ ràng, nếu

mỗi truy cập đến các phần tử dữ liệu đều được thực hiện trực tiếp bằng một trao đổi với bộ

nhớ ngoài, thì cả hệ thống sẽ làm việc với tốc độ của thiết bị bộ nhớ ngoài. Chỉ có một cách

duy nhất để nâng cao tốc độ làm việc của hệ thống, đó là đệm hoá (bufferring) dữ liệu trong

RAM. Khi đó, thậm chí nếu hệ điều hành thực hiện đệm hoá chung cho cả hệ thống, như

trong trường hợp UNIX, thì cũng đủ cho các mục đích của HQT CSDL. Bởi vì HQT CSDL

10

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

phân bổ phần lớn những thông tin về lợi ích của bufferring phần này hay phần kia của

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

CSDL. Vì thế trong các HQT CSDL tiên tiến, một tổ hợp bộ nhớ đệm RAM của chính nó

cùng với các nguyên tắc trao đổi/thay đổi bộ đệm của riêng nó được duy trì.

Cũng tồn tại một lớp HQT CSDL riêng hướng đến việc luôn tồn tại cả CSDL trong

RAM. Hướng này dựa trên nền tảng giả thuyết rằng, dung lượng RAM trong tương lai là

không giới hạn hoặc lớn đến mức nào đó, để cho phép không quan tâm đến đệm hoá nữa.

Hiện tại các công trình theo hướng này đang nằm trong giai đoạn nghiên cứu.

I.2.1.3 Điều khiển các giao tác

Giao tác là một chuỗi nối tiếp các thao tác trên CSDL, và các thao tác đó xem HQT

CSDL là một thể thống nhất. Giao tác hoặc là được thực thi hoàn toàn, và HQT CSDL cố

định (COMMIT) trong bộ nhớ ngoài các thay đổi trong CSDL bởi giao tác đó; hoặc là

không có bất cứ một thay đổi nào do nó gây nên được thể hiện trong trạng thái của CSDL.

Khái niệm giao tác cần thiết để đảm bảo tính nhất quán luận lý của CSDL. Trong trường

hợp sử dụng hệ thống tệp và lưu trữ các bảng trong các tệp như đã nêu trên (?), cách duy

nhất để đảm bảo tính nhất quán CSDL khi thực thi một sửa đổi dữ liệu và dẫn tới cần thiết

phải sử đổi trên các tệp có thông tin liên quan, đó là liên kết tất cả các thao tác đó vào một

“gói” gọi là giao tác. Như vậy, duy trì cơ chế giao tác là điều kiện cần, thậm chí trong các

HQT CSDL với chế độ một người dùng. Khái niệm giao tác còn quan trong hơn rất nhiều

trong các HQT CSDL cho phép nhiều người dùng làm việc đồng thời.

Tính chất mỗi giao tác được bắt đầu trong trạng thái toàn vẹn của CSDL và cũng để

lại một trạng thái toàn vẹn CSDL khi kết thúc, cho phép sử dụng giao tác như là một đơn vị

hoạt động của người dùng trong quan hệ với CSDL. Dưới một sự điều khiển tương ứng việc

thực thi song song các giao tác đồng thời của HQT CSDL, hầu như mỗi một trong số các

người dùng cảm giác như họ là người dùng duy nhất trong HQT CSDL. Chỉ trong một số

trường hợp đặc biệt, người dùng mới cảm giác rằng còn có những người khác cũng làm việc

trên HQT CSDL như mình.

Cùng với khái niệm điều khiển các giao tác trong HQT CSDL nhiều người dùng liên

quan đến các khái niệm rất quan trọng, đó là khái niệm tuần tự hoá (serialization) các giao

tác và khái niệm kế hoạch tuần tự thực thi hỗn hợp các giao tác. Khái niệm tuần tự hoá các

giao tác được hiểu là thứ tự hoá kế hoạch thực hiện công việc của chúng, mà kết quả (hiệu

quả) cuối cùng thực thi của hỗn hợp các giao tác tương đương với kết quả thực thi chúng

11

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

theo một thứ tự nối tiếp nào đó. Kế hoạch tuần tự thực thi hỗn hợp các giao tác là một kế

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

hoạch thực thi sẽ đưa đến kết quả là tuần tự hoá các giao tác. Hiểu rằng, nếu có thể đạt được

thực thi tuần tự một cách thực sự hỗn hợp các giao tác, thì với mỗi một người một giao tác

được tạo nên và sự có mặt của các giao tác khác trong hệ thống là không nhận thấy, nếu

chúng ta không tính đến khả năng hệ thống sẽ đưa lại kết quả thực thi chậm hơn so với khi

chỉ có một người dùng (hoặc trong chế độ một người dùng).

Tồn tại một số thuật toán tuần tự hoá các giao tác.Trong các HQT CSDL tập trung,

phổ biến nhất là các thuật toán trên nền tảng phong toả đồng bộ (synch locks) các đối tượng

CSDL. Trong quá trình sử dụng bất kỳ một thuật toán tuần tự hoá các giao tác nào cũng có

thể xuất hiện các xung đột giữa hai hoặc nhiều hơn các giao tác theo truy cập đến các đối

tượng của CSDL. Trong trường hợp đó, để duy trì tính tuần tự cần phải thực hiện rollback

(làm ngược lại tất cả các thay đổi trong CSDL được thực hiện bởi) một hay nhiều giao tác.

Đó là một trong những trường hợp làm cho người dùng của HQT CSDL nhiều người dùng

cảm nhận sự có mặt trong hệ thống nhiều giao tác của các người dùng khác.

I.2.1.4 Nhật ký

Một trong những yêu cầu căn bản đối với HQT CSDL là tính tin cậy trong lưu trữ dữ

liệu trong bộ nhớ ngoài. Tính tin cậy trong lưu trữ được hiểu là, HQT CSDL cần phải trong

tư thế sẵn sàng khôi phục trạng thái nhất quán cuối cùng của CSDL sau khi xảy ra bất kỳ sự

cố nào, phần cứng hay phần mềm. Các xự cố phần cứng (thiết bị) được chia làm hai loại, đó

là cự cố mềm – các sự cố có thể xảy ra do máy tính dừng làm việc đột ngột, ví dụ như ngắt

điện không dự báo trước; và sự cố cứng – các sự cố đặc trưng bởi việc mất mát dữ liệu trên

các thiết bị lưu trữ. Các ví dụ sự cố phần mềm có thể là HQT CSDL dừng làm việc vì sự cố

là kết quả của các lỗi chương trình hoặc lỗi chương trình là kết quả của một sự cố phần

cứng; chương trình của người dùng dừng làm việc vì sự cố và kết quả là một giao tác nào đó

dừng lại ở trạng thái chưa hoàn thành. Trường hợp đầu có thể xem là một dạng đặc biệt của

sự cố thiết bị mềm. Khi xảy ra trường hợp thứ hai, cần phải thanh lý (huỷ bỏ) tất cả các hậu

quả (những thay đổi) được tạo ra chỉ bởi giao tác đó.

Rõ ràng, trong mọi trường hợp, để khôi phục CSDL cần phải có những thông tin bổ

trợ nào đó. Nói cách khác, để duy trì tính tin cậy của việc lưu trữ dữ liệu trong CSDL đòi

hỏi tính dư thừa trong lưu trữ dữ liệu, và khi đó, phần dữ liệu được sử dụng để khôi phục

CSDL cần phải được lưu trữ đặc biệt tin cậy. Biện pháp phổ biến để duy trì tính dư thừa dữ

12

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

liệu như thế là đưa vào nhật ký các thay đổi của CSDL.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Nhật ký là phần đặc biệt của CSDL lưu trữ thông tin về tất cả các thay đổi trong

CSDL, là không thể truy cập đối với người dùng và được bảo quản một cách vô cùng cẩn

thận. Thậm chí thông thường người ra lưu giữ nhật ký theo nhiều bản sao trong ít nhất hai

thiết bị lưu trữ bộ nhớ ngoài khác nhau. Trong các HQT CSDL khác nhau các thay đổi được

ghi nhật ký ở các cấp độ khác nhau: đôi khi bản gh i nhật ký tương ứng với một thao tác luận

lý thay đổi dữ liệu, ví dụ, thao tác xoá một dòng từ một bảng của CSDL quan hệ; đôi khi –

thao tác tối thiểu để sửa đổi một trang bộ nhớ ngoài; và đôi khi cả hai phương pháp trên đều

được sử dụng.

Trong tất cả các trường hợp, chiến lược ghi nhật ký trước (WAL – Write Ahead

Log). Chiến lược đó chính là bản ghi về sự thay đổi của bất kỳ đối tượng nào của CSDL đều

phải được cố định trong bộ nhớ ngoài của nhật ký, trước khi đối tượng đã được sửa đổi được

cố định trong bộ nhớ ngoài của phần chủ yếu của CSDL. Và như thế, dễ thấy rằng, nếu

HQT CSDL tuân thủ giao thức WAL, thì với sự giúp đỡ của nhật ký có thể giải quyết tất cả

các vấn đề khôi phục CSDL sau bất kỳ sự cố nào.

Tình huống đơn giản nhất của việc khôi phục – đó là rollback riêng lẽ một giao tác.

Cho trường hợp này không nhất thiết phải sử dụng nhật ký thay đổi CSDL chung của cả hệ

thống, chỉ cần duy trì một nhật ký cục bộ các thao tác sửa đổi CSDL cho mỗi giao tác, và

thực thi rollback giao tác bằng cách làm ngược lại tất cả các thao tác, bắt đầu cuối nhật ký

cục bộ. Trong vài HQT CSDL làm như thế, nhưng phần lớn các HQT CSDL không duy trì

các nhật ký cục bộ, còn rollback riêng lẽ một giao tác được thực hiện theo nhật ký chung

của hệ thống. Và vì thế, tất cả các bản ghi từ một giao tác liên kết với nhau bằng một danh

sách ngược từ cuối cho đến đầu.

Trong sự cố mềm, trong bộ nhớ ngoài của phần chính của CSDL có thể có các đối

tượng đã được sửa đổi bởi các giao tác chưa hoàn thành cho đến thời điểm xảy ra sự cố, và

có thể không có các đối tượng đã được sửa đổi bởi những giao tác hoàn thành trước thời

điểm xảy ra sự cố nhưng kết quả của nó trên bộ nhớ đệm vẫn chưa được cố định trong bộ

nhớ ngoài. Nếu tuân theo giao thức WAL, các bản ghi thuộc các thao tác sửa đổi của cả hai

loại đối tượng đảm bảo có mặt trong bộ nhớ ngoài của nhật ký. Mục đích của quá trình khôi

phục sau sự cố mềm là trạng thái bộ nhớ ngoài của phần chính của CSDL, trạng thái mà sẽ

xuất hiện nếu tất cả các sửa đổi CSDL bởi các giao tác đã hoàn thành được cố định trong bộ

nhớ ngoài, và ở trạng thái đó CSDL không chứa bất cứ một dấu ấn nào của các giao tác

13

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

chưa được hoàn tất. Để đạt được trạng thái đó, đầu tiên phải thực hiện rollback các giao tác

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

chưa hoàn tất (undo), và sau đó lặp lại các thao tác của các giao tác đã hoàn tất nhưng kết

quả của nó vẫn chưa được cố định trong bộ nhớ ngoài. Quá trình đó chứa rất nhiểu điểm

mềm dẻo, tinh vi liên quan đến cách tổ chức chung của việc quản trị các bộ nhớ đệm và nhật

ký.

Nhật ký và bản sao lưu lưu trữ của CSDL được sử dụng để khôi phục CSDL sau sự

cố cứng. Có thể nói nôm na, bản sao l ưu lưu trữ là bản sao toàn bộ CSDL cho đến thời điểm

bắt đầu ghi nhật ký. Tất nhiên, để khôi phục CSDL sau sự cố cứng một cách bình thường,

thì nhật ký không bị đánh mất hoặc hư hại. Và khi đó, công việc khôi phục CSDL bao gồm:

xuất phát từ bản sao lưu lưu trữ của CSDL thực thi công việc của tât cả các giao tác đ ã hoàn

tất thành công cho đến thời điểm xảy ra sự cố. Về nguyên tắc, cũng có thể thực thi công việc

của các giao tác chưa hoàn tất và cho phép tiếp tục công việc sau khi kết thúc quá trình khôi

phục. Tuy nhiên, trong các hệ thống thực tiễn điều đó không được thực hiện, bởi vì quá trình

khôi phục CSDL sau sự cố cứng là quá trình khá lâu dài về mặt thời gian.

I.2.1.5 Hỗ trợ các ngôn ngữ CSDL

Các ngôn ngữ đặc biệt được sử dụng để làm việc với các CSDL thường được gọi là

các ngôn ngữ CSDL. Trong các HQT CSDL trước đây duy trì vài ngôn ngữ chuyên biệt theo

chức năng của chúng. Thường phân ra hai ngôn ngữ - ngôn ngữ định nghĩa lược đồ (SDL –

Schema Definition Language) CSDL và ngôn ngữ thao tác dữ liệu (DML – Data

Manipulation Language). SDL phục vụ chủ yếu để định nghĩa cấu trúc luận lý của CSDL,

nghĩa là cấu trúc của CSDL được thể hiện với người dùng. DML chứa tổ hợp các toán tử

(lệnh) thao tác dữ liệu, nghĩa là các lệnh cho phép thực hiện việc cho dữ liệu mới vào

CSDL, thực hiện các sửa đổi cũng như xoá hoặc là lựa chọn những dữ liệu đang tồn tại.

Trong các HQT CSDL hiện đại, thường thì một ngôn ngữ tích hợp duy nhất được sử

dụng. Ngôn ngữ đó chứa tất cả những công cụ cần thiết để làm việc với CSDL, từ việc tạo

ra nó, và đảm bảo một giao diện người dùng căn bản với các CSDL. Ngôn ngữ chuẩn và

phổ biến nhất trong các HQT CSDL quan hệ là SQL (Structured Query Language).

Ngôn ngữ SQL chứa các công cụ đặc biệt để định nghĩa các r àng buộc tính nhất quán

của CSDL. Các ràng buộc được lưu giữ trong các bảng-danh mục đặc biệt, và đảm bảo kiểm

tra tính nhất quán của CSDL được diễn ra trên cấp độ ngôn ngữ, nghĩa là, khi biên dịch các

lệnh sửa đổi CSDL, trên cơ sở các ràng buộc tính nhất quán CSDL đang có, trình biên dịch

14

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

SQL tạo ra mã chương trình tương ứng.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Các lệnh đặc biệt của ngôn ngữ SQL cho phép định nghĩa các khung nh ìn của CSDL.

Các khung nhìn thực tế là các truy vấn được lữu trữ trong CSDL với các thuộc tính đ ược đặt

tên. Đối với người dùng, khung nhìn cũng là một bảng giống như bất kỳ một bảng gốc nào

được lưu trữ trong CSDL. Nhưng, với sự giúp đỡ của các khung nhìn có thể hạn chế hoặc

mở rộng “tầm nhìn” CSDL cho một người dùng cụ thể. Duy trì các khung nhìn cũng được

thực hiện trên cấp độ ngôn ngữ.

Cuối cùng, xác thực quyền truy cập đến các đối tượng của CSDL cũng được thực

hiện trên cơ sở các công cụ đặc biệt của ngôn ngữ SQL. Ý tưởng là để thực hiện các lệnh

SQL khác nhau người dùng cần phải có các quyền hạn khác nhau. Người dùng đã tạo ra

bảng thì có đầy đủ thẩm quyền để làm việc với bảng. Trong số các thẩm quyền đó có cả

quyền truyền tất cả các thẩm quyền hoặc một phần trong đó cho các người dùng khác, kể cả

quyền trao thẩm quyền cho người dùng kế tiếp. Các thẩm quyền của người dùng được mô tả

trong các bảng-danh mục đặc biệt. Việc kiểm soát thẩm quyền được duy trì trên cấp độ ngôn

ngữ.

I.2.1.6 Các lợi ích khác

Ngoài các chức năng chính và cũng là những lợi ích trên, HQT CSDL còn mang lại

những lợi ích rất lớn khác, như đảm bảo sự độc lập dữ liệu, đảm bảo truy cập dữ liệu hiệu

quả, toàn vẹn và bảo mật dữ liệu, quản trị và rút ngắn thời gian (đơn giản hoá quá trình) phát

triển ứng dụng.

Sự độc lập dữ liệu được hiểu là các trình ứng dụng cần phải không phụ thuộc đến

mức cao nhất có thể vào các chi tiết lưu trữ và cung ứng (representation) dữ liệu. HQT

CSDL cung cấp một khung nhìn trừu tượng (abstract view) của dữ liệu để cách ly mã trình

ứng dụng với các chi tiết dữ liệu đó.

Truy cập dữ liệu hiệu quả được thể hiện qua việc DBMS sử dụng những kỹ thuật

cực kỳ tinh vi để lưu trữ và thu nhận dữ liệu một cách hiệu quả. Tính năng này rất quan

trong nếu dữ liệu được lưu trữ trên những thiết bị lưu trữ ngoài.

Đảm bảo toàn vẹn dữ liệu và bảo mật dữ liệu (data integrity và security) là lợi ích

quan trọng nhất mà HQT CSDL mang lại. Nếu dữ liệu luôn được truy cập thông qua HQT

CSDL, HQT CSDL có thể tuân thủ các ràng buộc toàn vẹn dữ liệu. Có thể nói, mục đích

chính của các chức năng chính của HQT CSDL nêu trên chủ yếu cũng nhằm đảm bảo tính

toàn vẹn dữ liệu. Ngoài ra, HQT CSDL còn điều khiển quá trình truy cập để chỉ huy dữ liệu

15

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

nào sẽ thuộc quyền truy cập bởi những nhóm hoặc người dùng cụ thể nào.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Tập trung hoá quá trình quản trị dữ liệu có ý nghĩa cải thiện hệ thống đáng kể, khi

nhiều người dùng cùng chia sẽ dữ liệu. Quản trị dữ liệu cho phép các chuyên gia – những

người hiểu đặc tính của dữ liệu đang được quản trị và hiểu các nhóm người dung khác nhau

sử dụng dữ liệu như thế nào, chịu trách nhiệm tổ chức thể hiện dữ liệu nhằm nâng cao hiệu

quả truy cập thông qua tối thiểu hoá sự dư thừa và thiết đặt đúng các tính năng của hệ thống

lưu trữ dữ liệu.

Rút ngắn thời gian phát triển ứng dụng được hiểu thông qua việc HQT CSDL cung

cấp hầu hết các chức năng quan trọng trong việc lưu trữ, quản trị và sử dụng dữ liệu thay vì

phải phát triển từ đầu cùng với trình ứng dụng.

Mặc dù HQT CSDL cung cấp nhiều lợi ích như vậy, nhưng nó là một hệ thống phần

mềm hoàn thiện được tối ưu hoá cho những loại công việc nhất định nào đó (như thực thi

các truy vấn, giải quyết cùng lúc nhiều yêu cầu tương tranh,…), và các trình ứng dụng cũng

có thể không chọn sử dụng HQT CSDL trong nhiều trường hợp, chẳng hạn:

– Các ứng dụng yêu cầu các ràng buộc thời gian thực nghiêm ngặt;

– Các ứng dụng chỉ yêu cầu chỉ vài thao tác ứng dụng chỉ yêu cầu chỉ vài thao tác

then chốt được thiết kế tốt và chỉ cần viết mã nguồn cho các thao tác đó (tất nhiên hiệu quả

sử dụng sẽ cao hơn nhiều);

– Ứng dụng yêu cầu phải thao tác dữ liệu theo kiểu mà ngôn ngữ CSDL của HQT

CSDL không đáp ứng được.

I.2.2 Tổ chức điển hình của một HQT CSDL hiện đại

Tổ chức của một HQT CSDL điển hình và thành phần các bộ phận cấu thành của nó

tương ứng với tổ hợp các chức năng mà chúng ta đã nói ở trên:

− Quản trị dữ liệu trong bộ nhớ ngoài;

− Quản trị các bộ nhớ đệm RAM;

− Quản trị các giao tác;

− Ghi nhật ký và khôi phục CSDL sau sự cố;

− Duy trì các ngôn ngữ CSDL.

Ở mức khái niệm (luận lý, logic), trong các HQT CSDL quan hệ hiện đại có thể phân

chia thành phần bên trong nhất – nhân của HQT CSDL, gọi là DataBase Engine (DBE);

trình biên dịch ngôn ngữ (thường là SQL); phân hệ hỗ trợ thời gian thực thi; và tổ hợp các

16

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

tiện ích. Trong vài hệ thống, các phần đó được phân chia một cách rõ ràng, và trong một số

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

không rõ ràng, nhưng một cách luận lý, sự phân chia như thế được áp dụng trong tất cả các

HQT CSDL.

Nhân của HQT CSDL chịu trách nhiệm quản trị dữ liệu trong bộ nhớ ngoài, quản trị

các bộ nhớ đệm RAM, quản trị các giao tác và nhật ký. Tương ứng, có thể phân chia các

thành phần của nhân thành quản trị viên (manager) dữ liệu, quản trị viên các bộ nhớ đệm,

quản trị viên các giao tác và quản trị viên nhật ký. Chức năng của các thành phần đó là liên

quan qua lại với nhau, và để đảm bảo công việc của HQT CSDL được đúng đắn, tất cả các

thành phần đó cần phải tương tác với nhau theo các giao thức đã được tính toán và kiểm tra

kỹ lưỡng. Nhân của HQT CSDL sở hữu giao diện riêng của mình. Giao diện đó là không thể

truy cập trực tiếp đối với người dùng và được sử dụng trong các chương trình được sản sinh

ra bởi trình biên dịch SQL và trong các tiện ích của CSDL. Nhân của HQT CSDL là phần

lưu trú (resident) (trong bộ nhớ) chủ yếu của HQT CSDL. Khi sử dụng kiến trúc “khách-

chủ”, nhân là phần cấu thành server cơ bản của hệ thống.

Chức năng chính của trình biên dịch (compiler) ngôn ngữ CSDL là biên dịch các lệnh

của ngôn ngữ CSDL thành các chương trình thực thi nào đó. Vấn đề chính của các HQT

CSDL quan hệ là các ngôn ngữ của các hệ thống đó (thường là SQL) không phải là ngôn

ngữ thủ tục (non-procedure), nghĩa là, trong lệnh của một ngôn ngữ như thế một thao tác

trên CSDL được đặc tả. Nhưng đặc tả đó không phải là một thủ tục, mà chỉ là miêu tả trong

một hình thức nào đó các điều kiện hoàn thành một thao tác mong muốn. Vì thế, trình biên

dịch phải quyết định, cần phải thực thi lệnh như thế nào trước khi tạo ra chương trình. Nhiều

phương pháp phức tạp khác nhau được áp dụng để tối ưu hoá các lệnh. Kết quả quá trình

biên dịch là một trình thực thi, được biểu diễn trong một hệ thống nào đó trong mã máy,

thường là trong mã bên trong không phụ thuộc máy. Việc thực thi thực tế một lệnh được

thực hiện bởi phân hệ hỗ trợ thời gian thực thi. Phân hệ này thực tế là một trình thông dịch

(interpreter - Một công cụ phiên dịch ngôn ngữ lập trình bậc cao dùng để dịch và chạy

chương trình cùng một lúc) của ngôn ngữ biểu diễn bên trong đó.

Các tiện ích riêng lẽ của CSDL thường là các thủ tục mà thực thi chúng sử dụng ngôn

ngữ CSDL là quá “tốn kém”. Ví dụ, tải (load) và unload CSDL, thu thập các số thống kê,

kiểm tra tổng thể tính toàn vẹn CSDL,… Các tiện ích được lập trình cùng với việc sử dụng

17

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

giao diện của nhân HQT CSDL, và đôi khi tác động đến bên trong của nhân.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Tổ chức bên trong của HQT CSDL Phần II

Chương II.1 Tổ chức bên trong của HQT CSDL

II.1.1 Kiến trúc của một HQT CSDL [2]

II.1.2 Các cấu trúc bộ nhớ ngoài, các phương pháp tổ chức chỉ mục (index)

Hệ quản trị CSDL quan hệ sở hữu hàng loạt đặc thù ảnh hưởng đến tổ chức bộ

nhớ ngoài. Những đặc tính sau đây có thể xếp vào loại quan trọng nhất:

− Tồn tại hai cấp độ hệ thống: Cấp độ quản trị dữ liệu trực tiếp trong bộ nhớ

ngoài (và thường thêm quản trị bộ đệm RAM, điều khiển các giao tác và nhật ký thay đổi dữ

liệu trong CSDL) và Cấp độ ngôn ngữ (chẳng hạn cấp độ triển khai ngôn ngữ SQL). Với

cấu trúc tổ chức như vậy các hệ thống còn phải hỗ trợ trong bộ nhớ ngoài các cấu trúc cơ

bản mà sự diễn giải cụ thể của nó là một phần trong số chức năng của phân hệ ở cấp độ cao

18

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

hơn.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

− Duy trì hệ thống danh mục quan hệ. Thông tin liên quan đến tên các đối tượng

của CSDL và các đặc tính cụ thể của nó (ví dụ cấu trúc khoá chỉ mục - index) được hỗ trợ

bởi phân hệ cấp độ ngôn ngữ.

− Tính thường xuyên của các cấu trúc dữ liệu. Bởi vì những bảng “phẳng” là đối

tượng chính của mô hình dữ liệu quan hệ nên tổ hợp các đối tượng trong bộ nhớ ngoài có

thể có cấu trúc thường xuyên rất đơn giản.

− Phải đảm bảo khả năng thực hiện hiệu quả các toán tử (câu lệnh) của cấp độ

ngôn ngữ như trên một quan hệ (phép chọn và chiếu giản đơn) cũng như trên nhiều quan hệ

đồng thời (phổ biến hơn và thường là phép nối nhiều quan hệ tốn nhiều nguồn lực). Trong

điều kiện đó trong bộ nhớ ngoài phải hỗ trợ các cấu trúc quản lý tăng cường như chỉ mục.

− Cuối cùng, để thực hiện yêu cầu lưu trữ một cách an toàn CSDL vần phải hỗ trợ

“độ thừa lưu trữ” dữ liệu. Thường được triển khai dưới dạng nhật ký thay đổi dữ liệu.

Như vậy xuất hiện những chủng loại đối tượng trong bộ nhớ ngoài sau đây:

− Các bản ghi dữ liệu quan h ệ − thành phần chính của CSDL, thường phần lớn

người dùng có thể thấy được.

− Các cấu trúc điều khiển – chỉ mục, được tạo ra một cách chủ đông theo sáng

kiến của người dung, thường là quản trị viên hay cấp độ cao nhất của hệ thống từ những dự

kiến nâng cao hiệu quả thực hiện các truy vấn và thường tự động được hỗ trợ bởi các cấp độ

thấp hơn của hệ thống.

− Thông tin nhật ký − được hỗ trợ để đảm bảo an toàn trong lưu trữ dữ liệu.

− Các thông tin bổ trợ khác để đáp ứng các yêu cầu bên trong cấp độ thấp của hệ

thống (ví dụ thông tin về phần bộ nhớ không được sử dụng).

Ví dụ….

II.1.3 Lưu trữ quan hệ

Về nguyên tắc tồn tại hai cách lưu trữ vật lý các quan hệ. Phổ biến nhất là lưu trữ

quan hệ theo từng bản ghi. Bản ghi là đơn vị lưu trữ vật lý. Rõ ràng cách này đảm bảo tiếp

cận nhanh chóng đến từng bản ghi. Nhưng như vậy trong bộ nhớ ngoài những giá trị chung

của các bản ghi khác nhau của một quan hệ được lặp lại, và như vậy, có thể đòi hỏi những

trao đổi dư thừa với bộ nhớ ngoài nếu cần một phần bản ghi.

Cách khác ít phổ biến hơn là lưu trữ quan hệ theo cột, nghĩa là đơn vị lưu trữ là

19

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

cột của quan hệ loại trừ những giá trị lặp lại. Rõ ràng cách này về tổng thể đòi hỏi ít bộ nhớ

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

ngoài hơn bởi vì những giá trị lặp lại không được lưu trữ. Với một trao đổi với bộ nhớ ngoài

trong trường hợp chung có thể đọc được thông tin cần thiết nhiều hơn. Một ưu thế nữa là

khả năng dùng các giá trị của cột để tối ưu hoá quá trình thực hiện phép nối. Nhưng trong

trường hợp này đòi hỏi hoạt động phụ trợ tương đối lớn để thu được nguyên bản ghi hoặc

một phần của nó.

Vì cách lưu trữ quan hệ theo bản ghi phổ biến hơn nên chúng ta sẽ xem xét cụ thể

hơn ở dưới đây. Cấu trúc kiểu mẫu của một trang dữ liệu có thể như hình dưới:

Hình II.1 Cấu trúc của trang dữ liệu

Những đặc điểm cơ bản của tổ chức này:

− Mỗi bản ghi có độc nhất một từ định danh (identifier − tid) không thay đổi

trong suốt thời tồn tại của bản ghi. Cấu trúc tid suy ra từ hình vẽ trên.

− Thường mỗi bản ghi được lưu trữ toàn vẹn trong một trang dữ liệu. Từ đó suy

ra độ dài lớn nhất của một bản ghi được giới hạn bởi kích cở của trang dữ liệu. Từ đó nảy

sinh câu hỏi: Làm thế nào với những dữ liệu “dài” không thể chứa trong một trang dữ liệu?

Có thể áp dụng một vài phương pháp. Đơn giản nhất là lưu trữ dữ liệu dài đó vào một tệp

riêng biệt ngoài CSDL và trong bản ghi thay vì giá trị giữ liệu chúng ta giữ tên tệp cùng với

đường dẫn đầy đủ. Ở một vài HQT CSDL những dữ liệu dài như vậy được lưu trữ riêng biệt

trên những tập hợp các trang dữ liệu trong bộ nhớ ngoài. Cả hai phương pháp trên đều rất

hạn chế trong làm việc với dữ liệu dài, ví dụ, làm thế nào để thay đổi hoặc xoá 1 byte ở giữa

trong chuỗi dữ liệu nhiều MB? Hiện tại người ta thường sử dụng phương pháp được giới

thiệu cách đây chưa lâu, trong đó dữ liệu dài được lưu trữ và tổ chức dưới dạng B-tree chuỗi

các byte dữ liệu.

− Theo nguyên tắc, rõ ràng trong một trang dữ liệu chỉ lưu trữ bản ghi của một

20

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

quan hệ duy nhất. Nhưng cũng tồn tại những phương án lưu trữ bản ghi của các quan hệ

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

khác nhau trên cùng một trang dữ liệu. Điều đó đòi hỏi những chi phí bổ sung vì thành phần

thông tin phụ trợ, như, đi kèm với mỗi bản ghi chúng ta phải bổ sung thêm thông tin về quan

hệ mà bản ghi thuộc về nó. Nhưng thỉnh thoảng cho phép rút ngắn rất nhiều số trao đổi dữ

liệu với bộ nhớ ngoài khi thực hiện phép nối.

− Thay đổi sơ đồ quan hệ được lưu trữ bằng cách thêm cột không bắt buộc phải tổ

chức lại quan hệ về mặt vật lý. Chỉ cần thay đổi thông tin về nhãn miêu tả (descriptor) của

quan hệ và nới rộng bản ghi chỉ khi thông tin được nhập vào cột mới.

− Bởi vì quan hệ có thể chứa những giá trị không xác định nên cần thiết phải có

tồn tại sự hỗ trợ ở cấp độ lưu trữ. Thường có thể đạt được điều đó bằng cách giữ lại một độ

(scale) co giản tương ứng trong mỗi bản ghi, và về nguyên tắc bản ghi có thể chứa những

giá trị không xác định.

− Vấn đề phân bố bộ nhớ trong các trang dữ liệu gắn liền với vấn đề đồng bộ và

ghi lại nhật ký. Ví dụ, trong quá trình thực hiện giao tác một trang dữ liệu bị xoá sạch (tàn

phá) sẽ không được đưa vào trạng thái “tự do” cho đến khi kết thúc giao tác, bởi vì khi

rollback giao tác những bản ghi bị xoá trong quá trình thực hiện giao tác sẽ và khôi phục

trong quá trình rollback phải được nhận chính xác những chỉ danh mà nó đã có trước khi bắt

đầu thực hiện giao tác.

− Một phương pháp nâng cao hiệu quả HQT CSDL là liên cung (nhóm,

clustering) nhiều quan hệ theo giá trị một hay nhiều cột. Nhóm chung nhiều quan hệ có lợi

trong tối ưu hoá phép nối các quan hệ khác nhau.

− Với mục đích sử dụng khả năng thực hiện song song các trao đổi với bộ nhớ

ngoài thỉnh thoảng áp dụng sơ đồ de-clustered lưu trữ các quan hệ: bản ghi có giá trị cột

chung (cột được declustering) được lưu trữ trên những thiết bị ổ đĩa khác nhau, và trao đổi

thông tin với chúng có thể thực hiện song song.

Ý tưởng chủ đạo trong việc lưu trữ quan hệ theo cột là lưu trữ chung tất cả các giá

trị của một hay nhiều cột. Với mỗi bản ghi quan hệ sẽ lưu trữ bản ghi cùng cấp độ đó, được

tạo thành bởi những đường dẫn (links) đến chỗ lưu trữ thật sự các giá trị tương ứng của các

cột.

Ở phần cuối (chương?) chúng ta sẽ xem xét những đặc thù trong tổ chức hệ quản

trị CSDL quan hệ phân tán. Một trong những cách đó là phân chia quan hệ theo chiều dọc

21

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

(vertical), khi mà các kết quả phép chiếu của quan hệ được lưu giữ ở các nút mạng khác

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

nhau. Lưu trữ quan hệ theo các cột theo nghĩa nào đó là trường hợp “giới hạn” của sự phân

chia quan hệ theo chiều dọc.

Các thao tác đọc/ghi của thiết bị lưu trữ được thực hiện theo bội số của đơn vị lưu

trữ vật lý. Nếu mỗi đơn vị dữ liệu (lưu trữ) phủ kín các đơn vị lưu trữ của bộ nhớ vật lý thì ít

tốn kém không gian lưu trữ vật lý nhất. Nếu các đơn vị dữ liệu nằm nối tiếp nhau trên thiết

bị lưu trữ thì thời gian đọc và ghi dữ liệu thấp nhất nhờ tiết kiệm thời gian di chuyển đầu

đọc. Tuy nhiên, sẽ không hiệu quả nếu khối lượng dữ liệu thay đổi nhanh chóng. Các HQT

CSDL hiện đại đều có những chính sách hoạch định không gian lưu trữ, và thông thường,

không gian lưu trữ “hoạch định trước” được tăng lên theo một thông số đã được thiết đặt và

lớn hơn nhiều lần so với đơn vị dữ liệu lưu trữ và lớn hơn nhiều lần khối lượng dữ liệu cần

lưu trữ tăng lên trong lần gần nhất.

II.1.4 Các chỉ mục

Các chỉ mục không thể không được tổ chức trong các HQT CSDL bởi vì chức

năng chủ yếu của chúng là đảm bảo truy cập trực tiếp đến các bản ghi của quan hệ một cách

hiệu quả bằng các khoá. Thông thường chỉ mục được tạo ra cho một quan hệ và khoá là giá

trị của một thuộc tính (có thể là khoá kép được cấu thành từ nhiều thuộc tính). Nếu khoá của

quan hệ là khoá của chỉ mục thì chỉ mục phải có tính chất “độc nhất”, nghĩa là không chứa

các khoá lặp lại. Trên thực tế hoàn cảnh có vẻ đối lập: Khi khai báo khoá ứng viên (chính)

cho một quan hệ một chỉ mục độc nhất được tạo ra, và biện pháp duy nhất để khai báo một

khoá nào nào đó khác với khoá ứng viên (chính) là tạo ra một chỉ mục độc nhất một cách rõ

ràng (explicit). Điều đó liên quan đến việc để kiểm tra việc lưu giữ tính chất độc nhất của

một khoá nào đó đòi hỏi phải có hỗ trợ về mặt chỉ mục.

Bởi vì trong quá trình thực hiện nhiều toán tử (“phép”) của cấp độ ngôn ngữ đòi

hỏi sắp xếp các quan hệ tương ứng với giá trị của những thuộc tính nào đó. Một tính chất

của chỉ mục mang lại nhiều lợi ích đó là đảm bảo cho xem liên tiếp các bản ghi của quan hệ

trong khoảng giá trị của khoá tăng hay giảm các giá trị của khoá.

Cuối cùng, một trong những biện pháo tối ưu hoá quá trình thực hiện phép nối

(equal-join) các quan hệ, một trong những phép phổ biến nhất và “trị giá cao nhất – đòi hỏi

nhiều nguồn”, đó là tổ chức các “đa chỉ mục” cho nhiều quan hệ sở hữu các thuộc tính

giống nhau. Bất cứ cái nào từ các thuộc tính (hoặc tổ hợp) đó đều có thể đại diện làm khoá

22

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

của đa chỉ mục. Tổ hợp bản ghi tất cả các quan hệ liên quan bởi đa chỉ mục tương quan với

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

giá trị khoá, và giá trị các thuộc tính tham gia trong quá trình tạo ra đa chỉ mục của các bản

ghi đó trùng với giá trị của khoá.

Ý tưởng chung của tất cả các quá trình tổ chức chỉ mục cho phép truy cập trực

tiếp bằng khoá và xem liên tiếp theo thứ tự tăng hoặc giảm dần giá trị khoá là lưu giữ danh

sách các giá trị khoá đã được sắp xếp và ràng buộc với từng giá trị khoá của danh sách các

từ định danh các bản ghi. Các phương pháp tổ chức chỉ mục khác biệt nhau ở cách thức tìm

khoá với một giá trị được cho.

II.1.4.1 B-tree

Nhận thấy rằng cách thức tổ chức chỉ mục phổ biến nhất là dùng kỹ thuật B-tree.

Trên quan điểm biểu diễn luận lý bên ngoài, B-tree là cây có tính cân bằng và có rất nhiều

nhánh trong bộ nhớ ngoài. Tính cân bằng được hiểu rằng chiều dài đường đi từ gốc đến bất

cứ lá nào cũng như nhau. Tính phân nhánh của cây là mỗi nút của cây chỉ (links) đến số

lượng lớn các nút hậu duệ (nút con). Trên quan điểm tổ chức vật lý được biểu diễn như một

cấu trúc “đa danh sách” (multi-lists) các trang bộ nhớ ngoài, nghĩa là mỗi nút B-tree tương

ứng với một khối (trang) bộ nhớ ngoài. Các trang bên trong và các trang lá (nút lá) thường

có cấu trúc khác nhau.

Trường hợp điển hình trang có cấu trúc như hình vẽ dưới đây:

N1 key(1) N2 key(2) N3…Nn key(n) Nn+1 key(n+1)

Hình II.2 Cấu trúc điển hình của trang bộ nhớ

Trong điều kiện đó luôn luôn thoả mãn các tính chất:

− key(1) <= key(2) <= …. <= key(n);

− trong trang của cây Nm chứa các khoá k với các giá trị key(m)<= k <=

key(m+1).

Trang lá thường có cấu trúc:

key(1) List(1) key(2) List(2)…key(t) List(t)

Hình II.3 Cấu trúc điển hình của trang (lá) bộ nhớ

Và thường có các tính chất:

23

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

− key(1) <= key(2) <= …. <= key(t);

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

− List(r) − danh sách các từ định danh bản ghi (tid) bao gồm các giá trị key(r) đã

được sắp xếp;

− các trang lá liên kết với nhau dưới dạng danh sách liên kết đơn hoặc kép.

Tìm kiếm trong B-tree là đi qua từ gốc đến lá trong sự tương ứng giá trị khoá

được cho. Bởi vì cây phân nhánh rất mạnh và được cân bằng nên để thực hiện việc tìm kiếm

theo bất kỳ giá trị nào của khoá cần đúng một số duy nhất và thường rất nhỏ các trao đổi với

bộ nhớ ngoài. Chính xác hơn, trong các cây đã được cân bằng, nơi mà chiều dài tất cả các

đường từ gốc đến lá như nhau, nếu trong trang bên trong chứa n khoá, thì trong trường hợp m. Nếu n đủ lớn (thường thì như thế) thì lưu trữ m bản ghi cần tổ chức cây có chiều sâu logn

chiều sâu của cây không lớn và việc tìm kiếm diễn ra rất nhanh.

Khiếm khuyết chủ yếu của B-tree là tự động hỗ trợ tính chất cân bằng. Bây giờ

chúng ta hãy xem điều gì sẽ xảy ra khi them và xoá một bản ghi.

Trường hợp thêm bản ghi:

− Tìm trang lá − diễn ra quá trình tìm kiếm thông thường theo khoá. Nếu trong B-

tree không có khoá với giá trị đã cho thì sẽ thu được số trang mà nó sẽ phải được chứa trong

đó, và tất nhiên địa chỉ chính xác tương ứng trong trang.

− Đặt bản ghi vào chỗ. Rõ ràng rằng tất cả các thao tác đều được thực hiện trong

bộ nhớ đệm RAM. Trang lá mà bản ghi sẽ được thêm vào sẽ được đọc lên bộ nhớ và trong

đó sẽ được thực hiện quá trình “thêm vào” (insert). Kích thước bộ nhớ đệm phải lớn hơn

kích thước trang bộ nhớ ngoài.

− Nếu sau khi thực hiện việc thêm bản ghi kích thước phần bộ nhớ đệm được sử

dụng không trở nên lớn hơn so với kích thước trang bộ nhớ ngoài thì quá trình thêm bản ghi

xem như kết thúc. Phần bộ nhớ đệm có thể sẽ được đẩy ra bộ nhớ ngoài ngay lập tức hoặc

tạm thời được giữ lại trong RAM tuỳ thuộc vào chính sách sử dụng và quản lý bộ nhớ đệm.

− Nếu xảy ra trường hợp tràn bộ đệm (kích thước phần bộ nhớ đệm được sử dụng

trở nên lớn hơn so với kích thước trang bộ nhớ ngoài) thì quá trình tách trang sẽ được thực

hiện. Cho việc này, một trang bộ nhớ ngoài mới sẽ được yêu cầu, và phần bộ nhớ đệm đang

được sử dụng sẽ được chia làm hai theo cách nào đó để nữa thứ hai cũng được bắt đầu bởi

một khoá. Và nữa thứ hai được ghi và trang bộ nhớ vừa được chia. Còn trong trang cũ thì

thông tin về phần bộ nhớ còn trống được sửa đổi tương ứng. Tất nhiên đường dẫn (links)

24

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

theo danh sách các trang lá.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

− Để đảm bảo khả năng truy cập từ gốc đến trang mới được thêm vào cần phải

thay đổi thông tin tương ứng trong trang bên trong là thế hệ trước (predkom?) của trang lá

tồn tại trước đó, nghĩa là ghi vào trang đó khoá và địa chỉ của trang mới vừa được thêm vào.

Trong quá trình thực hiện có thể lại xảy ra trường hợp tràn bộ nhớ trang bên trong và nó

được chia tách làm hai nữa. Và tất nhiên thông tin trong trang thế hệ trước của nó cũng phải

được sửa đổi tương ứng. Kết quả là khoá và đường dẫn (địa chỉ) đến trang mới được ghi vào

trang thế hệ trước theo cấp bậc và quá trình này cứ tái diễn.

− Trường hợp hi hữu là tràn bộ nhớ trang gốc của B-tree. Trong trường hợp này

nó cũng được phân tách ra làm hai và một trang gốc mới sẽ được hình thành. Chiều sâu của

cây tăng lên một đơn vị.

Trường hợp xoá bản ghi:

− Tìm bản ghi theo khoá. Nếu không tìm ra thì không có gì cần xoá cả.

− Trang lá chứa bản ghi cần xoá được đọc vào bộ nhớ đệm và quá trình xoá thực

sự xảy ra trong đó.

− Nếu như sau khi thực hiện bước xoá bản ghi kích thước phần bộ nhớ đệm được

sử dụng trở thành kích thước mà tổng của nó với kích thước phần đã chứa thông tin trong

trang bên phải hoặc trái trang hiện tại lớn hơn kích thước trang thì quá trình xoá bản ghi kết

thúc.

− Nếu ngược lại thì sẽ diễn ra quá trình hợp nhất trang hiện tại với trang bên trái

hoặc bên phải. Nghĩa là trong bộ nhớ đệm hình thành hình dạng mới của trang, mà trong đó

được chứa nội dung cũ của nó và nội dung trang bên trái hoặc bên phải tương ứng. Trang lá

cũ không cần thiết được cho vào danh sách trang lá còn trống. Danh sách các trang lá cũng

được thay đổi tương ứng.

− Để loại bỏ khả năng truy cập từ gốc đến trang lá vừa được giải phóng cần phải

xoá khoá và địa chỉ của nó từ trang bên trong thế hệ trước nó. Trong trường hợp đó có thể

xảy ra khả năng cần phải hợp nhất trang bên trong thế hệ trước với trang bên trái hoặc bên

phải của nó. Và quá trình này lại tái diễn.

− Trường hợp cuối cùng là trang gốc có thể được xoá trống hoàn toàn sau khi hợp

nhất hai trang hậu duệ cuối cùng của trang gốc. Trong trường hợp đó trang gốc được giải

25

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

phóng và chiều sâu của cây giảm xuống một đơn vị.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Như đã thấy, trong quá trình thêm và xoá bản ghi tính chất cân bằng của B-tree

được bảo toàn, còn dung lượng bộ nhớ ngoài được sử dụng nếu tăng lên thì cũng rất tiết

kiệm.

Vấn đề là ở chỗ trong quá trình sửa đổi dữ liệu có khả năng phải hợp nhất và phân

tách các trang rất nhiều lần. Để đạt được hiệu quả sử dụng bộ nhớ ngoài bằng cách giảm

thiểu số lần hợp nhất và chia tách các trang người ta sử dụng một số giải pháp sau:

− phân tách trang trước, có nghĩa là không chờ đến khi trang bị tràn chúng ta mới

phân tách mà phân tách trước khi mức độ lấp đầy trang cao đến một mức nào đó;

− đổ bớt sang trang bên cạnh, nghĩa là đảm bảo mức độ lấp đầy ở các trang gần

nhau là như nhau;

− hợp nhất 3 vào 2, có nghĩa là tạo ra 2 trang mới trên cơ sở nội dung của 3 trang

gần nhau.

Cần chú ý rằng trong các HQT CSDL quá trình tổ chức “đa truy cập” từ gốc đến

các trang lá của B-tree là thường xuyên và có thể gặp và phải giải nhiều vấn đề khác nhau.

Cách giải quyết đơn giản nhất là độc chiếm B-tree trong suốt quá trình sửa đổi dữ liệu chẳng

hạn, nhưng rõ ràng không hiệu quả. Có những cách đi khác tốt hơn, nhưng không nằm trong

khuôn khổ chương trình. Có thể tìm hiểu thêm ở [].

Một điểm nữa là ở một số sách người ta dùng ký hiệu B*-tree hoặc B+-tree.

II.1.4.2 Băm (Hashing)

Một cách tiếp cận khác để tổ chức các chỉ mục phổ biến hơn đó là sử dụng kỹ

thuật băm. Đây là một chủ đề lớn và được xem xét nghiên cứu riêng lẽ. Chúng ta chỉ giới

hạn xem qua một vài đặc điểm cần phải chú ý. Ý tưởng chung của các phương pháp (kỹ

thuật) băm là sử dụng các hàm băm (hay cuộn, hash-functions) cho các giá trị của khoá để

cho ra những giá trị nhỏ hơn. Băm các giá trị khoá ra và dùng nó để truy cập đến các bản

ghi.

Trường hợp đơn giản và cổ điển nhất đó là sự băm khoá được sử dụng như là địa

chỉ trong một bảng chứa các khoá và bản ghi. Yêu cầu căn bản của hàm băm là sự phân bố

đồng đều các giá trị băm. Nếu xuất hiện xung đột, một băm duy nhất cho nhiều giá trị khoá

cùng lúc, thì sẽ tạo ra một chuỗi các sự tràn đầy (переполнения). Hạn chế lớn nhất của

phương pháp này là kích thước của trang cố định không đổi. Nếu trang bị quá đầy và tràn thì

26

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

sẽ xuất hiện nhiều chuỗi các sự tràn đầy. Và nếu như vậy, ưu điểm chính của băm là truy

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

cập đến bản ghi thường chỉ bằng một bước truy cập đến bảng sẽ bị mất đi. Mở rộng trang

đòi hỏi phải làm lại hoàn toàn trên cơ sở hàm băm mới với giá trị băm kích thước lớn hơn.

Trong trường hợp CSDL điều này là hoàn toàn không được phép xảy ra. Vì vậy các bảng tra

cứu tạm thời chứa các giá trị khoá và địa chỉ bản ghi thường được cho vào. Còn bản thân

bản ghi được lưu trữ riêng lẽ ở một chỗ khác. Vì vậy khi xảy ra sự tràn đầy các bảng tra cứu

thì chỉ cần làm lại các bảng tra cứu, và rõ ràng các chi phí phụ thêm cũng nhỏ hơn nhiều.

Để tránh trường hợp phải làm lại hoàn toàn các bảng tra cứu tạm thời trong quá

trình tổ chức triển khai hashing người ta thường ứng dụng kỹ thuật B-tree cùng cới việc hợp

nhất và phân tách các trang. Hàm băm trong trường hợp này thường thay đổi một cách linh

động tuỳ thuộc vào chiều sâu của cây.

II.1.4.3 Thông tin nhật ký

Cấu trúc của nhật ký thường là khác biệt phụ thuộc vào từng trường hợp triển

khai cụ thể. Chúng ta chỉ xem qua những tính chất cơ bản chung nhất.

Nhật ký thường là những tệp ghi chuỗi các bản ghi với kích thước thay đổi khác

nhau, và thường có thể xem từ trên xuống dưới hoặc ngược lại. Trao đổi dữ liệu được diễn

ra theo từng phần thông thường hoặc theo trang cùng với sự sử dụng bộ đệm RAM. Trong

các hệ thống được tổ chức tốt chỉ các bộ phận của HQT CSDL được biết cấu trúc và nội

dung nhật ký để phục vụ cho việc ghi nhật ký và khôi phục dữ liệu. Bởi vì nội dung nhật ký

có tính chất quyết định trong quá trình khôi phục DB sau khi xảy ra sự cố nên quá trình tồn

tại và thao tác với các tệp nhật ký đòi hỏi sự tin cậy đặc biệt. Thường người ta cố gắng lưu

trữ cùng lúc hai phiên bản giống nhau của nhật ký trên các phương tiện lưu trữ bên ngoài

khác nhau.

II.1.4.4 Thông tin phục vụ

Để phân hệ (hệ thống con) điều khiển dữ liệu hoạt động đúng đắn trong bộ nhớ

ngoài cần phải hỗ trợ những thông tin được dùng chỉ mỗi phân hệ đó, và bị khuất đối với

phân hệ cấp độ ngôn ngữ. Tập hợp cấu trúc của thông tin phụ thuộc vào tổ chức chung của

hệ thống, nhưng thường có các thông tin sau:

− Các danh mục bên trong miêu tả các tính chất thuộc tính vật lý của các đối

tượng CSDL, ví dụ các thông tin định nghĩa quan hệ như số thuộc tính của quan hệ, kích

27

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

thước của chúng, và có thể type dữ liệu, mô tả chỉ mục…

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

− Các nhãn miêu tả (descriptor), kích thước phần bộ nhớ còn trống và đã bận của

các trang dữ liệu của quan hệ. Những thông tin này cần thiết để xác định chỗ trống khi cần

thêm một bản ghi mới vào quan hệ. Trong các trường hợp quan hệ không liên cung và liên

cung (không nhóm và nhóm) công việc tìm kiếm chỗ trống được giải quyết khác nhau.

Trong trường hợp liên cung cần phải sử dụng thông tin bổ trợ là chỉ mục liên cung. Như đã

nói ở trên, vấn đề giải phóng một trang trong điều kiện đa truy cập là không đơn giản

(netivialna!).

− Liên kết các trang của một quan hệ. Nếu trong một tệp trong bộ nhớ ngoài có

thể lưu giữ các trang của vài quan hệ (thường là cố gắng hướng tới như vậy) thì cần phải

bằng cách nào đó liên kết các trang của một quan hệ với nhau. Biện pháp thông th ường là sử

dụng các đường dẫn (links) trực tiếp giữa các trang rất hay dẫn đến khó khăn trong quá tr ình

đồng bộ hoá các giao tác. Ví dụ rất khó khăn để giải phóng trang và tạo lập các trang mới.

Vì vậy cần phải cố gắng sử dụng sự liên kết gián tiếp cùng với việc sử dụng các chỉ mục

phục vụ bổ trợ. Chẳng hạn như kỹ thuật chung để miêu tả phần bộ nhớ còn trống và liên kết

28

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

các trang trong B-tree.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Quản lý và tuần tự hoá các giao tác

Chương II.2 Giao tác và tính toàn vẹn CSDL

Trong phần này chúng ta sẽ xem xét các khái niệm nền tảng của giao tác. Khái niệm

này không thuộc về mô hình dữ liệu quan hệ, bởi vì giao tác có mặt không chỉ trong các

HQT CSDL quan hệ, mà còn trong các HQT CSDL khác, cũng như trong các dạng hệ thống

thông tin khác.

Trên quan điểm tác động đến HQT CSDL, giao tác là một chuỗi các phép thao tác

(thêm, xoá, sửa đổi) với dữ liệu. Đối với người dùng, giao tác được thực hiện theo nguyên

tắc “TẤT CẢ HOẶC KHÔNG CÓ GÌ”, nghĩa là hoặc giao tác được thực hiện hoàn toàn và

đưa CSDL từ một “trạng thái toàn vẹn” này sang một “trạng thái toàn vẹn” khác, hoặc là

nếu vì một lý do nào đó một trong các thao tác không được thực hiện hay là xảy ra một sự

phá huỷ công việc bình thường của hệ thống, thì CSDL sẽ được cho quay về trạng thái ban

đầu như trước khi bắt đầu thực hiện giao tác (rollback giao tác). Trên quan điểm đó giao tác

quan trọng trong cả các hệ thống nhiều người dùng và cả hệ thống một người dùng. Trong

các hệ thống một người dùng, giao tác là những đơn vị logic của công việc, mà sau khi thực

hiện xong CSDL vẫn ở trong trạng thái toàn vẹn. Giao tác cũng là những đơn vị phục hồi dữ

liệu sau sự cố. Khi phục hồi dữ liệu, hệ thống sẽ thanh toán (thủ tiêu) những dấu tích giao

tác không kịp hoàn thành vì lý do sự cố chương trình hay là phần cứng. Hai tính chất đó xác

định tính nguyên tử (atomicity) của giao tác. Ngoài ra, trong các hệ thống nhiều người dùng

giao tác được dùng để đảm bảo cô lập công việc của từng người dùng. Nhiều người làm việc

trong dùng hệ thống cùng một lúc nhưng họ vẫn cảm thấy như là một mình họ làm việc

trong hệ thống đó và không ảnh hưởng đến nhau.

II.2.1 Ví dụ sự phá huỷ tính toàn vẹn CSDL

Để minh hoạ khả năng phá huỷ tính toàn vẹn CSDL chúng ta sẽ xem xét các ví dụ

sau.

Ví dụ 1. Có một hệ thống lưu trữ thông tin về các bộ phận và những người làm việc

trong đó. Danh sách các bộ phận được lưu trữ trong bảng CACBOPHAN(bp_id, bp_ten,

bp_soLuong). Trong đó bp_id − từ định danh c ủa bộ phận, bp_ten − tên bộ phận, và

bp_soLuong − số lượng người làm việc trong bộ phận. Danh sách nhân viên được giữ trong

29

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

bảng NHANVIEN(nv_id, nv_hoten, nv_bp_id). Trong đó nv_id − từ định danh của nhân

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

viên, nl_hoten

− họ tên nhân viên và bp_id − từ định danh của bộ phận mà nhân viên đó làm

việc.

bp_id bp_ten bp_soLuong

1 Kế toán 3

2 Kinh doanh 10

3 Kỹ thuật 15

Hình II.1 Bảng BỘ_PHẬN

nl_id 1 2 3 4 … nl_hoten Nguyễn Văn A Trần Thị B Trần Văn C Phạm Văn D … bp_id 3 1 2 3 …

Hình II.2 Bảng NGƯỜI_LÀM Ràng buộc tính toàn vẹn của CSDL này được hiểu rằng không thể ghi vào trường

bp_soluong một số bất kỳ, mà nó phải bằng đúng với số nhân viên thực tế làm việc trong bộ

phận đó.

Tính đến ràng buộc đó có thể kết luận rằng thêm một nhân viên vào bảng không thể

có chuyện chỉ thực hiện một thao tác. Khi thêm một nhân viên mới cần phải đồng thời tăng

giá trị của trường bp_soluong.

− Bước 1. Thêm nhân viên vào bảng NHANVIEN: insert into nhanvien values(6,

‘Nguyen Van A’, 1)

− Bước 2. Tăng giá trị trường bp_soluong: update BOPHAN set bp_soluong =

bp_soluong + 1 where bp_id = 1.

Nếu sau khi hoàn thành hành động đầu tiên và trước khi hoàn thành hành động thứ

hai xay ra sự cố trong hệ thống, thì thực tế chỉ hoàn thành hành động thứ nhất và CSDL sẽ

có trạng thái không toàn vẹn.

II.2.2 Khái niệm giao tác

Định nghĩa 1. Giao tác là một chuỗi các toán tử thao tác với dữ liệu thực hiện như là

một thể thống nhất (tất cả hoặc không có gì) và đưa CSDL từ một trạng thái toàn vẹn này

vào trạng thái toàn vẹn khác.

30

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

Giao tác có 4 tính chất quan trọng: (ACID)

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

− Nguyên tử, Không phân chia (Atomicity). Giao tác được thực hiện giống như một

phép nguyên vẹn. Hoặc là hoàn thành tất cả hoặc là không thực hiện.

− Tính nhất quán (Consistency). Giao tác đưa CSDL từ một trạng thái nhất quán

(nguyên vẹn) này vào một trạng thái nhất quán khác. Bên trong giao tác tính nhất quán của

CSDL có thể bị xâm phạm, phá huỷ.

− Tính cô lập (Isolation). Giao tác của những người dùng khác nhau không ảnh

hưởng đến nhau, ví dụ giống như chúng được thực hiện theo một thứ tự nghiêm ngặt.

− Tính lâu bền (Durability). Nếu giao tác được hoàn thành thì kết quả thực hiện công

việc của nó phải được lưu trữ trong CSDL, thậm chí ngay sau đó xảy ra sự cố hệ thống.

Thông thường Giao tác tự động được bắt đầu từ thời điểm người dùng kết nối đến

HQT CSDL và tiếp tục cho đến khi xảy ra một trong các sự kiện sau:

− người dùng gửi đến lệnh COMMIT WORK (cố định giao tác);

− người dùng gửi đến lệnh ROLLBACK WORK (rollback giao tác);

− người dùng ngắt kết nối với HQT CSDL;

− xảy ra sự cố hệ thống.

Thường thì lệnh COMMIT WORK kết thúc giao tác hiện thời và tự động bắt đầu

một giao tác mới. Trong khi đó đảm bảo rằng kết quả thực hiện giao tác vừa được kết thúc

được cố định, nghĩa là được lưu trữ trong CSDL. Trong một số hệ thống, ví dụ Visual

FoxPro, đòi hỏi phải gửi lệnh BEGIN TRANSACTION để bắt đầu một giao tác mới. Và

thường trong các HQT CSDL, chế độ này có thể được thiết đặt theo ý muốn của người

dùng.

Lệnh ROLLBACK WORK dẫn đến việc toàn bộ những thay đổi bởi những lệnh

trong giao tác hiện tại bị từ chối, giống như là chưa có lệnh nào được thực hiện và chưa bao

giờ có thay đổi nào xảy ra. Sau lệnh ROLLBACK WORK một giao tác sẽ tự động được bắt

đầu.

Khi người dùng ngắt kết nối với HQT CSDL sẽ tự động cố định (những thay đổi

bởi) giao tác hiện thời.

Khi xảy ra sự cố hệ thống, những quá trình phức tạp hơn sẽ diễn ra. Nói một cách

ngắn gọn, khi hệ thống được khởi động lại thì sẽ diễn ra quá trình phân tích tất cả các giao

tác đã được thực hiện đến thời điểm xảy ra sự cố. Đối với các giao tác đã được gửi lệnh

31

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

COMMIT WORK nhưng kết quả thực hiện chưa được giữ lại trong CSDL thì sẽ được thực

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

hiện lại từ đầu. Còn những giao tác chưa có lệnh COMMIT WORK sẽ bị ROLLBACK. Quá

trình khôi phục sau sự cố hệ thống sẽ được nghiên cứu kỹ hơn sau này.

Các tính chất ACID của giao tác không phải bao giờ cũng được thực thi đầy đủ

toàn vẹn tất cả, đặc biệt tính chất cô lập I (isolation). Rất lý tưởng nếu các giao tác của các

người dùng khác nhau không ảnh hưởng và tác động đến nhau, nghĩa là chúng phải được

tiến hành như thế nào đó để các người dùng đều cảm giá rằng họ làm việc một mình trong

hệ thống. Phương pháp đơn giản để đảm bảo tính cô lập tuyệt đối là sắp xếp tất cả các giao

tác vào một hàng và thực thi chúng hết cái này đến cái khác một cách nghiêm ngặt. Rõ ràng

trong trường hợp này tính hiệu quả làm việc của hệ thống bị mất đi. Vì vậy trong thực tế

nhiều giao tác cùng được thực thi cùng một lúc. Có vài mức độ cô lập. Ở mức độ cô lập

thấp nhất các giao tác có thể thật sự ảnh hưởng đến nhau, và ở mức độ cao nhất chúng hoàn

toàn được cô lập. Mức độ cô lập càng cao thì càng phải trả giá càng cao bằng các chi phí

phát sinh và làm chậm hệ thống. Người dùng và quản trị viên của hệ thống có thể chọn mức

độ cô lập cần thiết cho tất cả các giao tác hoặc cho từng giao tác cụ thể theo cái nhìn của

mình. Tính cô lập giao tác sẽ được nghiên cứu cụ thể hơn ở phần sau.

Tính chất lâu dài D cũng không phải là hoàn toàn tuyệt đối, bởi vì có nhiều hệ

thống cho phép các giao tác lồng. Nếu giao tác B bắt đầu trong giao tác A, v à cho giao tác B

thực hiện lện COMMIT WORK, thì sự cố định các kết quả thao tác với dữ liệu của giao tác

B cũng chỉ có tính tượng trưng, bởi vì giao tác bên ngoài A có thể bị rollback sau đó. Kết

quả thực hiện giao tác B chỉ được cố định hoàn toàn chỉ khi nếu giao tác bên ngoài A cũng

được cố định.

II.2.3 Phân loại giao tác

Một giao tác có thể được bắt đầu trong một trong ba chế độ sau: autocommit,

explicit, hoặc là implicit. Thường trong các HQT CSDL (Oracle, MS SQL Server,…) chế

độ mặc định cho các giao tác là autocomit. Trong các HQT CSDL đều có các công cụ để

thiết đặt chế độ cho các giao tác. Ví dụ, trong Oracle, MS SQL Server là SET

AUTOCOMMIT, SET IMPLICIT_TRAN,…

II.2.3.1 Giao tác tự chấp nhận (Autocommit mode)

Trong chế độ này, mỗi lệnh trên CSDL sẽ được cố định khi nó kết thúc. Không cần

bất cứ một lệnh bổ trợ nào để điều khiển các giao tác với chế độ này. Nói cách khác, mỗi

32

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

một giao tác chỉ chứa một lệnh SQL. Chế độ autocommit rất là hữu ích khi thực thi các lệnh

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

trong chế độ tương tác trực tiếp (interactive), hoặc là khi viết các trình ứng dụng mà thường

mỗi một thao tác của người dùng tương ứng chỉ với một lệnh SQL sửa đổi CSDL. Khi đó,

chúng ta không cần phải quan tâm về việc bắt đầu và kết thúc một cách rõ ràng cho mỗi giao

tác. Rõ ràng trong chế độ này, mỗi lệnh sẽ được đối xử như là một giao tác của riêng nó bởi

HQT CSDL và sẽ được cố định ngay lập tức sau khi nó hoàn tất thành công. Thường khi

trên HQT CSDL chế độ này đã được thiết đặt, thì các kết nối đến HQT CSDL đều được sử

dụng chế độ này, ngoại trừ trường hợp người dùng bắt đầu giao tác một cách tường minh

(explicit) bằng cách sử dụng lệnh BEGIN TRAN[SACTION] hoặc cho đến khi chế độ

implicit được thiết đặt. Khi một giao tác khai báo tường minh tường minh được kết thúc

hoặc chế độ implicit được tắt, thì HQT CSDL sẽ tự động chuyển về chế độ autocommit.

II.2.3.2 Giao tác được khai báo tường minh (Explicit)

Chế độ khai báo tường minh thường được sử dụng cho lập trình các ứng dụng và cho

các hàm và thủ tục (functions, stored procedures), bẫy sự kiện và các scripts. Khi thực thi

một nhóm các lệnh để thực thi một nhiệm vụ, cần phải xác định điểm mà giao tác sẽ bắt đầu

và kết thúc là gì. Việc đó nhằm mục đích phục vụ cho việc cố định kết quả nếu nhóm các

lệnh đó hoàn tất thành công hoặc là các sửa đổi trong CSDL được thực hiện bởi các lệnh của

nhóm đó bị rollback. Một khi đã xác định sự bắt đầu và kết thúc một giao tác một cách

tường minh, chúng ta sẽ sử dụng chế độ explicit, và giao tác được quy là một giao tác được

khai báo tường minh.

Chúng ta hãy xem qua một tình huống bắt buộc phải dùng chế độ khai báo tường

minh để bắt đầu và kết thúc một giao tác. Giả sử chúng ta có một thủ tục có tên là

ChuyenKhoan (chuyển khoản). Thủ tục này có nhiệm vụ chuyển một khoản tiền từ tài

khoản này sang tài khoản khác. Các bước nó cần phải thực hiện bao gồm kiểm tra tài khoản

người chuyển, rút tiển cần chuyển từ tài khoản người chuyển, sau đó thêm số tiền này vào

tài khoản người nhận.

Rõ ràng, tất cả các bước đó cần phải được hoàn tất thành công và cố định, hoặc là

không bước nào trong chúng được cố định để đảm bảo dữ liệu vẫn trong trạng thái nhất

quán trong CSDL. Để đảm bảo điều đó, chúng ta cần phải nhóm các lệnh thực thi các bước

đó thành một giao tác được khai báo tường minh. Nếu không nhóm các lệnh lại, thì chúng ta

có thể sẽ nhận được dữ liệu không nhất quán. Ví dụ, nếu kết nối mạng giữa máy khách và

máy chủ gặp sự cố vào thời điểm sau khi bước rút tiền từ tài khoản người chuyển được thực

33

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

thi thành công nhưng trước thời điểm thêm số tiền đó vào tài khoản người nhận, CSDL sẽ

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

tồn tại với số tiền trong tài khoản người chuyển đã bị trừ nhưng không có số tiền nào được

thêm vào tài khoản người nhận. Trong trường hợp này, HQT CSDL cố định mỗi lệnh ngay

lập tức sau khi nó hoàn thành, và bỏ lại thủ tục Chuyen_Khoan đang được thực thi dang dở

vào thời điểm kết nối mạng bị mất. Nhưng nếu các bước đó được thực thi trong khuôn khổ

một giao tác được khai báo tường minh, thì HQT CSDL sẽ tự động rollback các bước đã

hoàn thành cho đến thời điểm kết nối mạng bị mất, và người dùng có thể kết nối đến HQT

CSDL lại và thực thi lại thủ tục ChuyenKhoan.

Trong các giao tác được khai báo tường minh, người dùng không cần phải đưa ra

lệnh ROLLBACK TRAN[SACTION], vì HQT CSDL sẽ tự động rollback giao tác trong

trường hợp sự cố. Người dùng chỉ cần đưa ra lệnh BEGIN TRAN[SACTION] khi bắt đầu

và COMMIT TRAN[SACTION] sau khi kết thúc các bước sửa đổi dữ liệu. Với mỗi lệnh

tường minh BEGIN TRAN phải có một lênh COMMIT tường minh tương ứng. Tuy nhiên,

người dùng vẫn có thể đưa ra lệnh ROLLBACK TRAN[SACTION] nếu muốn.

II.2.3.3 Giao tác giầm (Implicit )

Trong chế độ Implicit, một giao tác tự động được bắt đầu một khi có các lệnh thao

tác trên CSDL được đưa ra và sẽ kéo dài cho tới khi kết thúc tường minh bằng lệnh

COMMIT hoặc là ROLLBACK. Nếu không có lệnh kết thúc nào được đưa ra, giao tác sẽ tự

động ROLLBACK khi người dùng ngắt kết nối với HQT CSDL. Thường thì các lệnh sau

đây bắt đầu một giao tác giầm: ALTER TABLE, CREATE, DELETE, DROP, FETCH,

GRANT, INSERT, OPEN, REVOKE, SELECT, TRUNCATE TABLE (SQL Server),

UPDATE.

Khi xuất hiện một trong các lệnh vừa nêu, một giao tác giầm được bắt đầu và nó sẽ

kéo dài cho đến khi nó được cố định tường minh hoặc ROLLBACK tường minh, thậm chí

nếu có nhiều lệnh khác được thực thi trong giao tác. Sau khi giao tác được kết thúc tường

minh, lần tới, khi xuất hiện một trong các lệnh trên thì một giao tác giầm lại được bắt đầu.

Quá trình này tiếp diễn cho đến khi nào chế độ Implicit được tắt.

Chế độ này rất hữu dụng nếu người dùng chạy một script để thực hiện các sửa đổi dữ

liệu, và các sửa đổi đó cần phải được bảo vệ bên trong một giao tác. Người dùng có thể bật

chế độ này trước khi chạy một script, nếu cần, và sau đó tắt chế độ này ở cuối script. Để

tránh các vấn đề tương tranh (concurency), tắt chế độ này sau khi thực hiện các sửa đổi dữ

34

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

liệu và trước khi duyệt qua dữ liệu. Nếu lệnh kế tiếp sau COMMIT là lệnh SELECT, nó sẽ

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

bắt đầu một giao tác mới trong chế độ Implicit, và các nguồn của hệ thống sẽ không được

giải phóng cho đến khi giao tác được kết thúc.

II.2.3.4 Giao tác tự phục hồi (Auto rollback)

Như đã biết, một rollback có thể gặp trong một trong hai trường hợp sau: rollback tự

động bởi HQT CSDL, và rollback theo lệnh ROLLBACK TRAN được lập trình bởi người

dùng. Trong mọi trường hợp, HQT CSDL sẽ tự rollback giao tác cho người dùng. Nhưng để

đạt được trạng thái nhất quán luận lý dữ liệu trong chương trình, người dùng cần phải gọi

tường minh lệnh ROLLBACK TRAN khi cần.

Automatic Rollbacks

Như đã nói ở trên, nếu một giao tác thất bại trong thực thi vì một lỗi nào đó, ví dụ

như mất kết nối mạng trong khi giao tác đang được thực thi, hoặc sự cố gặp phải trong

chương trình máy trạm hoặc máy trạm, HQT CSDL sẽ tự động rollback giao tác. Rollback

sẽ làm ngược lại tất cả những sửa đổi dữ liệu mà giao tác đã thực hiện và giải phóng tất cả

mọi nguồn (dữ liệu, nguồn máy,…) mà giao tác sử dụng.

Nếu một lệnh nào đó gây ra một lỗi trong quá trình chạy chương trình, ví dụ kiểm tra

ràng buộc hoặc một luật nào đó cho kết quả sai, thì một cách mặc định, HQT CSDL sẽ tự

động rollback chỉ riêng lệnh đã gây ra lỗi. Thường thì trong các HQT CSDL đều có công cụ

để thay đổi hành vi này. Ví dụ trong SQL Server là SET XACT_ABORT thành ON hoặc

OFF. Nếu ON, HQT CSDL sẽ tự động rollback cả giao tác mà trong đó có lệnh đã gây ra lỗi

khi thực thi, chứ không chỉ riêng lẽ một lệnh. Kỹ thuật này rất hữu ích khi người dùng

không muốn các lệnh còn lại được thực thi và để lại kết quả trong CSDL một khi một lệnh

nào đó trong giao tác gây ra lỗi khi thực thi. Ví dụ, có thể lệnh kiểm tra ràng buộc về khoá

ngoài cho kết quả FALSE, và khi đó, thường người dùng mong muốn các lệnh còn lại cũng

bị rollback. Chế độ mặc định của XACT_ABORT được thiết đặt là OFF.

HQT CSDL cũng có thể dùng Automatic Rollbacks trong quá trình khôi phục hệ

thống sau sự cố. Ví dụ, điện bị mất đột ngột trong khi các giao tác đang được thực thi và hệ

thống khởi động lại, HQT CSDL sẽ tự động thực hiện quá trình khôi phục hệ thống. HQT

CSDL sẽ đọc thông tin từ nhật ký và thực thi lại các giao tác đã hoàn tất nhưng kết quả chưa

được cố định trong bộ nhớ ngoài, và rollback tất cả các giao tác chưa được hoàn tất khi xảy

ra sự cố mất điện.

35

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

Rollbacks được lập trình bởi người dùng

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Trong phần giao tác được bắt đầu tường minh chúng ta đã nhắc tới khả năng người

dùng trực tiếp đưa ra lệnh ROLLBACK. Lệnh ROLLBACK sẽ chấm dứt ngay lập tức việc

thực thi giao tác và làm ngược lại tất cả những thay đổi đã được làm bởi giao tác. Nếu người

dùng ra lệnh ROLLBACK ở khoảng giữa của giao tác, thì các lệnh còn lại trong phần còn

lại của giao tác sẽ bị bỏ qua. Nếu giao tác là một thủ tục, và lệnh ROLLBACK được thực thi

bên trong thủ tục, thì thủ tục sẽ bị rollback và quá trình xử lý sẽ tiếp diễn ở lệnh kế tiếp ngay

sau lệnh gọi thủ tục đó trong lô lệnh (batch).

Một giao tác không thể được rollback sau khi nó đã được cố định thực sự (trong

trường hợp giao tác lồng, các giao tác bên trong có thể chưa được cố định, dù lệnh commit

đã được gọi, cho đến khi giao tác bên ngoài cùng được cố định). Để rollback tường minh

một giao tác giản đơn (không lồng), lệnh ROLLBACK phải được gọi trước lệnh COMMIT.

Trong trường hợp giao tác lồng, một khi giao tác ngoài cùng được cố định (tất nhiên các

giao tác bên trong cũng được cố định), không một giao tác nào có thể bị rollback. Gọi lệnh

ROLLBACK trong trường hợp đó là sai. Như đã nói ở trên, không thể rollback chỉ mỗi giao

tác bên trong; thay vào đó, tất cả giao tác bên trong và ngoài cùng đều bị rollback. Cũng có

một cách để rollback một giao tác nào đó, và như thế, cách này cho phép lưu lại những sửa

đổi đến một điểm trong số các điểm được gọi là điểm lưu giữ - savepoints.

Savepoints

Có thể bỏ qua việc rollback nguyên cả một giao tác bằng cách dùng các điểm lưu giữ

để rollback đến một điểm nhất định nào đó trong giao tác. Điều đó rõ ràng là có lợi hơn so

với việc quay lại từ đầu giao tác, nếu không cần thiết. Tất cả những sửa đổi được thực hiện

cho đến điểm lưu giữ sẽ được cố định trong bộ nhớ ngoài và sẽ không bị rollback, còn

những lệnh được thực thi sau điểm lưu giữ cho đến khi lệnh ROLLBACK được gọi (tự động

hoặc tường minh) cùng với điểm lưu giữ được chỉ ra sẽ bị rollback. Các lệnh tiếp theo sau

lệnh ROLLBACK trong trường hợp này sẽ được tiếp tục thực thi. Nếu sau đó người dùng

rollback giao tác mà không chỉ ra điểm lưu giữ, thì tất cả những thay đổi bởi giao tác cũng

sẽ bị làm ngược lại như thường – nguyên cả giao tác sẽ bị rollback.

Để rollback lại một điểm lưu giữ nào đó, người dùng cần phải khai báo nó trong giao

tác trước khi gọi lệnh ROLLBACK. Trong SQL Server sẽ là:

SAVE TRAN[SACTION] {tên_điểm_lưu_giữ | @biến_tên_điểm_lưu_giữ} Để rollback về một điểm lưu giữ nào đó, cần phải gọi lệnh ROLLBACK và trong đó

36

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

phải chỉ tên của điểm lưu giữ:

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

ROLLBACK TRAN tên_điểm_lưu_giữ

II.2.3.5 Giao tác lồng (Nested Transaction)

II.2.3.5.1 Khái niệm

Các HQT CSDL hiện đại, ví dụ Oracle và SQL Server, cho phép tạo ra các giao tác

lồng – giao tác bên trong giao tác.

II.2.3.5.2 Các quy tắc

Với các giao tác lồng, người dùng cần phải cố định tường minh mỗi giao tác bên

trong để HQT CSDL biết được một giao tác bên trong đã hoàn tất và HQT CSDL sẽ giải

phóng nguồn lực hệ thống được sử dụng bởi giao tác đó một khi giao tác bên ngoài (chứa

các giao tác bên trong) được cố định (SQL Server). Nếu các nguồn bị phong toả, thì các

người dùng khác không thể truy cập chúng. Mặc dù phải đưa ra tường minh một lệnh

COMMIT cho mỗi giao tác bên trong, nhưng HQT CSDL vẫn không cố định chúng một

cách thực sự cho đến khi giao tác ngoài cùng hoàn tất thành công và được cố định; và ở thời

điểm đó, HQT CSDL sẽ giải phóng tất cả các nguồn được sử dụng bởi các giao tác bên

trong và giao tác ngoài cùng. Nếu giao tác ngoài cùng không được cố định, không một giao

tác bên trong nào được cố định, và cả giao tác bên ngoài và tất cả giao tác bên trong sẽ bị

rollback. Nếu giao tác ngoài cùng được cố định, thì tất cả các giao tác bên trong sẽ được cố

định. Nói cách khác, về cơ bản HQT CSDL sẽ bỏ qua tất cả các lệnh COMMIT bên trong

các giao tác lồng bên trong, và “tưởng tượng” rằng các giao tác bên trong không cố định, và

thay vào đó là chờ sự cố định hoặc rollback cuối cùng của giao tác bên ngoài cùng để xác

định trạng thái sự hoàn tất của tất cả các giao tác lồng bên trong.

Cũng vậy, trong các giao tác lồng, nếu lệnh ROLLBACK được thực thi bên trong

giao tác bên ngoài hoặc là trong bất kỳ một giao tác bên trong nào, thì tất cả các giao tác kể

cả bên trong và bên ngoài sẽ bị rollback. Và thường thì HQT CSDL không cho phép chỉ ra

tên cụ thể của một giao tác nào đó trong giao tác lồng khi người dùng ra lệnh rollback tường

minh trong giao tác lồng.

Ta có thể đưa ví dụ giao tác lồng trên cơ sở ví dụ ở trên. Giả sử cả thủ tục

ChuyenKhoan là một giao tác – giao tác ngoài cùng, hai giao dịch rút tiền (tất nhiên, trước

tiên phải kiểm tra xem có đủ số tiền trong tài khoản hay không, tài khoản người nhận có

37

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

đúng hay không) từ tài khoản người chuyển và thêm số tiền đó vào tài khoản người nhận là

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

hai giao tác lồng bên trong. Tất nhiên, cả hai giao tác đó được bắt đầu bởi lệnh BEGIN

TRAN[SACTION] và kết thúc bởi lệnh COMMIT [TRAN[SACTION], WORK].

Đến đây người đọc có thể đặt câu hỏi: Vậy giao tác lồng có tác dụng gì? Đơn giản ta

chỉ cần commit hoặc rollback giao tác ngoài là xong. Thực tế, giao tác lồng được sử dụng

nhằm mục đích hỗ trợ (support) các hàm lưu trữ có thể được gọi hoặc là từ một tiến trình

bên trong một giao tác, hoặc là từ các tiến trình không có một giao tác có hiệu lực nào cả. Ví

dụ sau đây trên SQL Server sẽ cho ta thấy mục đích chính của giao tác lồng.

Hàm lưu trữ HamGiaotac cưỡng chế các giao tác bên trong nó (của nó) không quan

tâm đến chế độ giao tác của các tiến trình gọi nó. Nếu HamGiaotac được gọi khi giao tác

đang có hiệu lực, các giao tác lồng bên trong HamGiaotac chắc chắn sẽ bị bỏ qua, và các

lệnh INSERT, DELETE, UPDATE sẽ được cố định hoặc rollback tuỳ thuộc vào hành động

cuối cùng cho giao tác bên ngoài. Nếu hàm lưu trữ HamGiaotac được gọi bởi một tiến trình

không nằm trong một giao tác ngoài nào cả, thì lệnh COMMIT TRAN[SACTION] ở cuối

hàm lưu trữ HamGiaotac sẽ cố định các thay đổi CSDL do các lệnh bên trong nó.

SET QUOTED_IDENTIFIER OFF;

GO

SET NOCOUNT OFF;

GO

CREATE PROCEDURE HamGiaotac @PriKey INT, @HoTen CHAR(50), @Refkey

INT AS

BEGIN TRANSACTION BenTrongHam;

DELETE FROM NhanVien WHERE nv_id = @PriKey;

INSERT INTO NhanVien VALUES (@PriKey, @HoTen, @Refkey);

UPDATE NhanVien SET bp_id = 100 WHERE …;

COMMIT TRANSACTION BenTrongHam;

GO

/* Bắt đầu một giao tác và gọi hàm */

BEGIN TRANSACTION BenNgoaiHam;

GO

EXECUTE HamGiaotac 100, 'Nguyen Van X', 3;

38

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

GO

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

/*Rollback giao tác bên ngoài*/

ROLLBACK TRANSACTION BenNgoaiHam;

GO

EXECUTE HamGiaotac 200, 'Nguyen Van Y', 3;

GO

/* Lệnh SELECT sau đây sẽ cho kết quả không chứa dòng có nv_id = 100 với họ tên

cũ chứ không phải ‘Nguyen Van X’, nhưng chứa dòng có nv_id = 200 với họ tên là

'Nguyen Van Y'*/

SELECT * FROM NhanVien;

GO

II.2.3.5.3 Biến @@trancount trong HQT CSDL SQL Server

Mặc dù HQT CSDL thực tế bỏ qua lệnh COMMIT cho giao tác lồng bên trong và

thực tế không cố định giao tác lồng bên trong cho đến khi nó gặp lệnh COMMIT giao tác

ngoài cùng, nhưng nó cập nhật một biến hệ thống gọi là @@TRANCOUNT cho mỗi lần

gặp lệnh COMMIT. Con số TRANCOUNT thể hiện số giao tác đang đ ược thực thi (tích cực

– active) của mỗi kết nối của người dùng. Khi không có giao tác nào tích cực,

@@TRANCOUNT sẽ mang giá trị 0. Và như thế, cứ mỗi một giao tác được bắt đầu BEGIN

TRAN, biến @@TRANCOUNT tăng lên một đơn vị. Cứ mỗi giao tác được cố định,

@@TRANCOUNT giảm một đơn vị. Tuy nhiên, mỗi khi gặp lệnh ROLLBACK, dù là của

giao tác ngoài cùng hay là của bất kỳ giao tác bên trong nào, @@TRANCOUNT sẽ có giá

trị 0. Nếu giá trị của @@TRANCOUNT bằng 0 v à người dùng đưa ra lệnh COMMIT thì hệ

thống sẽ tạo ra một lỗi.

II.2.4 Ràng buộc tính toàn vẹn CSDL

Tính nhất quán (C) của giao thức được xác định dựa trên sự hiện diện của khái

niệm tính nhất quán của CSDL.

Định nghĩa 2. Ràng buộc tính nhất quán là một khẳng định nào đó mà nó có thể

đúng hoặc sai phụ thuộc vào trạng thái của CSDL.

Ví dụ về ràng buộc tính toàn vẹn có thể là những khẳng định sau đây:

39

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

Ví dụ 2. độ tuổi của nhân viên phải nằm trong khoảng từ 18 đến 65 tuổi.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Ví dụ 3. Mỗi một sinh viên phải có một từ định danh ID không lặp lại.

Ví dụ 4. Mỗi giảng viên chỉ có thể là giảng viên cơ hữu của một trường và từ định danh của

trường đó được ghi trong bản ghi về giảng viên.

Ví dụ 5. Tổng thành tiền của một hoá đơn phải bằng tổng các kết quả phép nhân

số lượng cho đơn giá của tất cả các mặt hàng có trong hoá hơn.

Từ những ví dụ trên dễ dàng nhìn thấy rằng một vài trong số các ràng buộc toàn

vẹn dữ liệu của mô hình dữ liệu quan hệ (xem phần …). Ví dụ 3 cho thấy ràng buộc tạo nên

tính toàn vẹn của thực thể. Ví dụ 4 cho thấy ràng buộc tạo nên tính toàn vẹn liên kết. Các

ràng buộc còn lại có thể nói rằng tương đối tuỳ nghi, ví dụ 2 và 5. Bất kỳ ràng buộc toàn vẹn

nào cũng là khái niệm mang tính ngữ nghĩa, nghĩa là tồn tại như là những hệ quả của các

tính chất đã được xác định cho các đối tượng của lĩnh vực ứng dụng và/hoặc sự tương tác

giữa chúng.

Định nghĩa 3. CSDL nằm trong trạng thái toàn vẹn nếu thoả mãn tất cả các ràng

buộc về tính toàn vẹn đã được định nhĩa cho CSDL.

Trong định nghĩa cần phải nhất mạnh rằng không nhất thiết phải thoả mãn tất cả

các ràng buộc của lĩnh vực ứng dụng, mà là tất cả các ràng buộc đã được định nghĩa trong

CSDL. Để đáp ứng yêu cầu đó HQT CSDL cần phải sở hữu các công cụ hiện đại để hổ trợ

các ràng buộc về tính toàn vẹn. Nếu một HQT CSDL nào đó không thể hiện tất cả các ràng

buộc cần thiết của lĩnh vực ứng dụng thì có thể CSDL sẽ nằm trong trạng thái toàn vẹn

nhưng chỉ là trên quan điểm của HQT CSDL, còn trên quan điểm của người dùng thì trạng

thái toàn vẹn đó không đúng.

Như vậy, tính toàn vẹn của CSDL cũng chỉ là tính chất mang tính hình thức của

CSDL. CSDL không hiểu ý nghĩa của các dữ liệu được lưu trữ trong nó. Tất cả tổ hợp các

ràng buộc về tính toàn vẹn là ý nghĩa của dữ liệu đối với HQT CSDL. Nếu tất cả các ràng

buộc tính toàn vẹn được thoả mãn thì HQT CSDL cho rằng dữ liệu là đúng, là hợp lệ.

Như vậy với khái niệm toàn vẹn CSDL sẽ xuật hiện khái niệm phản ứng của hệ

thống đối với thử nghiệm phá huỷ tính toàn vẹn. Hệ thống không những phải kiểm tra các

ràng buộc có bị phá huỷ hay không trong quá trình thực hiện các thao tác dữ liệu khác nhau,

mà còn phải phản ứng một cách đúng mực nếu chúng dẫn đến tính toàn vẹn bị phá huỷ. Có

hai loại phản ứng với các thử nghiệm phá huỷ tính toàn vẹn:

40

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

1. Từ chối thực hiện thao tác “không hợp pháp”;

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

2. Thực hiện một loạt các hành động điều chỉnh (điều hoà - компенсирующих).

Ví dụ, nếu hệ thống biết rằng trường “độ tuổi nhân viên” phải là một số nguyên

và phải nằm trong khoảng từ 18 đến 65, thì hệ thống sẽ từ chối thử nghiệm cho vào giá trị

độ tuổi 66. Trong khi đó có thể tạo ra một thông báo nào đó cho người dùng.

Ngược lại, trong trường hợp ví dụ 1, hệ thống cho phép thêm vào một bản ghi

mới về nhân viên mới vào bảng NHANVIEN, mà rõ ràng nó dẫn đến tính toàn vẹn của

CSDL bị phá huỷ, nhưng HQT CSDL tự động có hành động điều chỉnh bù vào bằng cách

thay đổi giá trị của trường nv_soluong trong bảng BOPHAN.

Công việc của hệ thống trong việc kiểm tra các ràng buộc có thể thể hiện qua hình

Thử nghiệm thực hiện thao tác (INSERT, UPDATE, DELETE)

Người dùng hoặc trình ứng dụng

HQT CSDL

Kiểm tra các ràng buộc

Các ràng buộc không bị phá huỷ

Thông báo cho người dùng

Ràng buộc bị phá huỷ

Thao tác được thực hiện

Thao tác bị từ chối

Thao tác được thực hiện, thực thi bổ sung các thao tác điều hoà

ảnh dưới đây:

Hình II.3 Kiểm tra các ràng buộc

Trong một vài trường hợp hệ thống có thể không thực hiện khâu kiểm tra sự phá

huỷ tính toàn vẹn mà thực hiện ngay các thao tác điều chỉnh. Rõ ràng, trong ví dụ 1 trong

quá trình thêm mới hoặc xoá một nhân viên không cần phải kiểm tra khả năng phá huỷ tính

toàn vẹn, vì kết quả đã biết trước – ràng buộc bị phá huỷ. Và như vậy chỉ cần thực hiện các

bước điều chỉnh sự phá huỷ tính toàn vẹn đó.

II.2.5 Phân loại ràng buộc tính toàn vẹn CSDL

41

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

Các ràng buộc tính toàn vẹn có thể phân loại bằng nhiều cách.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

II.2.5.1 Bằng các cách triển khai (realization)

Mỗi hệ thống sở hữu các công cụ của mình để hổ trợ các ràng buộc tính toàn vẹn.

Phân biệt hai phương pháp triển khai:

- Hỗ trợ ràng buộc toàn vẹn theo kiểu khai báo;

- Hỗ trợ ràng buộc toàn vẹn theo kiểu thủ tục.

Định nghĩa 4. Hỗ trợ ràng buộc toàn vẹn theo kiểu khai báo được bao hàm trong

sự xác định các ràng buộc bằng các công cụ của ngôn ngữ định nghĩa dữ liệu (DDL – Data

Definition Language). Thông thường các công cụ hỗ trợ tính toàn vẹn theo kiểu khai báo

(nếu chúng có trong HQT CSDL) định nghĩa các ràng buộc trên các giá trị của các miền giá

trị và các thuộc tính, tính toàn vẹn của các thực thể (các khoá tiềm năng của các qua hệ) và

tính toàn vẹn các liên kết (tính toàn vẹn của các khoá ngoại foreign keys). Các ràng buộc

theo kiểu khai báo có thể ứng dụng trong quá tr ình tạo dựng hoặc sửa đổi các bảng bằng các

công cụ ngôn ngữ DDL hoặc ở dưới dạng các điều chỉnh (ASSERTION) riêng lẽ.

Ví dụ, lệnh sau sẽ tạo ra bảng NHANVIEN và định nghĩa cho nó vài ràng buộc

tính toàn vẹn dữ liệu:

CREATE TABLE NHANVIEN

(nv_id INTEGER PRIMARY KEY,

Nv_hoten VARCHAR(50) NOT NULL,

bp_id REFERENCES BOPHAN(bp_id) ON UPDATE CASCADE ON DELETE

CASCADE);

Sau khi thực hiện lện bảng NHANVIEN sẽ được tạo ra cùng với các ràng buộc

tính toàn vẹn sau:

- trường nv_id sẽ là khoá ứng viên (chính) của quan hệ;

- trường nv_hoten không thể chứa các giá trị NULL;

- trường bp_id là đường chỉ dẫn ngoại đến bảng gốc (cha) BOPHAN, ngoài ra

khi bản ghi trong bảng BOPHAN được thay đổi hoặc xoá đi thì một cách tự động tương ứng

(cascade) các thay đổi tương ứng trong bảng con NHANVIEN phải được đưa vào.

Các công cụ hỗ trợ tính toàn vẹn theo kiểu khai báo được miêu tả chi tiết trong

chuẩn SQL và được nghiên cứu kỹ trong môn học CSDL.

Định nghĩa 5. Hỗ trợ ràng buộc tính toàn vẹn theo thủ tục được bao hàm trong

42

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

việc sử dụng các bẩy sự kiện (trigger) và các thủ tục (stored procedure).

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Không phải bất kỳ ràng buộc toàn vẹn nào cũng có thể triển khai bằng cách khai

báo. Ràng buộc “bp_soluong phải chứa giá trị là số lượng nhân viên thực tế làm việc trong

một bộ phận” trong ví dụ 1 là một ví dụ. Để thực thi ràng buộc đó cần phải xây dựng một

bẩy sự kiện tự động thực thi khi thêm một bản ghi mới, sửa đổi bản ghi hoặc xoá một bản

ghi từ quan hệ NHANVIEN, và nó sẽ thay đổi giá trị của trường bp_soluong một cách chính

xác. Ví dụ, khi thêm một bản ghi mới vào bảng NHANVIEN, bẩy sự kiện sẽ tăng giá trị

trường bp_soluong trong bảng BOPHAN lên một đơn vị, còn khi xoá một bản ghi – nó sẽ

giảm bớt một đơn vị. Cần chú ý rằng, khi thay đổi bản ghi trong bảng NHANVIEN thì có

thể cần đến các hành động phức tạp hơn, bởi vì sửa đổi bản ghi trong bảng NHANVIEN có

thể là chuyển một nhân viên từ bộ phận này sang bộ phận khác bằng cách thay đổi giá trị

trường bp_id. Trong trường hợp này cần phải tăng một đơn vị cho trường bp_soluong của

bộ phận mới và giảm một đơn vị đối với bộ phận cũ.

Ngoài ra cần phải bảo vệ trước các thay đổi không đúng đắn bản ghi của bảng

BOPHAN. Ví dụ, người dùng có thể sửa đổi thông tin về một bộ phận nhưng nhập vào

trường bp_soluong một giá trị không đúng. Để đề phòng các trường hợp tương tự cần phải

tạo ra một bẩy sự kiện tự động thực thi khi thêm vào hoặc sửa đổi trong bảng BOPHAN.

Bẩy sự kiện cho trường hợp xoá bản ghi từ bảng BOPHAN không cần vì đã có ràng buộc

tính toàn vẹn liên kết tự động cascade xoá tất cả các bản ghi liên quan từ bảng NHANVIEN

khi xoá bản ghi từ bảng BOPHAN.

Thực tế, sự hiện diện của các ràng buộc tính toàn vẹn (theo kiểu khai báo hay

theo kiểu thủ tục) luôn luôn dẫn đến việc tạo ra hoặc sử dụng một mã chương trình nào đó

dể thực thi ràng buộc đó. Sự khác nhau giữa hai kiểu là ở chỗ mã chương trình đó được lưu

trữ ở đâu và được tạo ra như thế nào.

Nếu ràng buộc tính toàn vẹn được triển khai dưới dạng các bẩy sự kiện thì mã

chương trình đó chính là thân của bẩy sự kiện. Nếu sử dụng ràng buộc tính toàn vẹn theo

kiểu khai báo thì có thể theo hai cách:

1. Khi khai báo ràng buộc mã nguồn của ràng buộc lưu giữ dưới dạng một đối

tượng của HQT CSDL, còn để triển khai ràng buộc các hàm bên trong (đã có sẵn) HQT

CSDL sẽ được dử dụng, và khi đó mã đó sẽ là một hàm bên trong (nội hàm?) nhân HQT

CSDL.

2. Khi khai báo ràng buộc HQT CSDL tự động tạo ra các bẩy sự kiện và chúng

43

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

sẽ thực hiện các hành động cụ thể để kiểm tra các ràng buộc.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Ví dụ sử dụng các hàm của nhân HQT CSDL vào việc kiểm tra ràng buộc kiểu

khai báo có thể là việc tự động kiểm tra tính độc nhất của các chỉ mục tương ứng với các

khoá ứng viên (chính) của quan hệ. Một ví dụ khác, có thể dẫn ra việc hỗ trợ tính toàn vẹn

liên kết bằng các công cụ HQT CSDL Oracle. Ràng buộc tính toàn vẹn liên kết trong Oracle

là những đối tượng CSDL lưu trữ định thức (формулировку) của ràng buộc đó. Kiểm tra

ràng buộc được thực hiện bởi các chức năng của nhân Oracle với đường dẫn đến các đối

tượng đó. Ràng buộc tính toàn vẹn trong trường hợp đó không được phép sửa đổi khác đi,

giống như sử dụng các toán tử khai báo để tạo ra và sử đổi các ràng buộc.

Ví dụ phát sinh ra các bẩy sự kiện mới để triển khai các ràng buộc theo kiểu khai

báo có thể là hệ thống Visual FoxPro. Bẩy sự kiện tự động được phát sinh trong quá trình

khai báo các ràng buộc tính toàn vẹn liên kết có thể xem được và thậm chí có thể thay đổi

chúng, để chúng có thể thực hiệm thêm những hoạt động bổ sung.

Nếu hệ thống không hổ trợ ràng buộc tính toàn vẹn liên kết theo kiểu khai báo và

cả bẩy sự kiện, thì mã chương trình dùng để theo dõi tính toàn vẹn CSDL phải được đặt

trong chương trình của người dùng. Điều đó rất gây khó khăn trong việc phát triển chương

trình và không bảo vệ trước các thử nghiệm của người dùng nhập thẳng các dữ liệu không

đúng vào CSDL. Đặc biệt phức tạp trong trường hợp CSDL phức tạp và số lượng các

chương trình khác nhau làm việc với CSDL đó. Chẳng hạn, có thể nhiều nhân viên thuộc

các bộ phận khác nhau của phòng đào tạo ở một trường đại học có thể truy cập và sửa đổi

dữ liệu trên CSDL của trường. Mỗi chương trình trong số đó phải chứa chính xác mã nguồn

chịu trách nhiệm duy trì tính toàn vẹn của CSDL. Trong trường hợp này, các nhà phát triển

phần mềm gặp khó khăn nhất. Họ phải thay đổi trong tất cả các chương trình cùng một mã

đó ở cùng một vị trí, biên dịch lại tất cả và sau đó lại cung cấp cho tất cả các người dùng

phiên bản phần mềm mới.

II.2.5.2 Phân loại ràng buộc tính toàn vẹn theo thời điểm kiểm tra

Theo thời điểm kiểm tra có thể phân làm hai loại:

− Ràng buộc được kiểm tra ngay lập tức

− Ràng buộc với sự kiểm tra được trì hoãn.

Định nghĩa 6. Ràng buộc được kiểm tra ngay lập tức là những ràng buộc được

44

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

kiểm tra ngay lập tức vào thời điểm thực hiện các thao tác có thể phá huỷ ràng buộc đó.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Ví dụ kiểm tra tính độc nhất của khoá ứng viên (chính) được thực hiện vào thời

điểm thêm một bản ghi mới vào bảng. Nếu ràng buộc bị vi phạm thì thao tác sẽ bị từ chối.

Còn giao tác có chứa thao tác vừ bị từ chối vì phá huỷ tính toàn vẹn của CSDL thông

thường cũng bị rollback.

Định nghĩa 7. Ràng buộc với thời điểm kiểm tra trì hoãn là ràng buộc được kiểm

tra vào thời điểm cố định giao tác bằng lệnh COMMIT WORK.

Bên trong giao tác, ràng buộc có thể không được kiểm tra. Nếu ở thời điểm cố

định giao tác phát hiện sự xâm phạm ràng buộc với thời điểm kiểm tra trì hoãn, thì giao tác

sẽ bị rollback. Ví dụ ràng buộc có thể không không kiểm tra ngay lập tức có thể là trường

hợp ví dụ 1. Điều đó có thể xảy ra vì giao tác thực hiện việc thêm một bản ghi vào bảng

NHANVIEN bao gồm ít nhất hai thao tác: thêm bản ghi về nhân viên mới vào bảng

NHANVIEN và sửa đổi một bản ghi trong bản BOPHAN. Rõ rang ràng buộc có thể không

đúng sau khi hoàn thành thao tác đầu tiên nhưng lại trở nên đúng sau thao tác thứ hai.

II.2.5.3 Phân loại ràng buộc tính toàn vẹn theo không gian ứng dụng

Theo không gian ứng dụng ràng buộc có thể được phân ra theo các nhóm sau:

II.2.5.3.1 Ràng buộc Miền giá trị

Định nghĩa 8. Ràng buộc tính toàn vẹn miền giá trị là những ràng buộc dựa trên

những giá trị được cho phép của miền giá trị.

Thực tế các ràng buộc miền giá trị nhất thiết phải là một phần định nghĩa của

miền giá trị (xem định nghĩa miền giá trị…). Ví dụ, điều kiện “Độ tuổi của nhân viên không

được nhỏ hơn 18 và không lớn hơn 65” có thể là ràng buộc miền giá trị “Độ tuổi nhân viên”.

Kiểm tra ràng buộc. Ràng buộc miền giá trị không tự kiểm tra. Nếu như trên miền

giá trị nào đó được khai báo một thuộc tính của quan hệ thì các ràng buộc của miền giá trị tự

động trở thành các ràng buộc cho thuộc tính đó.

II.2.5.3.2 Ràng buộc thuộc tính

Định nghĩa 9. Ràng buộc tính toàn vẹn của thuộc tính là những ràng buộc dựa

trên những giá trị cho phép đối với thuộc tính, hệ quả của việc thuộc tính đ ược khai báo trên

45

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

một miền giá trị nào đó.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Chính xác ràng buộc tính toàn vẹn của thuộc tính trùng với ràng buộc tính toàn

vẹn của miền giá trị tương ứng, chỉ khác nhau ở một điểm, là ràng buộc tính toàn vẹn của

thuộc tính được kiểm tra.

Nếu như logic của lĩnh vực ứng dụng đòi hỏi rằng các giá trị của thuộc tính cần

phải thoả mãn những ràng buộc bổ sung ngoài các ràng buộc miền giá trị, thì những ràng

buộc này được xếp vào chủng loại tiếp theo.

Kiểm tra ràng buộc. Ngoài miền giá trị mà trên đó thuộc tính đã được khai báo,

ràng buộc thuộc tính không phụ thuộc vào bất cứ đối tượng nào khác của CSDL. Vì vậy

không có sự thay đổi nào của các đối tượng khác có thể ảnh hưởng đến tính đúng đắn của

ràng buộc thuộc tính.

II.2.5.3.3 Ràng buộc bản ghi

Định nghĩa 10. Ràng buộc tính toàn vẹn bản ghi là những ràng buộc dựa trên

những giá trị cho phép của từng bản ghi của quan hệ, và không phải là ràng buộc tính toàn

vẹn của thuộc tính.

Yêu cầu ràng buộc đến từng bản ghi khác nhau của quan hệ có nghĩa l à không đòi

hỏi bất cứ thông tin gì về các bản ghi khác của quan hệ cho việc ràng buộc.

Ví dụ 6. Ràng buộc cho miền giá trị độ tuổi của người đi học là từ 4 đến 65.

Nhưng thuộc tính “tuoi_mau_giao” trong bảng “hoc_sinh_mau_giao” được đinh nghĩa theo

miền giá trị đó nhưng có thể có thêm ràng buộc nhỏ hơn 7.

Nhận xét. Chúng ta thấy rằng có vài khả năng tối ưu hoá. Một cách chính thức,

khi sửa đổi giá trị của thuộc tính hiện tại thì cần phải kiểm tra hai ràng buộc: ràng buộc

thuộc tính và ràng buộc bản ghi. Nhưng trong trường hợp này ràng buộc bản ghi mạnh hơn

và bao hàm cả ràng buộc thuộc tính. Rõ ràng DBMS có thể nhận biết các trường hợp như

thế và giảm thiểu các công việc thừa, không nhất thiết.

Ví dụ 7. Có thể tạo thêm một ràng buộc bản ghi cho bảng NHANVIEN: Nếu

trường chức_vụ có giá trị “giám đốc” thì trường mức_lương phải có giá trị lớn hơn

5.000.000. Ràng buộc này kết nối hai thuộc tính một bản ghi.

Ví dụ 8. Trong hoá đơn mua bán hàng có thể thiết đặt mối liên quan qua lại của

các thuộc tính – thành_tiền = số_lượng*đơn_giá. Mối quan hệ đó gắn chặt ba thuộc tính

46

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

thành_tiền, số_lượng và đơn_giá với nhau.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Ví dụ này gây cảm giác không thực tế, bởi vì thành_tiền rõ ràng là một thuộc tính

dư thừa, giá trị của nó chỉ đơn giản được tính từ giá trị của các thuộc tính khác. Vì thế, cảm

giác rằng tốt hơn nên lưu trữ chỉ hai thuộc tính gốc là số_lượng và đơn_giá. Còn thành_tiền

sẽ được tính trong thời gian thực thi truy vấn (select số_lượng*đơn_giá as thành_tiền) khi

nào cần. Và chính lý thuyết đại số quan hệ đòi hỏi như vậy để đạt được tính dư thừa nhỏ

nhất. Trong thực tế, tình huống có thể phức tạp hơn nhiều. Ví dụ, mỗi dòng trong một hoá

đơn thực tế có thể chứa các thông tin:

Tên thuộc Mô tả thuộc tính Thuộc tính Công thức để tính thuộc

tính tính thứ sinh gốc?

Đúng Mặt_hàng Tên hàng hoá

Đúng Số lượng N

Đúng Đơn giá P1

Thành tiền theo đơn giá S1 = N*P1 S1

Percent % phụ thu cho mỗi đơn vị hàng Đúng

phụ thu cho mỗi đơn vị hàng P2 = P1*Percent/100 P2

Tổng phụ thu cho mỗi mặt S2 = N*P2 S2

hàng

Đơn giá của đơn vị hàng có P3 = P1+P2 P3

tính phụ thu

Thành tiền cho mặt hàng có S3 = N*P3 S3

tính phụ thu

VAT % VAT Đúng

Tổng VAT cho mỗi đơn vị P4 = P2*NDS/100 P4

hàng

Tổng VAT cho mặt hàng S4 = N*P4 S4

Thành tiền đơn vị hàng có tính P5 = P3+P4 P5

phụ thu và VAT

47

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

Thành tiền mặt hàng có tính S5 = N*P5 S5

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

phụ thu và VAT

Bảng II.1 Các thuộc tính của hàng hoá Các thuộc tính gốc đòi hỏi phải nhập dữ liệu bao gồm 5 thuộc tính. Các thuộc tính

còn lại được tính ra trên cơ sở các thuộc tính gốc. Có cần thiết phải lưu trữ trong CSDL chỉ

các thuộc tính gốc, hay là tất cả các thuộc tính và tính lại giá trị của các thuộc tính thứ sinh

mỗi khi có thay đổi trong các thuộc tính gốc?

Giải pháp 1. Giả sử trong CSDL chỉ lưu trữ các thuộc tính gốc.

 Cấu trúc của quan hệ thoàn toàn không dư thừa.

 Không cần thiết các mã chương trình phụ trợ để đảm bảo tính toàn vẹn của

Các ưu điểm:

 Tiết kiệm dung lượng bộ nhớ.

 Giảm lưu lượng qua mạng máy tính.

bản ghi.

 Trong công tác kế toán, theo nguyên tắc không phải các thuộc tính gốc được

Các hạn chế:

sử dụng để tạo các quyết toán, mà là các thuộc tính thứ sinh. Chính một công thức sẽ được

sử dụng ở nhiều nơi, và như thế cho tất cả các công thức. Và như vậy, tất cả các thao tác

chọn lựa dữ liệu sẽ chứa đoạn mã chương trình tương ứng với chính các công thức đó. Nếu

việc cùng một mục đích, đòi hỏi phải theo một công thức, nhưng được thực hiện từ nhiều

nguồn và ở nhiều nơi khác nhau, thì có thể xảy ra sai sót kiểu có nơi nào đó sử dụng không

 Khi các quy định và luật lệ thay đổi nó thường kéo theo sự thay đổi các luận lý

đúng công thức.

tính toán trong công tác kế toán, và mỗi lúc như thế cần phải thay đổi chính một đoạn mã

chương trình tương ứng tại tất cả chỗ làm việc, những nơi mà chúng đang được sử dụng.

 Nếu xuất hiện một truy vấn không theo quy tắc (chưa có trong hệ thống), thì

Điều đó rõ ràng là rất gây cản trở cho quá trình thực hiện các thay đổi.

người truy vấn phải nhớ tất cả các công thức cần thiết.

Giải pháp 2. Giả sử trong quan hệ tất cả các thuộc tính được lưu trữ, kể cả các

thuộc tính thứ sinh.

48

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

Các ưu điểm:

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

 Mã chương trình (có chứa các công thức để tính các thuộc tính thứ sinh) duy trì tính

toàn vẹn của bản ghi được lưu trữ ở một nơi, ví dụ, trong bẫy sự kiện gắn kết với

 Khi các luận lý tính toán thay đổi, các thay đổi trong các công thức chỉ cần đ ược thực

quan hệ hiện tại.

 Các truy vấn đến HQT CSDL chứa ít công thức hơn, và vì thế đơn giản hơn.

 Dễ đưa ra các truy vấn không quy tắc hơn, bởi vì trong truy vấn chỉ sử dụng các

thi tại một chỗ, tương ứng, trong bẫy sự kiện.

thuộc tính, và các thuộc tính đó đều có một ý nghĩa nhất định đối với kế toán viên.

 Một khi các luận lý tính toán thay đổi, cần thiết phải thay đổi cấu trúc của quan hệ, ví

Các hạn chế:

dụ như thêm thuộc tính mới hoặc xoá thuộc tính, hoặc là cách tính toánh các thuộc

tính thứ sinh. Thay đổi cấu trúc của quan hệ tr ên một hệ thống đang hoạt động là một

 Cấu trúc của quan hệ trở nên phức tạp và không rõ ràng.

 Kích thước của CSDL có thể tăng đáng kể.

 Băng thông mạng cần thiết cho hệ thống có thể tăng lên rất nhiều.

nhiệm vụ có thể nói là rất khó khăn.

Như đã thấy, cả hai giải pháp đều có những ưu điểm và hạn chế của mình. Quan

trọng là mã chương trình chứa các công thức không bị tổn hại hoặc mất mát trong bất kỳ

giải pháp nào. Thực tế, ví dụ đã đưa ra quá đơn giản, bởi vì tất cả các quyết toán trong kế

toán thường đòi hỏi phải chính xác đến đơn vị đồng hoặc nhỏ hơn. Cũng một công thức về

mặt toán học nhưng thực hiện khác nhau thì cho kết quả khác nhau. Điều này đặc biệt đúng

trong các trường hợp làm tròn. Ví dụ, S4 = N* ROUND(P2*NDS/100) và S4 =

ROUND(N*P2*NDS/100). Với mỗi một đơn vị thì sai số có lẽ là không nghiêm trọng,

nhưng với một số lượng lớn các đơn vị và như thế những sai số nhỏ đó được tích cóp lại

thành một sai số khổng lồ. Và như thế, cùng sử dụng một công thức nhưng bằng các cách

tính khác nhau ở các nơi khác nhau (nhân viên, doanh nghiệp, cơ quan thuế,…) có thể sẽ

cho những kết quá rất khác nhau.

Các giải pháp khác. Cũng có thể sử dụng các cách khác để giải quyết vấn đề

nhằm mục đích đơn giản hoá việc phát triển phần mềm và duy trì hệ thống trong trường hợp

này. Ví dụ, trong quan hệ chỉ lưu trữ các thuộc tính gốc, một khung nhìn (View) sẽ được sử

49

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

dụng cho các kế toán viên. Trong khung nhìn đó các thuộc tính thứ sinh được định nghĩa, và

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

đối với các kế toán viên nó là một bảng như trong trường hợp các thuộc tích cả gốc và thứ

sinh được lưu trữ trong quan hệ. Ngoài ra có thể tạo ra các thủ tục lưu trữ (stored

procedures) và các hàm cho CSDL.

Kiểm tra ràng buộc: Trước thời điểm kiểm tra ràng buộc tính toàn vẹn của bản

ghi cần phải kiểm tra ràng buộc cho các thuộc tính của bản ghi đó.

Các ràng buộc bản ghi là những ràng buộc kiểm tra ngay lập tức. Rõ ràng, ràng

buộc bản ghi không phụ thuộc vào bất kỳ đối tượng nào khác của CSDL ngoài các thuộc

tính của bản ghi đó. Vì vậy không có sự thay đổi nào ở các đối tượng khác có thể ảnh hưởng

đến tính đúng đắn (truth) của ràng buộc bản ghi.

II.2.5.3.4 Ràng buộc quan hệ

Định nghĩa 11. Ràng buộc tính toàn vẹn của quan hệ là những ràng buộc dựa

trên các giá trị cho phép của từng quan hệ, và không phải là ràng buộc tính toàn vẹn của

bản ghi.

Ràng buộc dựa trên các giá trị cho phép của từng quan hệ có nghĩa là không cần

bất cứ thông tin nào từ các quan hệ khác để kiểm tra ràng buộc tính toàn vẹn của một quan

hệ, kể cả các liên kết link đến các khoá ngoài của các bản ghi của quan hệ đó.

Ví dụ 9. Ràng buộc tính toàn vẹn của thực thể (xem phần?) được cho bởi khoá

ứng viên (chính) là ràng buộc của quan hệ, bởi vì cần thết phải có thông tin về tất cả các bản

ghi của quan hệ (chính xác hơn là những giá trị đã được cho của khoá ứng viên (chính)) để

kiểm tra ràng buộc đó.

Ví dụ 10. Các ràng buộc tính toàn vẹn được xác định bởi các phụ thuộc hàm và

các phụ thuộc đa nghĩa (đa giá trị) và các phụ thuộc nối (?) cũng là các ràng buộc quan hệ.

Ví dụ 11. Giả sử đối với trong bảng BOPHAN (ví dụ 1) cho thêm một ràng buộc

“trong mỗi bộ phận cần phải có ít nhất 2 nhân viên”. Ràng buộc đó có thể phát biểu như thế

này: số lượng bản ghi với giá trị trường bp_id trong bảng NHANVIEN không đ ược nhỏ hơn

2. Rõ ràng ràng buộc này chỉ áp dụng trong trường hợp xoá hoặc sửa đổi thông tin trong bản

NHANVIEN nếu xếp vào thể loại ràng buộc kiểm tra ngay lập tức.

Ví dụ 12. Ràng buộc được định nghĩa rằng “một bảng nào đó không được trống”

50

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

cũng là một ràng buộc tính toàn vẹn của quan hệ.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Kiểm tra ràng buộc: Trước khi kiểm tra ràng buộc tính toàn vẹn của quan hệ cần

phải tiến hành kiểm tra ràng buộc tính toàn vẹn của các bản ghi của quan hệ đó.

Ràng buộc tính toàn vẹn của quan hệ có thể là kiểm tra ngay lập tức cũng có thể

là ràng buộc với sự trì hoãn kiểm tra. Trong ví dụ 9, ràng buộc cho khoá ứng viên (chính) là

ràng buộc kiểm tra ngay lập tức. Ràng buộc được định nghĩa bở sự phụ thuộc hàm của các

thuộc tính cũng là ràng buộc kiểm tra ngay lập tức. Ràng buộc được định nghĩa bởi sự phụ

thuộc đa nghĩa hoặc phụ thuộc nối là những ràng buộc với kiểm tra trì hoãn. Rõ ràng các

ràng buộc đó đòi hỏi các bản ghi phải được thêm vào hoặc xoá đi theo từng nhóm (xem

chương 7?). Điều đó không thể thực hiện nếu như thực hiện kiểm tra ngay sau khi thêm

hoặc xoá từng bản ghi.

Ràng buộc trong ví dụ 11 cũng là ràng buộc kiểm tra ngay lập tức. Bởi vì sau khi

thêm, sửa đổi hoặc xoá một bản ghi cần phải kiểm tra xem ràng buộc có được thực thi hay

không? Nếu không thì giao tác bị rollback. Nhưng cũng không thể thêm vào bộ phận nào đó

chưa có nhân viên nào chỉ một nhân viên, mà cần phải thêm vào cùng lúc ít nhất 2 nhân viên

mới. Vì vậy nó đồng thời cũng là ràng buộc với sự kiểm tra trì hoãn.

Ràng buộc trong ví dụ 12 có ý nghĩa kiểm tra khi xoá một bản ghi từ quan hệ. Nó

có thể thuộc thể loại kiểm tra ngay lập tức hoặc ràng buộc với sự kiểm tra trì hoãn.

II.2.5.3.5 Ràng buộc CSDL

Định nghĩa 12. Ràng buộc tính toàn vẹn CSDL là những ràng buộc dựa trên

những giá trị của hai hay nhiều quan hệ liên quan với nhau, kể cả trường hợp quan hệ tự liên

quan đến bản thân.

Ví dụ 13. Ràng buộc tính toàn vẹn của liên kết (xem chương 3) được cho bởi khoá

ngoài của quan hệ là ràng buộc CSDL.

Ví dụ 14. Ràng buộc dựa trên bảng BOPHAN và NHANVIEN trong ví dụ 1 là

ràng buộc tính toàn vẹn CSDL vì nó đặt mối liên hệ giữa dữ liệu của các bảng khác nhau.

Kiểm tra ràng buộc. Trước khi kiểm tra ràng buộc tính toàn vẹn CSDL cần kiểm

tra ràng buộc tính toàn vẹn của các quan hệ.

Ràng buộc CSDL cũng có thể là kiểm tra ngay lập tức, cũng có thể là ràng buộc

51

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

kiểm tra trì hoãn.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Ràng buộc quan hệ được định nghĩa bởi ràng buộc khoá ngoài có thể là ràng buộc

kiểm tra ngay lập tức, cũng có thể là ràng buộc kiểm tra trì hoãn. Rõ ràng, trong trường hợp

đơn giản nhất, nếu bản ghi X quan hệ A phải liên kết đến bản ghi Y quan hệ B, thì có thể

tiến hành kiểm tra ràng buộc tính toàn vẹn liên kết ngay lập tức sau mỗi khi thêm mới, sửa

đổi hay xoá bất kỳ một bản ghi nào trong các bảng A hoặc B. Phức tạp hơn, có thể giả sử

rằng bản ghi X quan hệ A liên kết đến bản ghi Y quan hệ B và đồng thời đến lượt mình bản

ghi Y quan hệ B cũng liên kết đến bản ghi X quan hệ A (liên kết vòng). Dễ thấy rằng ngay

sau khi thêm bản ghi X vào quan hệ A tính toàn vẹn liên kết bị phá huỷ, vì bản ghi Y vẫn

chưa có trong quan hệ B. Kiểm tra ràng buộc tính toàn vẹn trong trường hợp này chỉ có thể

tiến hành sau khi hoàn thành giao tác bao hàm một chuỗi các thao tác:

− Thêm bản ghi X vào quan hệ A với liên kết NULL đến quan hệ B;

− thêm bản ghi Y vào quan hệ B với liên kết đến bản ghi X quan hệ A;

− Sửa đổi liên kết trong bản ghi X quan hệ A từ NULL thành liên kết đến bản ghi

Y quan hệ B.

Ràng buộc đã đưa ra trong ví dụ 1 chỉ có thể là ràng buộc với sự kiểm tra trì hoãn.

II.2.6 Triển khai ràng buộc tính toàn vẹn dạng định nghĩa bằng công cụ SQL

II.2.6.1 Các nguyên tắc chung trong triển khai ràng buộc bằng các công cụ SQL

Các ràng buộc tính toàn vẹn theo thủ tục được triển khai bằng các công cụ bẩy sự

kiện và thủ tục không được tính đến trong chuẩn SQL. Trong chuẩn SQL 92 ho àn toàn vắng

mặt khái niệm bẩy sự kiện, mặc dù bẩy sự kiện được triển khai trong tất cả các HQT CSDL

thương nghiệp (công nghiệp?) thể loại SQL. Như vậy, triển khai ràng buộc bằng các công

cụ một HQT CSDL cụ thể sở hữu tính mềm dẻo rất cao, tốt hơn là chỉ sử dụng các công cụ

SQL chuẩn.

Chuẩn SQL cho phép đưa ra các ràng buộc kiểu khai báo theo các phương pháp:

− giống như các ràng buộc miền giá trị,

− các ràng buộc trong khuôn khổ định nghĩa quan hệ,

− các ràng buộc được lưu trữ trong CSDL dưới dạng các điều chỉnh (assertion)

52

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

độc lập.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Cho phép cả ràng buộc kiểm tra ngay lập tức và ràng buộc trì hoãn kiểm tra. Chế

độ kiểm tra các ràng buộc trì hoãn kiểm tra có thể thay đổi bất cứ khi nào để ràng buộc được

kiểm tra:

1. Sau từng thao tác có thể làm thay đổi nội dung của bảng mà ràng buộc đó liên

quan đến.

2. Sau khi hoàn thành mỗi giao tác chứa các thao tác làm thay đổi nội dung các

bảng mà ràng buộc đó liên quan đến.

3. Ở mọi thời điểm trung gian nếu như người dùng khởi đầu sự kiểm tra.

Trong khi tạo ra ràng buộc có thể khai báo thể loại kiểm tra của ràng buộc – trì

hoãn (DEFERRED) hoặc không thể trì hoãn (NOT DEFERRED). Trong trường hợp thứ

nhất có thể đưa ra một thủ tục mặc định: kiểm tra ngay lập tức hay là kiểm tra sau khi kết

thúc giao thức. Như vậy có thể định nghĩa các ràng buộc trì hoãn nhưng có thể được kiểm

tra ngay lập tức theo mặc định. Trong mọi thời điểm có thể thay đổi chế độ kiểm tra của

ràng buộc thể loại này vào trì hoãn kiểm tra hoặc ngược lại, và có thể cho một ràng buộc

hoặc nhiều ràng buộc trì hoãn kiểm tra cùng lúc. Nếu như ràng buộc được định nghĩa được

định nghĩa theo kiểu không trì hoãn thì thể loại ràng buộc của nó không được thay đổi và nó

mãi mãi thuộc loại kiểm tra ngay lập tức.

Các phần tử của tính chất thủ tục vẫn có mặt trong chuẩn SQL d ưới dạng các thao

tác được thực thi theo các liên kết (referential triggered actions). Các thao tác đó xác định

những gì sẽ xảy ra khi thay đổi giá trị khoá “cha” mà một khoá ngoài nào đó liên kết đến.

Các thao tác đó có thể được đưa ra một cách độc lập cho các thao tác sửa đổi (ON

UPDATE) hoặc xoá (ON DELETE) bản ghi trong quan hệ cha (parent relation). Chuẩn SQL

định nghĩa 4 thể loại thao tác được thực thi với liên kết:

− CASCADE. Mọi thay đổi giá trị của khoá cha đều tự động đưa đến sự thay đổi

tương tự giá trị khoá ngoài liên quan. Xoá bản ghi trong bảng cha dẫn đến việc xoá các bản

ghi liên kết với nó trong bảng con.

− SET NULL. Tất cả các khoá ngoài liên kết đến khoá cha vừa được sửa đổi hoặc

xoá đều nhận giá trị NULL.

− SET DEFAULT. Tất cả các khoá ngoài liên kết đến khoá cha vừa được sửa đổi

hoặc xoá đều nhận giá trị mặc định cho các khoá đó.

− NO ACTION. Giá trị khoá ngoài không thay đổi. Nếu thao tác dẫn đến phá huỷ

53

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

tính toàn vẹn liên kết (xuất hiện liên kết “treo”) thì nó sẽ không được thực thi.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Dễ nhìn thấy rằng, thực tế các thao tác được thực hiện theo liên kết là những bẩy

sự kiện lồng bên trong của HQT CSDL. Các thao tác loại CASCADE, SET NULL và SET

DEFAULT là những thao tác điều chỉnh (bù) được gọi trong trường hợp phá huỷ tính toàn

vẹn liên kết.

II.2.6.2 Cú pháp ràng buộc theo chuẩn SQL

Khái niệm ràng buộc được sử dụng trong nhiều lệnh định nghĩa dữ liệu (DDL).

??? sự khác nhau giữa cột, bảng và thuộc tính, quan hệ???

Ràng_buộc_check::=

CHECK mệnh_đề_predicate

Giới_hạn_bảng ::=

[CONSTRAINT Tên_giới_hạn]

{

{PRIMARY KEY (Tên_cột.,..)}

| {UNIQUE (Tên_cột.,..)}

| {FOREIGN KEY (Tên_cột.,..) REFERENCES Tên_bảng [(Tên_cột.,..)]

[Đặc_tả_liên_kết]}

| { Giới_hạn check }

}

[Các_cột_của_giới_hạn]

Giới_hạn_cột::=

[CONSTRAINT Tên_giới_hạn]

{

{NOT NULL}

| {PRIMARY KEY}

| {UNIQUE}

| {REFERENCES Tên_bảng [(Tên_cột)] [Đặc_tả_liên_kết]}

| { Giới_hạn check }

}

54

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

[Các_cột_của_giới_hạn]

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Đặc_tả_liên_kết::=

[MATCH {FULL | PARTIAL}]

[ON UPDATE {CASCADE | SET NULL | SET DEFAULT | NO ACTION}]

[ON DELETE {CASCADE | SET NULL | SET DEFAULT | NO ACTION}]

Các_cột_của_giới_hạn::=

{DEFERRABLE [INITIALLY DEFERRED | INITIALLY IMMEDIATE]}

| {NOT DEFERRABLE}

Ràng buộc thể loại CHECK. Ràng buộc thể loại CHECK chứa các mệnh đề có thể

nhận các giá trị TRUE, FALSE và UNKNOWN (NULL). Ví dụ các mệnh đề dưới các dạng

khác nhau được dẫn ra trong chương 5 (…). Ràng buộc thể loại CHECK có thể được sử

dụng giống như một phần khai báo miền giá trị, bảng, cột bảng hoặc là một ràng buộc tính

toàn vẹn riêng lẽ − ASSERTION. Ràng buộc được cho là bị phá huỷ nếu như mệnh đề của

ràng buộc nhận giá trị FALSE.

Ví dụ 15. Ví dụ ràng buộc dạng CHECK:

CHECK (students.birthday IS NOT NULL) AND (students.surename IS NOT NULL)

Ràng buộc này khẳng định rằng ngày sinh và họ tên của sinh viên không thể bỏ

trống (nhận giá trị NULL).

Ví dụ 16. Ràng buộc CHECK exists(select * from DANHSACH) khẳng định rằng

danh sách không được trống (không có gì trong danh sách cả).

Ràng buộc bảng và ràng buộc cột. Ràng buộc bảng và ràng buộc cột là một phần

khai báo bảng và các cột tương ứng. Ràng buộc bảng có thể liên quan đến một vài cột của

bảng. Ràng buộc cột chỉ liên quan đến một cột của bảng. Bất cứ ràng buộc cột nào cũng có

thể khai báo giống như một ràng buộc bảng, nhưng không tồn tại chiều ngược lại.

Ràng buộc cột hoặc bảng có thể đặt tên, và với tên đó sau này có thể huỷ bỏ hoặc

là thay đổi thời điểm kiểm tra của nó.

Ràng buộc PRIMARY KEY. Ràng buộc PRIMARY KEY cho một bảng hoặc là

cột có nghĩa là một hoặc một nhóm các cột tạo thành khoá ứng viên (candidate key) của

bảng. Điều đó cũng có nghĩa rằng tổ hợp các giá trị PRIMARY KEY phải là độc nhất cho

mỗi bản ghi của bảng. Các giá trị lặp lại hoặc là NULL sẽ bị từ chối. Theo các thuật ngữ của

55

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

chuẩn SQL gọi là KHOÁ CHÍNH của bảng.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Ràng buộc UNIQUE. Ràng buộc UNIQUE cho một bảng hoặc cột có nghĩa là

một nhóm một hoặc nhiều cột tạo thành khoá ứng viên của bảng mà trong đó cho chấp nhận

cả giá trị NULL. Nghĩa là hai bản ghi chứa cùng giá trị nhưng khác NULL thì sẽ bị cho là

phá huỷ tính độc nhất và sẽ bị từ chối. Hai bản ghi chứa cùng giá trị NULL sẽ được cho là

khác nhau và được chấp nhận. Với một bảng có thể định nghĩa nhiều ràng buộc UNIQUE.

Nhận xét! Trên quan điểm mô hình dữ liệu bảng (xem chương…, nhận xét đối với

các quy luật tính toàn vẹn của thực thể và các khoá ngoài?), ràng buộc UNIQUE không định

nghĩa khoá ứng viên vì khoá ứng viên không được chứa giá trị NULL.

Ràng buộc FOREIGN KEY và REFERENCES. Ràng buộc FOREIGN KEY…

REFERENCES… cho một bảng và ràng buộc REFERENCES cho một cột định nghĩa khoá

ngoài của bảng. Ràng buộc REFERENCES cho một cột định nghĩa khoá ngoài đơn giản.

Khoá đơn giản là khoá được cấu thành từ một cột. Ràng buộc FOREIGN KEY…

REFERENCES… cho một bảng có thể định nghĩa khoá ngoài đơn giản hoặc là phức hợp.

Khoá hức hợp là khoá được cấu thành từ nhiều cột của một bảng. Cột hoặc nhóm cột của

bảng mà khoá ngoài liên kết đến phải có ràng buộc PRIMARY KEY hoặc UNIQUE. Các

cột mà khoá ngoài liên kết đến phải có cùng kiểu dữ liệu giống như các cột thành viên của

khoá ngoài. Bảng có thể liên kết đến chính bản thân mình. Ràng buộc khoá ngoài bị phá huỷ

nếu các giá trị có trong khoá ngoài không trùng với các giá trị các khoá tương ứng (của bảng

cha) nào của bất cứ một bản ghi nào của bảng cha. Các thao tác dẫn đến sự phá huỷ ràng

buộc khoá ngoài đều bị từ chối. Các giá trị của khoá ngoài và các khoá bảng cha cần phải

trùng khớp như thế nào, cũng như những hành động nào cần phải thực thi khi xảy ra thay

đổi khoá bảng cha sẽ được miêu tả trong phần đặc tả liên kết.

Ràng buộc NOT NULL. Ràng buộc NOT NULL của cột không chấp nhận sự xuất

hiện trong cột các giá trị NULL.

Đặc tả liên kết. Đặc tả liên kết định nghĩa các đặc tính của khoá ngoài của bảng.

Mệnh đề MATCH {FULL|PARTIAL}. Mệnh đề MATCH FULL đòi hỏi sự trùng

khớp toàn bộ các gía trị khoá ngoài và khoá chính. Mệnh đề MATCH PARTIAL chấp nhận

sự trùng khớp một phần các gía trị khoá ngoài và khoá chính. Mệnh đề MATCH có thể bỏ

qua. Đối với trường hợp MATCH PARTIAL trong bảng con có thể xuất hiện các bản ghi

với các giá trị khoá ngoài trùng hợp một cách không độc nhất với các giá trị khoá của bảng

cha. Điều đó có nghĩa là một bản ghi của bảng con có thể có nhiều liên kết không độc nhất

56

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

đến nhiều bản ghi thuộc bảng cha. Ràng buộc này rất khác biệt với với mô hình dữ liệu quan

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

hệ, và sự khác biệt đó làm nên sự chấp nhận các giá trị NULL. Để nghiên cứu các phương

án trùng khớp của các khoá ngoài và khoá cha cần có ví dụ sau đây.

Ví dụ 17. Giả sử có hai bảng A và B:

X Y Z X Y

1 y1 1 1 y1

1 y2 2 1 Null

2 y3 3 Null y2

2 y4 4 Null Null

3 y5 5 4 y8

3 y6

Hình. Bảng con B Hình. Bảng cha A Bảng A có khoá chính là (X,Y). Bảng B có khoá chính là Z và có khoá ngoài là

(X,Y) liên kết kết khoá chính của bảng A. Trong bảng sau chỉ ra các khả năng trùng khớp

các bản ghi của bảng con B với các bản ghi của bảng cha A.

Các cột X và Y của bảng B cho phép các Các cột X và Y của bảng B

giá trị NULL KHÔNG cho phép các giá trị

NULL

Bản ghi 1 - được phép, khớp với MATCH Bản ghi 1 – được phép, khớp với bản ghi 1

của bảng A. bản ghi 1 của bảng A.

Bản ghi 2 - được phép, không khớp với gì cả. Bản ghi 2 - không được phép.

Bản ghi 3 - được phép, không khớp với gì cả. Bản ghi 3 - không được phép.

Bản ghi 4 - được phép, không khớp với gì cả. Bản ghi 4 - không được phép.

Bản ghi 5 - không được phép. Bản ghi 5 - không được phép.

Bản ghi 1 - được phép, khớp với bản ghi 1 Bản ghi 1 - được phép, khớp với MATCH

của bảng A. bản ghi 1 của bảng A. FULL

Bản ghi 2 - không được phép. Bản ghi 2 - không được phép.

57

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

Bản ghi 3 - không được phép. Bản ghi 3 - không được phép.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Bản ghi 4 - được phép, không khớp với gì cả. Bản ghi 4 - không được phép.

Bản ghi 5 - không được phép. Bản ghi 5 - không được phép.

Bản ghi 1 - được phép, khớp với bản ghi 1 Bản ghi 1 - được phép, khớp với MATCH

của bảng A. bản ghi 1 của bảng A. PARTIAL

Bản ghi 2 - được phép, khớp không độc nhất Bản ghi 2 - không được phép.

với bản ghi 1 và 2 của bảng A. Bản ghi 3 - không được phép.

Bản ghi 3 - được phép, được phép, khớp độc Bản ghi 4 - không được phép.

nhất với bản ghi 3 của bảng A. Bản ghi 5 - không được phép.

Bản ghi 4 - được phép, không khớp với gì cả.

Bản ghi 5 - không được phép.

Nếu như tất cả các thuộc tính của khoá ngoài có ràng buộc NOT NULL, mệnh đề

MATCH sẽ bị bỏ qua.

Các mệnh đề ON UPDATE và ON DELETE định nghĩa các hành động được

thực hiện theo liên kết. Các hành động được thực hiện theo liên kết đã được mô tả ở trên.

Nếu có mặt mệnh đề MATCH PARTIAL và các cột thành viên của khoá ngoài cho phép các

giá trị NULL, thì sẽ gây nên sự phức tạp trong việc hiểu các hành động đó được thực thi như

thế nào. Các hành động đó và cùng với sự phức tạp có thể xảy ra được miêu tả chi tiết trong

[10]

Các thuộc tính của ràng buộc. Các thuộc tính của ràng buộc định nghĩa thời

điểm kiểm tra ràng buộc. Ràng buộc có thể được định nghĩa NOT DEFERRABLE (không

trì hoãn) hoặc DEFFERRABLE (trì hoãn). Nếu các thuộc tính không được khai báo thì mặc

định nó sẽ được nhận giá trị NOT DEFFERRABLE.

Nếu như ràng buộc được định nghĩa là NOT DEFFERRABLE (không trì hoãn),

thì nó sẽ được kiểm tra ngay lập tức sau khi thực thi mỗi thao tác (toán tử) có thể dẫn đến sự

vi phạm ràng buộc như INSERT, UPDATE hoặc DELETE.

Nếu như ràng buộc được định nghĩa là DEFFERRABLE (trì hoãn), thì nó có thể

ẽ có hai chế độ kiểm tra − không chậm trễ sau mỗi thao tác hoặc vào cuối giao tác. Chế độ s

kiểm tra có thể được thay đổi vào bất cứ lúc nào trong than giao tác bằng lện SET

CONSTRAINTS. Trong khi định nghĩa ràng buộc có thể khai báo chế độ kiểm tra ban đầu

INITIALLY DEFERRED (trì hoãn ban đầu) hoặc INITIALLY IMMEDIATE (ban đầu

58

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

kiểm tra ngay lập tức).

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Cú pháp các lệnh SQL dùng các ràng buộc

Chuẩn SQL mô tả các lệnh sau đây có thể dùng các ràng buộc:

− CREATE DOMAIN − tạo miền giá trị

− ALTER DOMAIN − thay đổi miền giá trị

− DROP DOMAIN − huỷ miền giá trị

− CREATE TABLE − tạo bảng mới

− ALTER TABLE − thay đổi bảng

− DROP TABLE − huỷ bảng

− CREATE ASSERTION − tạo khẳng định

− DROP ASSERTION − xoá khẳng định

− COMMIT WORK − cố định giao tác

− SET CONSTRAINTS − ấn định thời điểm kiểm tra các ràng buộc

CREATE DOMAIN Tên_miền_giá_trị [AS] Dạng_dữ_liệu

[DEFAULT Giá_trị_mặc_định] giới_hạn_CHECK

[Các_thuộc_tính_của_giới_hạn]

Lệnh này tạo ra miền giá trị và trên cơ sở miền giá trị đó có thể định nghĩa các cột

của bảng. Bởi vì tên của cột bảng sẽ được tạo ra trên cở sở miền giá trị đang được tạo ra

không được biết trước, nên trong ràng buộc CHECK miền giá trị để liên kết đến giá trị của

miền giá trị đó người ta dùng từ khoá VALUE. Trong mỗi bảng cụ thể, HQT CSDL sẽ thay

thế từ khoá VALUE bằng tên cột bảng.

Ví dụ 18. Câu lện sau đây sẽ tạo ra một miền giá trị Salary trên cơ sở kiểu dữ liệu

là các số nguyên, và các giá trị trong miền đó không được nhỏ hơn 0 (nhưng NULL không

được chấp nhận). Theo mặc định ràng buộc đó sẽ được kiểm tra ngay lập tức, nhưng cũng

có thể được trì hoãn sự kiểm tra.

CREATE DOMAIN Salary AS integer CHECK (VALUE > 0) DEFERRABLE

INITIALLY IMMEDIATE

ALTER DOMAIN Tên_miền_giá_trị

{SET DEFAULT Giá_trị_mặc_định}

| {DROP DEFAULT}

59

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

| {ADD [Tên_giới_hạn] Giới_hạn_CHECK [Các_thuộc_tính_giới_hạn]}

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

| {DROP CONSTRAINT Tên_giới_hạn}

Câu lệnh này thay đổi một miền giá trị đã có. Chuẩn SQL không cho phép thực

hiện nhiều thay đổi cùng một lúc bằng một câu lệnh ALTER DOMAIN. Nghĩa là nếu cần

huỷ bỏ ràng buộc CHECK và thêm giá trị mặc định, thì cần phải thực hiện hai câu lệnh

ALTER DOMAIN.

DROP DOMAIN Tên_miền_giá_trị CASCADE|RESTRICT

Câu lệnh này xoá một miền giá trị đã có. Nếu như có tính chất RESTRICT, thì

miền giá trị sẽ không bị xoá nếu có liên kết đến nó từ các cột của các bảng. Nếu như có tính

chất CASCADE, thì có thể xảy ra các hành động sau:

− Kiểu dữ liệu của miền giá trị sẽ được chuyển sang cho các cột đã được tạo ra

trên cơ sở miền giá trị đó.

− Nếu như cột không có giá trị mặc định, và có giá trị mặc định được định nghĩa

cho miền giá trị đó, thì nó sẽ trở thành giá trị mặc định của cột đó.

− Tất cả các ràng buộc của miền giá trị sẽ sở thành ràng buộc của cột.

CREATE TABLE Tên_bảng

({Định_nghĩa_cột|[Giới_hạn_bảng]},…)

Định_nghĩa_cột ::= Tên_cột {Tên_miền_giá_trị|Kiểu_dữ_liệu[Kích_thước]}

[Giới_hạn_cột] [DEFAULT Giá_trị_mặc_định]

Câu lệnh này (cú pháp câu lệnh không đầy đủ, đã bỏ qua các lựa chọn để tạo các

bảng tạm thời) tạo ra một bảng trong CSDL. Trong bảng không thể không có cột n ào. Trong

một bảng có thể được định nghĩa nhiều ràng buộc khác nhau nhưng cũng có thể không có

ràng buộc nào được định nghĩa.

Mỗi cột phải có tên_cột và được định nghĩa trên cơ sở một kiểu dữ liệu hoặc miền

giá trị nào đó. Như đã nói ở trên, ràng buộc của miền giá trị sẽ trở thành ràng buộc của cột.

Ngoài ra có thể định nghĩa thêm nhiều ràng buộc khác nhau cho cột. Nếu miền giá trị có giá

trị theo mặc định và trong định nghĩa cột có xác định giá trị mặc định, thì giá trị mặc định

của cột sẽ bao phủ (bỏ qua) giá trị mặc định của miền giá trị.

Ví dụ 19.

CREATE TABLE HousesForSale

60

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

(hfs_Id Id_Nums PRIMARY KEY,

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Name CHAR(50) NOT NULL,

Type_id INTEGER,

Description CHAR(250),

BuiltDate DATE,

Price Price_Domain DEFAULT 1000000,

City_Id INTEGER REFERENCES City ON UPDATE CASCADE ON DELETE

RESTRICT,

Address CHAR(250),

CONSTRAINT AltKey UNIQUE(Name, Description, BuiltDate),

CHECK (City_Id IS NOT NULL OR Address IS NOT NULL),

FOREIN KEY Type_Id REFERENCES HouseTypes ON UPDATE CASCADE ON

DELETE RESTRICT)

Câu lệnh SQL trên tạo ra một bảng mới HouseForSale với các cột hfs_Id, Name,

Description, type_id, BuiltDate, Price, City_id, Address cùng với các ràng buộc sau:

− Cột hfs_id thừa kế tất cả các ràng buộc của miền giá trị Id_nums.

− Cột Name không chấp nhận các giá trị NULL.

− Cột Price thừa kế tất cả các ràng buộc của miền giá trị Price_Domain. Ngoài ra

nó còn có giá trị mặc định 1.000.000.

Cột City_Id là một khoá ngoài liên kết đến khoá chính của bảng City. Khi thay

đổi khoá chính của bảng City thì tất cả các giá trị tương ứng của khoá ngoài trong bảng

HousesForSale sẽ được cascade thay đổi theo. Khi xoá bản ghi trong bảng City thì sẽ được

kiểm tra có liên kết đến bản ghi đang bị xoá từ bảng HousesForSale hay không. Nếu tìm

được những liên kết như vậy, thì thao tác xoá bản ghi từ bảng City sẽ bị huỷ bỏ (rollback).

− Cột Type_Id cũng là một khoá ngoài liên kết đến khoá chính của bảng City.

Khoá ngoài này khác biệt với khoá ngoài City_Id ở chỗ nó được định nghĩa như là một ràng

buộc của bảng. Các thao tác được định nghĩa theo liên kết tương tự như trường hợp trên.

− Các cột Name, Description và BuiltDate tạo thành một khoá khác của bảng.

Ràng buộc này được đặt tên AltKey.

− Các cột City_Id và Address không thể đồng thời có giá trị NULL, mặc dù một

cột bất kỳ trong chúng có thể có giá trị NULL.

61

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

ALTER TABLE Tên_bảng

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

{ADD [COLUMN] Định_nghĩa_cột_như_CREATE_TABLE}

|{ALTER [COLUMN] Tên_cột [SET DEFAULT Giá_trị_mặc_định| DROP

DEFAULT]}

|{DROP [COLUMN] Tên_cột RESTRICT|CASCADE}

|{ADD Giới_hạn_cột}

|{DROP CONSTRAINT Tên_giới_hạn RESTRICT|CASCADE}

Câu lệnh này cho phép sửa đổi một bảng đã có. Có thể thêm vào bảng hoặc xoá đi

một cột hoặc là một ràng buộc. Ngoài ra có thể thay đổi giá trị mặc định của cột nếu muốn.

DROP TABLE Tên_bảng CASCADE | RESTRICT

Câu lệnh này cho phép xoá một bảng đã có. Tất cả các bản ghi, các ràng buộc

được định nghĩa cùng với bảng đó cũng bị xoá theo cùng với bảng đó.

Nếu có thông số RESTRICT, thì bảng đó sẽ bị xoá chỉ khi không có liên kết nào

đến bảng đó từ các bảng khác cũng như khung nhìn (View).

Nếu như thông số CASCADE được dùng, thì tất cả các đối tượng liên kết đến

bảng đó cũng sẽ bị xoá.

CREATE ASSERTION Tên_khẳng_định

Giới_hạn_CHECK

[Các_thuộc_tính_giới_hạn]

Câu lệnh này cho phép tạo ra một khẳng định, nghĩa là một ràng buộc không phải

là một phần của định nghĩa miền giá trị, cột hay là bảng. Mệnh đề CHECK có trong định

nghĩa khẳng định có thể rất phức tạp và chứa các liên kết đến nhiều bảng.

Ví dụ 20.

CREATE ASSERTION Check_Pay CHECK (Salespeaple.Salary IS NOT NULL) OR

(Salespeaple.Commission IS NOT NULL) DEFERRABLE INITIALLY IMMEDIATE

DROP ASSERTION Tên_khẳng_định

62

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

Câu lệnh này cho phép xoá đi một khẳng định đang có.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

COMMIT WORK

Đó là lệnh cố định giao tác. Và khi đó tất cả các ràng buộc được trì hoãn đến cuối

giao tác sẽ được kiểm tra. Nếu một ràng buộc nào đó không được thoả mãn, thì giao tác sẽ

bị rollback.

SET CONSTRAINT {Tên_giới_hạn, …|ALL} {DEFERRED | IMMEDIATE}

Câu lệnh này cho phép thay đổi thời điểm kiểm tra của tất cả hoặc những ràng

buộc được liệt kê trong thời gian thực thi giao tác. Câu lệnh này chỉ có tác dụng đối với các

ràng buộc được định nghĩa theo kiểu DEFERRABLE. Nếu ràng buộc A nằm trong trạng

thái IMMEDIATE (kiểm tra ngay lập tức), thì câu lệnh SET CONSTRAINT A DEFERRED

chuyển nó vào trạng thái DEFERRED (trì hoãn kiểm tra) và khi đó tất cả các thao tác có khả

năng phá huỷ ràng buộc đó sẽ được thực thi không qua kiểm tra. Sự kiểm tra sẽ được thực

hiện vào cuối giao tác hoặc là vào thời điểm xuất hiện lệnh SET CONSTRAINT A

63

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

IMMEDIATE.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Chương II.3 Giao tác và tính song song (tính đối ngẫu)

Trong chương này chúng ta nghiên cứu các khả năng thực thi song song các giao

tác bởi nhiều người dùng khác nhau, nghĩa là tính chất cô lập I (Isolation) của các giao tác.

Các HQT CSDL hiện đại là những hệ thống nhiều người dùng, nghĩa là chấp nhận

công việc của số lượng lớn người dùng song song cùng một lúc. Trong khi đó người dùng

không được làm phiền (ảnh hưởng?) đến nhau. Bởi vì một đơn vị logic công việc của người

dùng là giao tác. Như vậy công việc của HQT CSDL phải được tổ chức như thế nào đó, để

người dùng cảm thấy rằng giao tác của họ được thực thi không phụ thuộc vào các giao tác

của các người dùng khác.

Một phương pháp đơn giản nhất và dễ nhận thấy có thể đảm bảo tính cô lập như

vậy, đó là xếp tất cả các giao tác vào một hàng duy nhất và thực thi chúng theo một trình tự

nối đuôi nhau một cách nghiêm ngặt. Cũng dễ nhận thấy phương pháp này không thể chấp

nhận bởi nguyên nhân: mất đi ưu thế của xử lý công việc song song. Như vậy, các giao tác

phải được thực thi song song đồng thời, nhưng phải đảm bảo kết quả thu được trùng khớp

với kết qua thu được trong trường hợp các giao tác được thực thi theo một trình tự nối tiếp

nghiêm ngặt. Khó khăn ở chỗ, nếu không tính trước những phương án đặc biệt, thì những

thay đổi dữ liệu bởi một người dùng có thể sẽ bị thay đổi bởi giao tác của một người dùng

thứ hai trước khi giao tác của người dùng thứ nhất kết thúc. Và kết quả là người dùng thứ

nhất sẽ thấy không phải là kết quả công việc của mình, mà là một kết quả nào đó không xác

định.

Các phương pháp tuần tự hoá các giao tác bao gồm:

a) Chiếm lĩnh đồng bộ

− Chiếm lĩnh đồng bộ bằng cách phân hạt (tán nhỏ Гранулированные

синхронизационные захваты)

b) Giải quyết vấn đề song song bằng cách phong toả

Một trong những phương pháp tuần tự hoá các giao tác thường dùng đảm bảo các

giao tác làm việc đồng thời và song song không phụ thuộc lẫn nhau là phương pháp phong

64

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

toả.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

II.3.1 Đôi điều về công việc của giao tác

Giao tác được xem như là một chuỗi các thao tác cơ bản và độc lập. Tính độc lập

của một thao tác cơ bản và độc lập được hiểu rằng, HQT CSDL đảm bảo thoả mãn hai điều

kiện sau đây trên quan điểm của người dùng:

1. Thao tác được thực thi hoàn toàn hoặc là hoàn toàn không được thực thi (tính

độc lập – tất cả hoặc không có gì).

2. Trong thời gian thực thi một thao tác sẽ không có bất cứ một thao tác nào khác

của các giao tác khác được thực thi (tính trật tự liên tiếp nghiêm ngặt của các thao tác cơ

bản).

Ví dụ, việc đọc một trang dữ liệu từ đĩa hoặc ghi một trang dữ liệu lên đĩa sẽ là

những thao tác cơ bản (trang dữ liệu – đơn vị nhỏ nhất đối với thao tác với ổ đĩa của HQT

CSDL). Điều kiện thứ hai thực ra chính là một điều kiện logic, bởi vì thực tế hệ thống có thể

thực thi nhiều thao tác cơ bản cùng một thời điểm. Ví dụ, dữ liệu có thể được lưu trữ trên

những ổ đĩa (vật lý) khác nhau và hệ thống có thể thực hiện nhiều thao tác đọc/ghi các ổ đĩa

đó cùng một lúc.

Các thao tác cơ bản của các giao tác khác nhau có thể được thực thi theo một thứ

tự bất kỳ, nhưng tất nhiên, bên trong mỗi giao tác thứ tự thực thi các thao tác cơ bản của

giao tác đó là nghiêm ngặt theo thứ tự liên tiếp. Ví dụ, vài giao tác được tập hợp từ các

chuỗi các thao tác cơ bản:

T={T1, T2, T3, …, Tn},

Q={Q1, Q2, Q3, …, Qm},

S={S1, S2, S3, …, Sl},

thì thứ tự thực tế của các thao tác cơ bản mà HQT CSDL thực thi các giao tác trên có thể là:

{T1, Q1, T2, S1, T3, S2, S3, Q2,…}.

Định nghĩa 1. Tổ hợp các giao tác mà các thao tác cơ bản của nó đan xen lẫn

nhau gọi là hỗn hợp giao tác.

Định nghĩa 2. Chuỗi liên tiếp mà các các thao tác cơ bản của tổ hợp các giao tác

đã cho được thực thi theo đó gọi là lịch phóng (run schedule?) của tổ hợp giao tác.

Dễ nhận thấy rằng, đối với tổ hợp giao tác đã có tồn tại rất nhiều lịch phóng khác

nhau. Như vậy, đảm bảo tính cô lập các người dùng dẫn đến việc chọn lựa một lịch phóng

65

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

thoả đáng (trong một nghĩa nào đó là đúng nhất) nhất của các giao tác. Đồng thời, lịch

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

phóng cần phải là tối ưu. Ví dụ, đòi hỏi thời lượng trung bình để thực thi các giao tác của

mỗi người dùng nhỏ nhất.

Tiếp theo chúng ta sẽ nói rõ hơn khái niệm lịch phóng “đúng nhất” và nói đôi

điều về tính tối ưu trong thực thi tổ hợp các giao tác.

II.3.2 Các vấn đề thực hiện song song các giao tác

Các giao tác của các người dùng khác nhau có thể ảnh hưởng đến nhau như thế

nào? Phân biệt ba vần đề chính của tính song song:

− Vấn đề mất kết quả cập nhật dữ liệu;

− Vấn đề phụ thuộc chưa cố định (đọc dữ liệu bẩn, đọc không chuẩn…);

− Vấn đề phân tích xung khắc (tương tranh).

Hãy xem xét hai giao tác A và B được “phóng” tương ứng với một lịch trình nào

đó. Giả sử các giao tác làm việc với một đối tượng nào đó của CSDL, ví dụ các bản ghi của

một bảng. Thao tác đọc bản ghi P được biểu diễn P=P0, với P0 – giá trị vừa đọc được. Thao

tác ghi một giá trị P1 vào P sẽ được biểu diễn P1 ->P.

II.3.2.1 Vấn đề mất kết quả cập nhật dữ liệu

Hai giao tác theo thứ tự lần lượt ghi các giá trị nào đó vào đúng một bản ghi nào

đó và cố định các thay đổi.

Giao tác A Thời điểm Giao tác B

− Đọc P=P0 t1

− t2 Đọc P=P0

− Ghi P1 ->P t3

− t4 Ghi P2 ->P

Cố định giao tác − t5

− Cố định giao tác t6

Mất kết quả sửa đổi

66

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

Hình II.4 Vấn đề mất kết quả cập nhật dữ liệu

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Kết quả: Sau khi kết thúc cả hai giao tác, bản ghi P chứa giá trị được ghi bởi giao

tác sau cùng là P2. Giao tác A không biết gì về sự tồn tại của giao tác B, và tất nhiên, cho

rằng trong bản ghi P chứa giá trị P1. Như vậy, giao tác A đã đánh mất kết quả công việc của

mình.

II.3.2.2 Vấn đề phụ thuộc chưa cố định (đọc dữ liệu bẩn, đọc không chuẩn…)

Giao tác B sửa đổi dữ liệu trong bản ghi. Sau đó giao tác A đọc những dữ liệu vừa

được sửa đổi và làm việc với nó. Giao tác B rollback và khôi phục dữ liệu cũ.

Giao tác A Thời điểm Giao tác B

− t1 Đọc P=P0

− t2 Ghi P1 ->P

− Đọc P=P1 t3

− t4 Làm việc với dữ liệu vừa đọc

− t5 Rollback giao tác P0 ->P

− Cố định giao tác t6

Làm việc với dữ liệu “BẨN”

Hình II.5 Vấn đề phụ thuộc chưa cố định

Như vậy giao tác A làm việc với những dữ liệu nào?

Kết quả: Giao tác A trong quá trình công việc của mình đã sử dụng dữ liệu không

có thực trong CSDL. Rõ ràng, sau rollback của giao tác B, CSDL sẽ được phục hồi lại giống

như là giao tác B hoàn toàn chưa bao giờ được thực thi. Như vậy, kết quả làm việc của giao

tác A không đúng, bởi vì nó làm việc với dữ liệu không có thực trong CSDL.

II.3.2.3 Vấn đề xung khắc trong phân tích

Vấn đề xung khắc trong phân tích bao gồm các phương án sau:

− Đọc không lặp lại

− Các phần tử ảo (dữ liệu, phantom)

− Xung khắc trong phân tích thực chất

67

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

II.3.2.3.1 Đọc không lặp lại

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Giao tác A hai lần đọc chính một bản ghi nào đó. Xen giữa hai lần đọc giáo tác B

thay đổi giá trị bản ghi đó được chen vào.

Giao tác A Thời điểm Giao tác B

− Đọc P=P0 t1

− t2 Đọc P=P0

− t3 Ghi P1 ->P

− Cố định giao tác t4

− Đọc lại P=P1 t5

Cố định giao tác − t6

Đọc không lặp lại

Hình II.6 Đọc không lặp lại Giao tác A không biết gì về sự tồn tại của giao tác B, và, bởi vì nó không sửa đổi

giá trị trong bản ghi, nên mong đợi rằng, sau khi đọc lại giá trị bản ghi sẽ là chính xác như

trước.

Kết quả: Giao tác A làm việc với những dữ liệu, mà trên quan điểm của nó, đó là

những dữ liệu “tự thay đổi một cách tuỳ tiện”.

II.3.2.3.2 Các phần tử ảo

Hiệu ứng các phần tử ảo khá khác so với các giao tác vừa rồi ở chỗ trong một

bước có rất nhiều thao tác được thực thi. Ví dụ, đọc đồng thời nhiều bản ghi thoả mãn

những điều kiện nào đó.

Giao tác A hai lần thực hiện việc đọc (select) các bản ghi cùng với một điều kiện

đã cho. Giữa hai lần select được chen vào giao tác B. Giao tác B thêm vào một bản ghi mới,

thoả mãn điều kiện đã cho mà giao tác A sử dụng.

Giao tác A Giao tác B Thời

điểm

Select các bản ghi thoả mãn điều kiện . − t1 (Chọn được n bản ghi)

68

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

− Thêm vào bản ghi thoả mãn điều t2

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

kiện .

Cố định giao tác − t3

− Select các bản ghi thoả mãn điều kiện . t4 (Chọn được n+1 bản ghi)

− Cố định giao tác t5

Xuất hiện những bản ghi mà trước kia

không có

Hình II.7 Các phần tử ảo

Giao tác A không biết gì về sự tồn tại của giao tác B, và, bởi vì bản thân nó không

sửa đổi gì trong CSDL, nên nó mong đợi rằng sau khi đọc lại sẽ cho chính xác những bản

ghi trước đó.

Kết quả: Giao tác A trong hai lần select cùng các bản ghi nhưng lại nhận được kết

quả khác nhau.

II.3.2.3.3 Phân tích xung khắc thực chất

Hiệu ứng xung khắc trong phân tích thực chất cũng khác biệt so với các ví dụ

trước ở chỗ trong hỗn hợp tồn tại hai giao tác – một giao tác dài và một giao tác ngắn.

Giao tác dài thưc hiện việc phân tích nào đó trên tất cả các bản ghi của bảng, ví

dụ, tính tổng số tiền trong tài khoản ngân hàng các khách hàng cho kế toán trưởng. Giả sử

trong tất cả các tài khoản đều có cùng một số tiền 100$. Giao tác ngắn trong thời gian đó

thực hiện giao dịch chuyển 50$ từ một tài khoản vào một tài khoản khác như thế nào đó, để

tổng số tiền trong tất cả các tài khoản không thay đổi.

Giao tác A Giao tác B Thời

điểm

− Đọc tà khoản P1=100 và tính tổng. t1 SUM=100

− Lấy từ tài khoản P3 50$. t2

69

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

Cho vào tài khoản khác − t3

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

P1.

Cố định giao tác − t4

− Đọc tài khoản P2 = 100 và tính tổng. t5 SUM = 200

− Đọc tài khoản P3 = 50 và tính tổng. t6 SUM = 250

− Cố định giao tác t7

Tổng $250 từ tất cả các tài khoản không đúng –

phải là $300

Hình II.8 Phân tích xung khắc thực chất

Kết quả: Mặc dù giao tác B thực thi tất cả đều đúng – chuyển tiền không bị thất

lạc, nhưng kết quả giao tác A tính được tổng không đúng. Bởi vì các giao tác chuyển tiền

thường được thực thi liên tục không ngừng, nên trong tình huống này kế toán trưởng sẽ

không bao giờ biết được có tổng bao nhiêu tiền trong ngân hàng.

II.3.2.3.4 Xung đột giữa các giao tác

Như vậy, phân tích các vấn đề tính song song cho thấy, rằng nếu không chuẩn bị

trước các phương án thì trong quá trình thực thi hỗn hợp các giao tác tính cô lập (I) của giao

tác sẽ bị phá huỷ. Các giao tác thực tế ảnh hưởng (đan xen) đến nhau phải nhận được kết

quả đúng.

Nhưng cũng không phải các giao tác nào cũng ảnh hưởng đến nhau. Rõ ràng

những giao tác làm việc với các dữ liệu khác nhau hoặc thực thi ở những thời điểm khác

nhau thì không ảnh hưởng đến nhau.

Định nghĩa 3. Các giao tác được gọi là đối thủ tương tranh nếu chúng đan xen

lẫn nhau theo thời gian và cùng truy cập đến những dữ liệu nào đó.

Sự tương tranh giữa các giao tác làm xuất hiện các xung đột truy cập đến dữ liệu.

70

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

Phân biệt các kiểu xung đột sau đây:

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

− W −W (ghi−ghi). Giao tác thứ nhất đã sửa đổi bản ghi và chưa kết thúc. Giao

tác thứ hai cũng sửa đổi bản ghi đó. Kết quả là kết quả sửa đổi bản ghi của giao tác thứ nhất

bị mất.

− R −W (đọc−ghi). Giao tác thứ nhất đọc bản ghi và chưa kết thúc. Giao tác thứ

hai s ửa đổi nội dung bản ghi. Kết quả − phân tích xung khắc (đọc không lặp lại).

− W-R (ghi −đọc). Giao tác thứ nhất đã sửa đổi bản ghi và chưa kết thúc. Giao tác

thứ hai đọc cũng chính bản ghi đó. Kết quả là giao tác thứ hai đọc dữ liệu bẩn.

Rõ ràng xung đ ột kiểu R−R (đọc-đọc) không tồn tại, bởi vì trong quá trình đọc,

dữ liệu không thay đổi.

Các vấn đề khác của tính song song, ví dụ như các phần tử ảo và xung khắc thực

chất trong phân tích, phức tạp hơn nhiều. Bởi vì, về nguyên tắc, sự khác biệt của chúng là ở

chỗ, chúng không thể xuất hiện khi làm việc với một dữ liệu. Chúng chỉ xuất hiện khi các

giao tác cùng truy cập đến các tổ hợp các bản ghi khác nhau.

Định nghĩa 4. Lịch trình phóng các tổ hợp giao tác dược gọi là thứ tự nối tiếp,

nếu các giao tác được thực thi theo một thứ tự nghiêm ngặt, nghĩa là các thao tác cơ bản của

các giao tác không đan xen lẫn nhau.

Định nghĩa 5. Nếu như lịch trình phóng tổ hợp các giao tác chứa các thao tác cơ

bản đan xen nhau, thì lịch trình đó được gọi là đan xen.

Trong quá trình thực thi các giao tác theo thứ tự nối tiếp, các giao tác được đảm

bảo được thực thi đúng, vì trong quá trình đó các giao tác không “cảm thấy” sự tồn tại của

chúng lẫn nhau.

Định nghĩa 6. Hai lịch trình được cho là tương đương, nếu sau khi thực thi

chúng sẽ cho cùng một kết quả, không phụ thuộc vào trạng thái ban đầu của CSDL.

Định nghĩa 7. Lịch trình được cho là đúng (khả tuần tự, сериализуемый), nếu

nó tương đương với một lịch trình theo thứ tự nối tiếp.

Nhận thấy rằng, trong quá trình thực thi hai lịch trình theo thứ tự nối tiếp (và rõ

ràng là lịch trình đúng) cùng chứa một tổ hợp các giao tác, có thể thu được các kết quả khác

nhau. Giả sử giao tác A bao gồm một động tác “Trừ số X cho 1” v à giao tác B là “Chia số X

cho 2”. Khi đó nếu lịch trình theo thứ tự nối tiếp là {A, B} thì sẽ được kết quả (X-1)/2, còn

nếu lịch trình là {B, A} thì sẽ thu được kết quả X/2 – 1. Như vậy, có thể tồn tại nhiều lịch

trình phóng giao tác đúng nhưng dẫn đến các kết quả khác nhau từ một trạng thái ban đầu

71

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

của CSDL.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Bài toán đảm bảo cô lập công việc của nhiều người dùng không đơn giản chỉ là

tìm các lịch trình phóng các giao tác đúng. Nếu như sắp xếp các giao tác vào một hàng nào

đó theo thứ tự chúng được gửi đến và thực thi theo thứ tự nối tiếp nghiêm ngặt là đủ, thì

chúng ta chọn biện pháp “nối tiếp” đơn giản nhất đó. Và như vậy, chúng ta sẽ tự động thu

được một lịch trình đúng. Vấn đề là ở chỗ lịch trình đó không được cho là tối ưu trên quan

điểm năng suất chung của hệ thống. Điều đó dẫn đến tình huống đối đầu giữa hai lựa chọn:

− cố gắng đảm bảo tính nối tiếp nhưng phải trả giá bằng sự giảm thiểu hiệu quả công việc,

và − cố gắng nâng cao hiệu quả công việc chung nhưng phải trả giá bằng sự giảm thiểu tính

nối tiếp.

Trường hợp “tận cùng” là thực thi các giao tác theo thứ tự nối tiếp như chúng ta

đã nghiên cứu. Chúng ta xem xét một trường hợp tận cùng khác, đó là cố gắng đạt được một

lịch trình tối ưu, nghĩa là lịch trình có hiệu quả thực thi các giao tác cao nhất. Đầu tiên

chúng ta cần hiểu thế nào là “tính tối ưu”. Cùng với mỗi lịch trình có thể chúng ta có thể gán

giá trị của một hàm tính trị giá nào đó. Về bản chất, hàm tính trị giá có thể là hàm tính tổng

thời gian thực thi tất cả các giao tác trong tổ hợp. Thời gian thực thi một giao tác được tính

từ thời điểm giao tác xuất hiện cho đến thời điểm giao tác hoàn thành thao tác cơ bản cuối

cùng của mình. Thời gian đó được gộp lại từ các thành phần:

− Thời gian chờ đợi bắt đầu giao tác − thời gian trôi qua từ thời điểm giao tác

xuất hiện cho đến thời điểm thực tế thực thi thao tác cơ bản đầu tiên của giao tác.

− Tổng thời gian thực thi tất cả các thao tác cơ bản.

− Tổng thời gian thực thi tất cả các thao tác cơ bản của các giao tác khác chen vào

giữa các thao tác cơ bản của giao tác đó.

Lịch trình tối ưu là lịch trình cho kết quả của hàm tính trị giá nhỏ nhất. Rõ ràng,

tính tối ưu của lịch trình phóng phụ thuộc vào sự lựa chọn hàm tính trị giá. Nghĩa là, tối ưu

trên quan điểm một tập hợp các tiêu chí. Ví dụ, trên quan điểm đạt được khởi đầu thực thi

mỗi giao tác nhanh nhất cực đại.

Giả sử, chúng ta được biết trước một khoảng thời gian nào đó thời điểm xuất hiện

của các giao tác, nghĩa là biết trước sẽ là hỗn hợp giao tác nào và thời điểm xuất hiện của

mỗi trong chúng:

Giao tác xuất hiện vào thời điểm .

Giao tác xuất hiện vào thời điểm .

72

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

:

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Giao tác xuất hiện vào thời điểm .

Trong trường hợp này, vì biết trước tổ hợp các giao tác, nên về mặt lý thuyết có

thể xem qua tất cả các phương án có thể của lịch trình phóng, mặc dù số lượng rất lớn

nhưng cũng có giới hạn, và chọn trong số đó những lịch trình, đầu tiên là đúng, và sau đó,

tối ưu theo tiêu chí đã chọn. Trong trường hợp đó lịch trình phóng tối ưu đã đạt được.

Trong thực tế tình huống lại khác, chúng ta không thể biết trước những giao tác

nào sẽ xuất hiện, vào thời điểm nào và khoảng thời gian mà tổ hợp giao tác đó chiếm. Thực

tế, hệ thống có thể làm việc liên tục không ngừng trong vòng vài ngày, và có thể vài tháng.

Và trong trường hợp đó, tổ hợp tất cả các giao tác được thực thi trong khoảng thời gian đó là

tổ hợp giao tác. Mặt khác, việc ngừng hệ thống có thể xảy ra vào bất cứ lúc nào hoặc theo ý

muốn của quản trị viên hệ thống, hoặc là kết quả của một sự cố. Suy ra, hệ thống cần làm

việc thế nào đó, để trong bất cứ thời điểm nào, tổ hợp các giao tác đã và đang được thực thi

đúng và không quá xa để gọi là tối ưu.

Bởi vì các giao tác không ảnh hưởng đến nhau, nên chúng truy cập đến các dữ

liệu khác nhau hoặc thực hiện vào các thời gian khác nhau và như vậy, tồn tại hai phương

pháp giải quyết vấn đề tương tranh giữa các giao tác xuất hiện vào bất cứ thời điểm bất kỳ:

− “Hãm phanh” những giao tác nào đó trong số các giao tác xuất hiện một thời

gian cần thiết nào đó để đảm bảo tính đúng đắn của hỗn hợp các giao tác trong mỗi thời

điểm, nghĩa là đảm bảo các giao tác tương tranh được thực thi ở những thời gian khác nhau.

− “Cung cấp” cho các giao tác tương tranh các phiên bản (instances) dữ liệu

“khác nhau”, nghĩa là đảm bảo các giao tác tương tranh làm việc với các các phiên bản dữ

liệu khác nhau.

Phương pháp đầu tiên − “hãm phanh” các giao tác, được triển khai bằng cách sử

dụng các các loại hình phong toả khác nhau hoặc phương pháp đánh dấu tạm thời.

Phương pháp th ứ hai − Cung cấp các phiên bản dữ liệu khác nhau, được triển khai

bằng cách sử dụng dữ liệu từ nhật ký giao tác.

II.3.3 Đảm bảo thực thi song song (tính tuần tự) các giao tác

II.3.3.1 Định lý Esvaran về tính tuần tự

Quan niệm về khả năng tuần tự hoá được đưa ra đầu tiên bởi Esvaran [14]. Trong

73

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

công trình đó ông đưa ra giao th ức phong toả hai pha − 2PL (Twoo-Phases Lock):

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

1. Trước khi thực thi một thao tác nào đó với một đối tượng nào đó, giao tác cần

phải phong toả đối tượng đó.

2. Sau khi dỡ bỏ phong toả, giao tác không được thiết đặt bất kỳ phong toả nào

khác.

Các giao tác được sử dụng trong giao thức đó không phân biệt theo kiểu (type) và

được cho là độc quyền. Các giao thức truy cập dữ liệu sử dụng S- và X-phong toả và giao

thức phong toả có chủ định (sẽ được đề cập sau) là những biến thể của giao thức phong toả

hai pha cho trường hợp, khi mà các phong toả (giao tác?) có các kiểu khác biệt nhau.

Eswaran đã đưa ra định lý sau:

Định lý Eswaran: Nếu như các giao tác trong hỗn hợp tuân theo giao tác phong

toả hai pha, thì cho tất cả các lịch trình phóng đều tồn tại khả năng tuần tự hoá

Giao thức được gọi là phong toả hai pha, nên nó được đặc trưng bởi hai pha:

− Pha th ứ nhất − tăng các phong toả: Trong thời gian của pha này các phong toả

được thiết đặt và diễn ra công việc với các đối tượng bị phong toả.

− Pha th ứ hai − dỡ bỏ phong toả: Trong pha này các phong toả chỉ được dỡ bỏ.

Công việc với các dữ liệu đã bị phong toả có thể được tiếp tục.

Công việc của một giao tác có thể được thấy giống như trên hình vẽ sau.

Hình II.4 Công việc của giao tác khi sử dụng giao thức phong toả hai pha

74

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

Và sau đây là ví dụ giao tác không tuân thủ theo giao thức phong toả hai pha:

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Hình II.5 Giao tác không tuân thủ giao thức phong toả hai pha Trên thực tế, về nguyên tắc pha thứ hai dẫn đến một thao tác hoàn tất hoặc

rollback giao tác đồng thời cùng với việc dỡ bỏ các phong toả.

Nếu một giao tác A nào đó không tuân thủ giao thức phong toả hai pha, và suy ra,

bao gồm không ít hơn hai thao tác phong toả và dỡ bỏ phong toả, thì bao giờ cũng có thể

xây dựng một giao tác B, mà khi được thực thi xen kẽ cùng với giao tác A sẽ dẫn đến một

lịch trình không thể tuần tự hoá và không đúng.

II.3.3.2 Chiếm lĩnh đồng bộ

(?)

II.3.3.2.1 Các phong toả

Ý tưởng chính của các phong toả là, để một đối tượng nào đó không thay đổi

trong quá trình thực thi một giao tác nào đó, mà giao tác đó không cho phép thì đối tượng đó

cần phải được phong toả. Nghĩa là, truy cập đến đối tượng đó từ phía các giao tác khác bị

hạn chế trong quá trình thực thi giao tác đã thực hiện việc phong toả.

Có hai loại phong toả:

− Phong toả độc chiếm (X-phong toả, X-locks − eXclusive locks) − phong toả

không truy cập lẫn nhau (phong toả ghi).

− Phong toả chia sẻ (S-phong toả, S-locks − Shared locks) − phong toả cho phép

truy cập lẫn nhau (phong toả đọc).

Nếu như giao tác A phong toả đối tượng bằng X-phong toả, thì tất cả mọi truy cập

đến đối tượng đó từ các giao tác khác sẽ bị từ chối.

Nếu giao tác A phong toả đối tượng bằng sự giúp đỡ của S-phong toả, thì có thể

xảy ra hai trường hợp:

− Truy vấn từ phía các giao tác khác yêu cầu X-phong toả đối tượng đó sẽ bị từ

chối;

− Truy vấn từ phía các giao tác khác yêu cầu S-phong toả đối tượng đó sẽ được

75

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

chấp nhận.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Các quy tắc truy cập đến các đối tượng bị phong toả có thể biểu diễn bằng ma

trận tính tương dung của các phong toả. Nếu giao tác A thiết đặt phong toả một đối tượng

nào đó, còn giao tác B sau đó cũng thiết đặt phong toả đối tượng đó, thì sư thành công của

phong toả đối tượng đó bởi giao tác B được miêu tả bằng bảng sau:

Giao tác B thử nghiệm thiết đặt phong toả:

Giao tác A thiết đặt phong toả: S- phong toả X- phong toả

S- phong toả Có KHÔNG

(Xung đột

R-W)

X- phong toả KHÔNG KHÔNG

(Xung đột (Xung đột

W-R) W-W)

Bảng II.2 Ma trận tương dung của S- và X-phong toả

Có ba trường hợp giao tác B không thể thiết đặt phong toả tương ứng với ba loại

hình xung đột giữa các giao tác.

Truy cập đến các đối tượng của CSDL để đọc và ghi dữ liệu cần phải được thực

hiện tương ứng với giao thức truy cập đến dữ liệu:

1. Trước khi đọc một đối tượng nào đó, giao tác cần phải thiết đặt S-phong toả lên

đối tượng đó.

2. Trước khi cập nhật (sửa đổi) đối tượng, giao tác cần phải thiết đặt X-phong toả lên

đối tượng đó. Nếu như giao tác đã thiết đặt S-phong toả lên đối tượng đó, thì trước khi cập

nhật đối tượng S-phong toả cần phải được thay bằng X-phong toả.

3. Nếu phong toả đối tượng bởi giao tác B bị từ chối bởi vì đối tượng đã bị phong toả

bởi giao tác A, thì giao tác B chuyển vào trạng thái chờ đợi. Và giao tác B nằm trong trạng

thái chờ đợi đến khi nào giao tác A vẫn chưa gỡ bỏ phong toả trên đối tượng đó.

4. Các X-phong toả đã được thiết đặt bởi giao tác A sẽ được lưu giữ cho đến khi kết

thúc giao tác A.

76

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

II.3.3.2.2 Giải quyết các vấn đề của tính song song bằng sự giúp đỡ của các phong toả

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Chúng ta sẽ xem xét, các giao tác sẽ thể hiện mình như thế nào khi tham gia vào

các xung đột trong quá trình truy cập dữ liệu, nếu chúng tuân thủ giao thức truy cập dữ liệu.

II.3.3.2.2.1 Vấn đề mất kết quả cập nhật

Hai giao tác tuần tự ghi các dữ liệu nào đó vào cùng một bản ghi và cố định các

thay đổi.

Giao tác A Thời điểm Giao tác B

S-phong toả P – thành công − t1

− Đọc P=P0 t2

− S-phong toả P - thành công t3

− t4 Đọc P=P0

X-phong toả P – bị từ chối − t5

Chờ đợi X-phong toả P – bị từ chối t6

Chờ đợi Chờ đợi t7

Chờ đợi ... Chờ đợi

Hình II.9 Vấn đề mất kết quả cập nhật

Cả hai giao tác đều thiết đặt thành công S-phong toả lên đối tượng P và đọc nó.

Giao tác A thử nghiệm thiết đặt X-phong toả để cập nhật đối tượng P. Phong toả bị từ chối,

bởi vì đối tượng P đã bị thiết đặt S-phong toả bởi giao tác B. Giao tác A chuyển vào trạng

thái chờ đợi cho đến khi nào giao tác B chưa giải phóng đối tượng P. Đến phiên mình giao

tác B cũng thiết đặt X-phong toả để cập nhật đối tượng P. Phong toả bị từ chối, bởi vì đối

tượng P đã bị thiết đặt S-phong toả bởi giao tác A. Giao tác B chuyển vào trạng thái chờ đợi

cho đến khi nào giao tác A chưa giải phóng đối tượng P.

Kết quả là cả hai giao tác đều chờ đợi nhau và không thể tiếp tục được thực thi.

Xuất hiện tình huống bế tắc (deadlock).

II.3.3.2.2.2 Vấn đề phụ thuộc không được cố định (đọc dữ liệu bẩn, đọc không chuẩn)

Giao tác B thay đổi dữ liệu trong bản ghi. Sau đó giao tác A đọc dữ liệu đã được

thay đổi và làm việc với nó. Giao tác B rollback và khôi phục dữ liệu cũ.

Giao tác A Thời điểm Giao tác B

77

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

− S-phong toả P − thành công t1

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

− t2 Đọc P=P0

− X-phong toả P − thành công t3

− t4 Ghi

S-phong toả P − bị từ chối − t5

Rollback giao tác Chờ đợi t6 (phong toả được dỡ bỏ)

S-phong toả P − thành công − t7

− Đọc P=P0 t8

− Làm việc với dữ liệu đã đọc P0 t9

− − t10

Cố định giao tác − t11

Tất cả đều đúng

Hình II.10 Vấn đề phụ thuộc không được ghi lại

Kết quả: Giao tác A được hãm (phanh) lại cho đến thời điểm kết thúc (trong

trường hợp này là rollback) giao tác B. Sau đó giao tác A tiếp tục làm việc trong chế độ bình

thường và làm việc với các dữ liệu đúng. Xung đột được giải quyết bằng cách kéo dài thời

gian làm việc của giao tác A, chính là thời gian đã mất để chờ đợi giao tác B dỡ bỏ phong

toả lên đối tượng P.

II.3.3.2.2.3 Vấn đề xung khắc trong phân tích

II.3.3.2.2.3.1 Đọc không lặp lại

Giao tác A đọc đối tượng P hai lần. Giao tác B xen vào giữa hai lần đọc của giao

tác A và thay đổi đối tượng P.

Giao tác A Thời điểm Giao tác B

S-phong toả P - thành công − t1

− Đọc P=P0 t2

− X- phong toả P - bị từ chối t3

78

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

− Chờ đợi: t4

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Chờ đợi: Đọc lại P=P0 t5

Cố định giao tác Chờ đợi: t6

(phong toả được dỡ bỏ)

− X-phong toả P- thành công t7

− t8 Ghi

− Cố định giao tác t9

(phong toả được dỡ bỏ)

Tất cả đều đúng

Hình II.11 Phân tích xung khắc - Đọc không lặp lại

Kết quả: Giao tác B bị hãm cho đến thời điểm kết thúc giao tác A. Kết quả là giao

tác A hai lần đọc chính một đối tượng và đọc kết quả dữ liệu đúng. Sau khi kết thúc giao tác

A, giao tác B tiếp tục công việc trong chế độ bình thường.

II.3.3.2.2.3.2 Các phần tử ảo

Giao tác A hai lần thực hiện chọn lựa (đọc) các bản ghi cùng với một điều kiện.

Giữa hai lần đọc của giao tác A, giao tác B chen vào và thêm một bản ghi mới thoả mãn

điều kiện select của giao tác A trên vào bảng.

Giao tác A Thời điểm Giao tác B

S-phong toả các bản ghi thoả mãn điều

kiện . − t1

(n bản ghi bị phong toả)

select các bản ghi thoả mãn điều kiện

. − t2

(n bản ghi được select)

Thêm vào bản ghi mới thoả mãn − t3 điều kiện .

79

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

− Cố định giao tác t4

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

S-phong toả các bản ghi thoả mãn điều

− kiện . t5

(n+1 bị phong toả)

select các bản ghi thoả mãn điều kiện

− . t6

(n+1 bản ghi được select)

− Cố định giao tác t7

Xuất hiện các bản ghi mà trước kia

không có

Hình II.12 Xung khắc trong phân tích - Các phần tử ảo

Kết quả: Phong toả trên cấp độ bản ghi không thể giải quyết vấn đề xuất hiện các

phần tử ảo.

II.3.3.2.2.4 Xung khắc thực chất trong phân tích

Giao tác dài thực hiện một phân tích nào đó trên cả bảng, ví dụ, tính tổng số tiền

có trong các tài khoản khách hàng của môt ngân hàng cho kế toán trưởng. Giả sử trong tất

cả các tài khoản đều có số tiền 100$. Giao tác ngắn trong thời gian đó thực hiện việc chuyển

50$ từ một tài khoản vào tài khoản khác, vậy tổng số tiền trong các tài khoản không thay

đổi.

Giao tác A Thời điểm Giao tác B

− S-phong toả tài khoản P1- thành công t1

− Đọc tài khoản P1=100 và tính tổng. t2

SUM=100

− t3 X-phong toả tài khoản P3- thành công

− t4 Lấy tiền từ tài khoản P3.

80

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

− t5 X-phong toả tài khoản P1- bị từ chối

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

− Chờ đợi: t6

Chờ đợi: S-phong toả tài khoản P2- thành công t7

Chờ đợi: Đọc tài khoản P2=100 và tính tổng. t8

SUM=200

Chờ đợi: S-phong toả tài khoản P3- bị từ chối t9

Chờ đợi: Chờ đợi: t10

Chờ đợi: Chờ đợi:

Hình II.13 Xung khắc trong phân tích - Xung khắc thực chất trong phân tích

Kết quả: Cả hai giao tác chờ đợi lẫn nhau và không thể tiếp tục. Xuất hiện tình

huống bế tắc (deadlocks).

II.3.3.2.2.5 Giải quyết (gỡ bỏ) các tình huống bế tắc

Như vậy với việc sử dụng giao thức truy cập dữ liệu với sự giúp đỡ của các phong

toả, một phần các vấn đề đã được giải quyết, nhưng lại xuất hiện vấn đề mới – các tình

huống bế tắc:

− Vấn đề mất kết quả cập nhật (sửa đổi) dữ liệu – xuất hiện bế tắt.

− Vấn đề phụ thuộc không được ghi lại (đọc dữ liệu bẩn, đọc không chuẩn) – vấn

đề đã được giải quyết.

− Đọc không lặp lại − vấn đề đã được giải quyết.

− Xuất hiện các phần tử ảo − vấn đề chưa được giải quyết.

− Vấn đề phân tích xung khắc – xuất hiện bế tắc.

Các bế tắc có hình dạng chung như sau:

Giao tác A Giao tác B Thời

điểm

− Phong toả đối tượng P1 - thành công t1

− t2 Phong toả đối tượng P2 - thành công

− Phong toả đối tượng P2- xung đột với t3

81

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

phong toả đã được thiết đặt bởi giao tác

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

B

Chờ đợi: t4 Phong toả đối tượng P1- xung đột với

phong toả đã được thiết đặt bởi giao tác

A

Chờ đợi: Chờ đợi: t5

Chờ đợi: Chờ đợi:

Hình II.14 Ví dụ tình huống bế tắc

Như đã thấy, tình huống bế tắc có thể xuất hiện khi có mặt không dưới hai giao

tác. Mỗi giao tác trong chúng thực hiện ít nhất hai thao tác. Trong thực tế, trong các tình

huống bế tắc có thể tham gia một số lượng lớn các giao tác, và chúng chờ đợi lẫn nhau.

Bởi vì không có lối thoát bình thường từ các tình huống bế tắc, nên các tình

huống này cần phải được nhận biết và tháo gỡ. Phương pháp giải quyết tình huống bế tắc là

từ chối một (giao tác này được gọi là giao tác hiến sinh) trong các giao tác như thế nào đó,

để tất cả các giao tác còn lại có thể tiếp tục thực thi công việc của mình một cách bình

thường. Sau khi tháo gỡ tình huống bế tắc, giao tác đã được chọn làm vật hiến sinh có thể

được thực thi lại từ đầu.

Về nguyên tắc có thể đưa ra hai cách tiếp cận với việc nhận biết tình huống bế tắc

và chọn giao tác hiến sinh:

− HQT CSDL không theo dõi sự xuất hiện các bế tắc. Các giao tác tự ra quyết

định, nó sẽ là giao tác hiến sinh hay không.

− HQT CSDL theo dõi sự xuất hiện các bế tắc, và nó tự ra quyết định giao tác nào

sẽ là vật hiến sinh.

Cách tiếp cận đầu tiên đặc trưng cho các HQT CSDL “để bàn”, ví dụ như

FoxPro… Cách này đơn giản hơn và không đòi hỏi các nguồn lực phụ trợ của hệ thống. Các

giao tác sẽ được cho một thời gian nào đó để chờ đợi (hoặc một số thử nghiệm phong toả

nào đó). Và trong thời gian đó giao tác sẽ thử nghiệm thiết đặt các phong toả. Nếu như sau

thời gian đó hoặc sau số lượng các thử nghiệm thiết đặt phong toả đó mà không có thiết đặt

phong toả nào thành công, thì giao tác sẽ bị rollback, hoặc là phát sinh ra tình huống lỗi. Vì

sự đơn giản, cách này phải trả giá bằng việc các giao tác hiến sinh đ ược chọn một cách ngẫu

82

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

nhiên. Và kết quả là vì một giao tác đơn giản có thể rollback các giao tác “đáng giá hơn

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

nhiều”, mà đến thời điểm đó hệ thống đã bỏ ra một thời gian và nguồn lực lớn để thực thi

chúng.

Cách thứ hai đặc trưng cho các HQT CSDL công nghiệp, ví dụ như Oracle, MS

SQL Server,… Trong trường hợp này hệ thống tự động theo dõi sự xuất hiện các tình huống

bế tắc, bằng cách xây dựng hoặc hỗ trợ liên tục đồ thị (graph) chờ đợi của các giao tác. Đồ

thị chờ đợi giao tác là một đồ thị hai lá (двудольный?), mà trong đó tồn tại hai thể loại

đỉnh: − các đỉnh tương ứng với các giao tác, và – các đỉnh tương ứng các đối tượng bị chiếm

lĩnh (phong toả). Tình huống bế tắc xuất hiện, nếu trong đồ thị có ít nhất một vòng lặp. Một

trong các giao tác rơi vào vòng lặp cần phải rollback. Nhưng khi đó hệ thống sẽ tự chọn một

giao tác hiến sinh tương ứng với những sự cân nhắc trị giá n ào đó, ví dụ, giao tác ngắn nhất,

hoặc giao tác có ưu tiên nhỏ nhất,…

II.3.3.2.2.6 Phong toả có chủ định (Chiếm lĩnh đồng bộ bằng cách tán nhỏ)

(Гранулированные синхронизационные захваты)

Từ phân tích hành vi các giao tác dễ nhận thấy rằng, việc sử dụng giao thức truy

cập dữ liệu không tháo gỡ được vấn đề các phần tử ảo. Điều đó là có thể, bởi vì chúng ta chỉ

nghiên cứu các phong toả ở cấp độ bản ghi. Có thể xem xét việc phong toả các đối tượng

khác của CSDL:

− phong toả chính CSDL.

− Phong toả các tệp của CSDL.

− Phong toả các bảng của CSDL.

− Phong toả các trang dữ liệu. Đơn vị trao đổi với ổ đĩa thường là 2-16kB. Trong

một trang có thể chứa vài bản ghi của một hoặc nhiều bảng.

− Phong toả các bản ghi riêng lẽ của bảng.

− Phong toả các trường riêng lẽ.

Ngoài ra có thể phong toả chỉ mục, các đầu mục của các bảng hoặc các đối tượng

khác.

Đối tượng phong toả càng lớn thì khả năng làm việc song song càng nhỏ. Ưu

điểm của các phong toả các đối tượng lớn là giảm thiểu các chi phí gián tiếp của hệ thống,

và giải quyết các vấn đề không thể giải quyết bằng cách phong toả các đối tượng nhỏ hơn.

Ví dụ, rõ ràng việc sử dụng phong toả độc quyền (độc chiếm) trên cấp độ bảng có thể giải

83

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

quyết vấn đề các phần tử ảo.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Về nguyên tắc các HQT CSDL hiện đại hỗ trợ phong toả cấp độ thấp nhất là các

bản ghi và trang dữ liệu. Tồn tại một số số phiên bản HQT CSDL hỗ trợ phong toả ở cấp độ

các trường riêng lẽ.

Khi sử dụng các phong toả các đối tượng ở các cấp độ khác nhau xuất hiện vấn đề

phát hiện các phong toả đã được thiết đặt. Nếu như giao tác A thử nghiệm phong toả một

bảng, thì cần phải có thông tin về việc đã có phong toả nào xung khắc với phong toả bảng

đã được thiết đặt lên các bản ghi của bảng đó hay chưa. Để giải quyết vấn đề đó sử dụng

giao thức phong toả có chủ định (протокол преднамеренных блокировок), là phiên bản

mở rộng của giao thức truy cập dữ liệu. Bản chất của giao thức này là trước khi thiết đặt một

phong toả nào đó lên đối tượng, ví dụ, bản ghi của bảng, cần phải thiết đặt một phong toả

đặc biệt có chủ định, hay còn gọi là phong toả đồng bộ bằng cách tán nhỏ lên các đối

tượng, mà thành phần của nó bao gồm các đối tượng bị phong toả − lên bảng chứa bản ghi,

lên tệp tin chứa bản, lên CSDL chứa tệp tin. Và khi đó sự có mặt của phong toả có chủ định

chứng thực cho sự có mặt của việc phong toả bản ghi và đối với giao tác thử nghiệm phong

toả toàn bộ bảng không cần phải kiểm tra sự có mặt của sự phong toả từng bản ghi. Chính

xác hơn, các thể loại phong toả sau đây được đưa vào:

− Phong toả có chủ định với khả năng truy cập cùng nhau (IS-phong toả −

Intented for Shared locks). Thiết đặt lên một đối tượng tổng hợp T nào đó và có chủ định

phong toả một đối tượng thành phần nào đó của đối tượng T ở chế độ S-phong toả. Ví dụ,

khi chủ định đọc những bản ghi từ bảng T, thì bảng đó phải bị phong toả ở chế độ IS, mà

trước đó ở chế độ như thế tệp tin chứa bảng cần phải bị phong toả.

− Phong toả có chủ định không truy cập cùng nhau (IX-phong toả − Intented

for eXclusive lock). Thiết đặt trên một đối tượng tổng hợp T nào đó và chủ định phong toả

một đối tượng thành phần nào đó của T ở chế độ X-phong toả. Ví dụ, khi chủ định xoá hoặc

sửa đổi một bản ghi nào đó từ bảng T, bảng T phải bị phong toả ở chế độ IX-phong toả, và

trước đó tệp tin chứa bảng T phải được phong toả ở chế độ IX-phong toả.

− Phong toả có chủ định cả với khả năng truy cập cùng nhau và cả không truy

cập cùng nhau (SIX-phong toả − Shared, Intented for eXclusive lock). Thiết đặt trên một

đối tượng tổng hợp T nào đó và phong toả cùng chia sẻ X-phong toả toàn đối tượng đó và

chủ định ngay sau đó thiết đặt phong toả những đối t ượng thành phần nào đó của T ở chế độ

84

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

X-phong toả. Ví dụ, nếu một giao tác dài đang được thực thi để xem một bảng với khả năng

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

xoá một vài bản ghi trong số các bản ghi đang xem, thì có thể phong toả bảng đó ở chế độ

SIX-phong toả, và tất nhiên, trước đó cần phong toả tệp chứa bảng ở chế độ IS.

Các IS, IX và SIX-phong toả cần phải được thiết đặt lên các đối tượng phức hợp

của CSDL như bảng, tệp tin… Ngoài ra, các phong toả S- và X- có thể được thiết đặt lên

các đối tượng phức hợp. Bảng tương dung của các phong toả có dạng sau:

Giao tác B thử nghiệm thiết đặt phong toả lên

bảng:

Giao tác A đã thiết đặt lên bảng phong IS S IX SIX X

toả:

IS Có Có Có Có Không

S Có Có Không Không Không

IX Có Không Có Không Không

SIX Có Không Không Không Không

X Không Không Không Không Không

Bảng II.3 Bảng tính tương dung mở rộng của các phong toả

Giao thức phong toả có chủ định cho việc truy cập đến dữ liệu được định nghĩa

chính xác hơn như sau:

1. Khi thiết đặt X-phong toả lên một đối tượng phức hợp thì một cách ngầm định,

X-phong toả cũng được thiết đặt lên các đối tượng con của đối tượng đó.

2. Khi thiết đặt S- hoặc SIX-phong toả lên một đối tượng phức hợp thì một cách

ngầm định, S-phong toả cũng được thiết đặt lên các đối tượng con của đối tượng đó.

3. Trước khi giao tác thiết đặt S- hoặc IS-phong toả lên đối tượng đã cho, nó cần

phải thiết đặt IS-phong toả hoặc mạnh hơn ít nhất là lên một đối tượng cha của đối tượng

đó.

4. Trước khi giao tác thiết đặt X-, IX- hoặc SIX-phong toả lên đối tượng đã cho,

nó cần phải thiết đặt IS-phong toả hoặc mạnh hơn lên tất cả các đối tượng cha (thế hệ

trước?) của đối tượng đó.

5. Trước khi dở bỏ phong toả cho giao tác hiện thời phải dở bỏ tất cả các phong

85

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

toả lên tất cả các đối tượng hậu duệ của nó.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Khái niệm độ mạnh tương đối của các phong toả có thể miêu tả bằng biểu đồ ưu

tiên sau (càng lên đỉnh thì phong toả càng mạnh, càng xuống dưới càng yếu):

Hình II.15 Biểu đồ độ mạnh của các phong toả

Chú ý: Giao thức phong toả có chủ định không được định nghĩa chính xác nhưng

phong toả nào cần phải được thiết đặt lên đối tượng cha nếu thiết đặt phong toả lên đối

tượng con. Ví dụ, khi chủ định thiết đặt S-phong toả lên các bản ghi của một bảng chứa

bảng đó, có thể thiết đặt bất kỳ phong toả nào trong số IS-, S-, IX-, SIX-, và X-phong toả

lên bảng đó. Khi chủ định thiết đặt X-phong toả lên các bản ghi của một bảng chứa các bản

ghi đó, thì có thể thiết đặt bất kỳ phong toả nào trong số IX-, SIX- và X- lên bảng đó.

Bây giờ chúng ta sẽ xem xét vấn đề các phần tử ảo được giải quyết như thế nào

khi sử dụng giao thức phong toả có chủ định để truy cập đến dữ liệu.

Giao tác A hai lần select các bản ghi từ một bảng với cùng một điều kiện. Giữa

hai lần đọc của giao tác A xuất hiện giao tác B, v à giao tác B thêm vào bảng đó bản ghi mới

thoả mãn điều kiện select của giao tác A.

Giao tác B trước khi thử nghiệm thêm một bản ghi mới vào bảng cần phải thiết

đặt IX-phong toả, hoặc mạnh hơn lên bảng đó. Khi đó để dự phòng khả năng xung đột, giao

thức A cần phải thiết đặt lên bảng một phong toả như vậy để ngăn cản giao tác B thiết đặt

IX-phong toả. Theo bảng tương dung của các phong toả có thể xác định, rằng giao tác A cần

phải thiết đặt lên bảng S-, SIX- hoặc X-phong toả. Phong toả IS- không đủ bởi vì nó cho

86

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

phép giao tác B thiết đặt phong toả IX- để sau đó thêm bản ghi mới vào bảng.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Giao tác A Thời Giao tác B

điểm

− S-phong toả lên bảng (với t1

mục đích phong toả các bản

ghi) – thành công

− S- phong toả lên các bản ghi t2

thoả mãn điều kiện α.

(phong toả n bản ghi)

− Select các bản ghi thoả mãn t3

điều kiện α.

(select n bản ghi)

− IX-phong toả lên bảng (Với mục đính sau đó thêm t4

bản ghi) – bị từ chối vì xung đột với S-phong toả

được thiết đặt bởi giao tác A

Chờ đợi: − t5

Chờ đợi: − t6

Chờ đợi: S-phong toả các bản ghi thoả t7

mãn điều kiện α.

(phong toả n bản ghi)

Select các bản ghi thoả mãn Chờ đợi: t8

điều kiện α.

(select n bản ghi)

Cố định giao tác – dỡ bỏ các Chờ đợi: t9

phong toả

− IX-phong toả bảng(với mục đích sau đó thêm bản t10

ghi) – thành công

− Thêm bản ghi mới thoả mãn điều kiện α. t11

87

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

− Cố định giao tác t12

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Giao tác A hai lần chọn

cùng những bản ghi đó. Tất

cả đều đúng!

Hình II.16 Phong toả đặc biệt có chủ định

Kết quả: Vấn đề các phần tử ảo đã được giải quyết, nếu như giao tác A sử dụng S-

phong toả có chủ định hoặc là một phong toả mạnh hơn.

Chú ý: Bởi vì giao tác dự định chỉ đọc các bản ghi của bảng, nên điều kiện cần

thiết tối thiểu tương ứng với giao thức phong toả có chủ định là IS-phong toả có chủ định

lên bảng. Nhưng đồng thời phong toả đó không ngăn cản được sự xuất hiện các phần tử ảo.

Như vậy, giao tác A có thể được phóng với các mức độ cô lập khác nhau – ngăn cản hay là

cho phép sự xuất hiện các phần tử ảo. Mặc dù vậy, cả hai cách phóng đều tương ứng với

giao thức phong toả có chủ định để truy cập đến dữ liệu.

II.3.3.2.3 Phong toả theo mệnh đề

Một phương pháp phong toả nữa là không phải phong toả các đối tượng của

CSDL mà phong toả các điều kiện các đối tượng có thể thoả mãn. Các phong toả này được

gọi là những phong toả theo mệnh đề.

Bởi vì bất cứ thao tác nào trên CSDL quan hệ cũng đều được cho những điều kiện

nào đó, nghĩa là, trong chúng không chỉ ra tổ hợp các đối tượng cụ thể của CSDL mà trên đó

thao tác sẽ được thực thi, mà là điều kiện các đối tượng thuộc tổ hợp đó thoả mãn. Nên một

phương pháp rất tiện dụng là các S- và X-phong toả được thiết đặt lên chính điều kiện đó.

Tuy nhiên trên thực tế thử nghiệm ứng dụng cách đó trong các HQT CSDL thực tiễn xuất

hiện khó khăn trong việc xác định sự tương dung (tương quan) của các điều kiện khác nhau.

Rõ ràng, trong ngôn ngữ SQL cho phép các điều kiện cùng với truy vấn bên trong sub-query

và cùng với các mệnh đề phức tạp khác. Vấn đề tương quan tương đối dễ giải quyết cho các

trường hợp điều kiện đơn giản và có dạng:

{Tên_thuộc_tính {= | <> | > | >= | < | <=} Giá_trị}

88

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

[{OR | AND} { Tên_thuộc_tính {= | <> | > | >= | < | <=} Giá_trị }.,..]

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Vấn đề các phần tử ảo có thể được giải quyết rất dễ dàng nhờ sự giúp đỡ của các

phong toả theo mệnh đề, bởi vì mỗi bảng có một mệnh đề xác nhận những bản ghi nào được

chứa trong bảng và phong toả bảng cũng chính là phong toả theo mệnh của bảng đó.

II.3.3.2.4 Cơ chế tách phiên bản dữ liệu

Sử dụng các phong toả đảm bảo tính tuần tự của các kế hoạch thực thi (lịnh trình

phóng) hỗn hợp các giao tác nhưng phải trả giá bằng sự chậm lại của công việc của cả hệ

th ống − các giao tác xung đột phải chờ đợi cho đến khi giao tác đầu tiên phong toả một đối

tượng nào đó chưa giải phóng nó. Không thể thiếu các phong toả nếu như các giao tác đều

thay đổi dữ liệu. Nhưng nếu như trong hỗn hợp các giao tác bao gồm các giao tác thay đổi

dữ liệu cũng như các giao tác chỉ đọc dữ liệu, thì có thể áp dụng một cơ chế khác không có

các khiếm khuyết như các phương pháp sử dụng các phong toả để đảm bảo tính tuần tự.

Phương pháp này bao hàm trong ý tưởng, rằng các giao tác đọc dữ liệu được cung cấp,

giống như, một phiên bản dữ liệu “của mình” có từ lúc các giao tác đó được bắt đầu. Trong

khi đó giao tác không thiết đặt các phong toả lên những dữ liệu đang được đọc, và vì thế, nó

không phong toả các giao tác thay đổi dữ liệu khác. Cơ chế này được gọi là cơ chế tách

phiên bản dữ liệu và bao hàm trong việc sử dụng các nhật ký giao tác để tạo ra các phiên

bản dữ liệu khác nhau.

Nhật ký dữ liệu có mục đích để thực hiện thao tác rollback giao tác khi giao tác

không được thực thi thành công hoặc là để khôi phục dữ liệu sau các sự cố. Nhật ký giao tác

chứa các bản sao cũ của dữ liệu đã được thay đổi bởi các giao tác.

Một cách ngắn gọn, bản chất của phương pháp bao hàm sau đây:

− Cho mỗi giao tác hay truy vấn số hiện thời của hệ thống (SCN − System

Current Number) được nhớ lại. Giao tác được bắt đầu càng muộn, số SCN của nó càng lớn.

− Khi ghi một trang dữ liệu lên ổ đĩa SCN của giao tác thực hiện việc ghi đó cũng

được cố định. SCN đó sẽ trở thành số hệ thống hiện thời của trang dữ liệu.

− Các giao tác chỉ đọc dữ liệu, không phong toả đối tượng nào trong CSDL.

− Nếu như giao tác A đọc một trang dữ liệu, thì SCN của giao tác A được so sánh

với SCN của trang dữ liệu được đọc.

− Nếu SCN của giao tác A lớn hơn hoặc bằng SCN của trang dữ liệu được đọc,

89

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

thì giao tác A đọc trang dữ liệu đó.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

− Nếu SCN của giao tác A nhỏ hơn SCN của trang dữ liệu được đọc, thì có nghĩa

là một giao tác B nào đó đã thay đổi thành công hoặc đang thay đổi dữ liệu trang đó. Trong

trường hợp đó giao tác A sẽ xem qua nhật ký giao tác về trước để tìm bản ghi đầu tiên về sự

thay đổi của trang dữ liệu cần thiết với SCN nhỏ hơn SCN giao tác A. Khi tìm được bản ghi

như thế, giao tác A sử dụng phiên bản dữ liệu cũ của trang.

Bây giờ chúng ta sẽ xem xét ví dụ, vấn đề phân tích xung khắc được giải quyết

như thế nào khi sử dụng cơ chế tách phiên bản dữ liệu.

Giao tác dài thực hiện một phân tích nào đó trên cả bảng, ví dụ, tính tổng tất cả số

tiền có trong các tài khoản khách hàng của một ngân hàng cho kế toán trưởng. Giả sử trong

tất cả các tài khoản có cùng số tiền 100$. Giao tác ngắn trong thời gian đó chuyển 50$ từ

một tài khoản vào một tài khoản khác. Như vậy tổng số tiền trong tất cả các tài khoản vẫn

không đổi.

Giao tác A Giao tác B Thời

điểm

− Kiểm tra SCN tài khoản P1 - SCN giao tác lớn hơn t1

SCN tài khoản.

Đọc tài khoản P1=100 (không thiết đặt phong toả)

và tính tổng.

SUM =100

− t1 X-phong toả tài khoản P3-

thành công

− t1 Rút tiền từ tài khoản P3.

− t1 X-phong toả tài khoản P1-

thành công

− t1 Đặt tiền vào tài khoản P1.

90

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

− Cố định giao tác t1

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

(dỡ bỏ phong toả)

− Kiểm tra SCN tài khoản P2- SCN giao tác lớn hơn t1

SCN tài khoản.

Đọc tài khoản P2 =100 (không thiết đặt phong toả)

và tính tổng.

SUM = 200

− SCN giao tác NHỎ − Kiểm tra SCN tài khoản P3 t1

HƠN SCN tài khoản.

Đọc phiên bản cũ của tài khoản P3 =100 và tính

tổng.

SUM =300

− Cố định giao tác t1

Tổng tất cả các tài khoản được tính đúng.

Hình II.17 Cơ chế tách phiên bản dữ liệu

Kết quả: Giao tác bắt đầu đầu tiên A không kiềm hãm giao tác tương tranh B. Khi

nhận thấy xung đột (đọc tài khoản 3 đã được thay đổi), giao tác A được cung cấp phiên bản

dữ liệu của mình mà đã có vào thời điểm giao tác A được bắt đầu.

II.3.3.3 Phương pháp mốc thời gian

Một phương pháp khác rất tốt để tuần tự hoá các giao tác trong các điều kiện của

những xung đột hiếm thấy của các giao tác và không đòi hỏi xây dựng đồ thị (graph) chờ

đợi của các giao tác được xây dựng trên cơ sở sử dụng các mốc thời gian.

Phương pháp này cũng có rất nhiều hình thái khác nhau, nhưng ý tưởng chính của

nó bao hàm: nếu giao tác A được bắt đầu trước giao tác B, thì hệ thống đảm bảo một chế độ

thực thi, giống như là A đã được thực thi hoàn toàn trước khi bắt đầu B.

Và như thế, mỗi giao tác T được thêm một mốc thời gian t tương ứng với thời

điểm bắt đầu giao tác T. Trong quá trình thực thi thao tác trên đối tượng r của CSDL, giao

tác T đánh dấu nó bằng mốc thời gian của mình và kiểu thao tác (đọc hay là ghi).

91

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

Trước khi thực thi thao tác r giao tác B thực hiện các bước sau:

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

− Kiểm tra xem giao tác đã đánh dấu r là giao tác A đã hoàn tất hay chưa. Nếu

như A đã hoàn tất, B đánh dấu r bằng mốc thời gian của mình và thực thi thao tác.

− Nếu như giao tác A chưa được hoàn tất, thì giao tác B kiểm tra sự xung đột giữa

các thao tác. Nếu các thao tác không xung đột nhau, thì cho đối tượng r sẽ còn lại như cũ

hoặc được ghi vào một mốc thời gian với giá trị nhỏ hơn (sớm hơn), và giao tác B thực thi

thao tác của mình.

− Nếu như các thao tác của các giao tác A và B xung đột với nhau, thì: a) nếu t(A)

> t(B) (nghĩa là giao tác A “trẻ” hơn giao tác B), thì giao tác A nhận mốc thời gian mới và

rollback, sau đó được bắt đầu trở lại từ đầu. Còn giao tác B tiếp tục công việc của mình.

− b) nếu t(A)

mốc thời gian mới và rollback, sau đó được bắt đầu lại từ đầu. Giao tác A tiếp tục công việc

của mình.

Kết quả là hệ thống đảm bảo công việc mà khi xuất hiện xung đột giao tác trẻ hơn

(được bắt đầu muộn hơn) sẽ bị rollback.

Dễ nhận thấy rằng phương pháp này cũng có khiếm khuyết giống như trên, nghĩa

là có thể một giao tác được bắt đầu sau nhưng “trị giá hơn” bị rollback. Thứ hai là phương

pháp này dẫn tới việc các giao tác có thể bị rollback thường xuyên hơn trường hợp sử dụng

các phong toả. Đó là bởi vì sự xung đột giữa các giao tác được xác định một cách mang tính

chất “án chừng, đại khái” hơn. Ngoài ra, việc chọn một mốc thời gian toàn cục với quan hệ

полного порядка (Nếu với mọi cặp phần tử a và b của tập hợp tồn tại hoặc a>b hoặc a=b

hoặc a

II.3.3.4 Triển khai tính cô lập các giao tác bằng các công cụ SQL

II.3.3.4.1 Các mức độ cô lập

Chuẩn SQL không tính đến khái niệm phong toả để triển khai tính tuần tự một

hỗn hợp các giao tác. Thay vào đó khái niệm mức độ cô lập được đưa vào. Cách tiếp cận

này đảm bảo các yêu cầu cần thiết cho tính cô lập các giao tác, và để ngỏ khả năng các nhà

sản xuất các HQT CSDL khác nhau có thể triển khai các yêu cầu đó theo cách của mình, cụ

thể, với việc sử dụng các phong toả hoặc là tách các phiên bản dữ liệu.

Chuẩn SQL xem xét 4 mức độ cô lập:

92

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

− READ UNCOMMITTED – Mức độ đọc không hoàn tất.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

− READ COMMITTED - Mức độ đọc hoàn tất.

− REPEATABLE READ - Mức độ đọc lặp lại.

− SERIALIZABLE – Mức độ có khả năng tuần tự.

Nếu như tât cả các giao tác đều được thực thi ở mức độ cô lập mặc định là mức

độ có khả năng tuần tự, thì việc thực thi bất kỳ một tập hợp các giao tác song song n ào cũng

có thể được tuần tự. Nếu như những giao tác nào đó được thực thi ở các mức độ thấp hơn,

thì có rất nhiều cách phá huỷ khả năng tuần tự. Trong chuẩn SQL có ba trường hợp phá huỷ

khả năng tuần tự đặc biệt được tách ra, thực tế đó là những trường hợp đã được miêu tả ở

trên như là những vấn đề của tính song song:

− Đọc không chuẩn (“đọc bẩn”, phụ thuộc không được ghi lại)

− Đọc không lặp lại (trường hợp riêng lẽ của xung khắc trong phân tích)

− Các phần tử ảo (phantom − trường hợp riêng lẽ của xung khắc trong phân tích)

Chuẩn SQL không cho phép đánh mất kết quả sửa đổi dữ liệu, nghĩa là, ở mức độ

cô lập thấp nhất các giao tác cũng phải làm việc như thế nào đó để không bỏ qua trường hợp

mất kết quả cập nhật.

Các mức độ cô lập khác nhau được định nghĩa theo khả năng có thể hoặc loại bỏ

các trường hợp đặc biệt phá huỷ khả năng tuần tự đó. Các định nghĩa đó được mô tả trong

bảng sau:

Mức độ cô lập Đọc không chuẩn Đọc không lặp lại Các phần tử ảo

Có Có Có READ UNCOMMITTED

Có Có READ COMMITTED Không

Có REPEATABLE READ Không Không

Không SERIALIZABLE Không Không

Bảng II.4 Các mức độ cô lập của chuẩn SQL

II.3.3.4.2 Cú pháp các lệnh SQL để định nghĩa mức độ cô lập

Mức độ cô lập được cho bởi câu lệnh sau:

SET TRANSACTION {ISOLATION LEVEL

{READ UNCOMMITTED

| READ COMMITTED

93

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

| REPEATABLE READ

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

| SERIALIZABLE}

| {READ ONLY | READ WRITE}}.,..

Câu lệnh này định nghĩa chế độ thực thi của giao tác tiếp theo, nghĩa là nó không

ảnh hưởng đến sự thay đổi chế độ của giao tác hiện tại đưa ra nó. Thường thì việc thực thi

câu lệnh SET TRANSACTION được tách ra như một giao tác riêng biệt:

: (Giao tác trước được thực thi với mức độ cô lập của mình)

COMMIT;

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

COMMIT;

: (Giao tác tiếp theo sẽ được thực thi với mức độ cô lập REPEATABLE READ)

Nếu như mệnh đề ISOLATION LEVEL được đưa ra, thì đi sau đó cần phải có

một trong các thông số ấn định mức độ cô lập.

Ngoài ra có thể đưa ra các dấu hiệu như READ ONLY hoặc READ WRITE. Nếu

dấu hiện READ ONLY được đưa ra, thì giả thuyết là giao tác sẽ chỉ đọc dữ liệu. Nếu thử

nghiệm ghi dữ liệu trong giao tác đó thì sẽ có một lỗi được tạo ra. Dấu hiệu READ ONLY

được đưa ra với mục đích bỏ ngõ khả năng các nhà sản xuất HQT CSDL giảm thiểu số

lượng các phong toả bằng cách thực thi các phương pháp tuần tự hoá khác, ví dụ phương

pháp tách phiên bản dữ liệu.

Câu lệnh SET TRANSACTION cần phải thoả mãn các điều kiện sau:

− Nếu như không có mệnh đề ISOLATION LEVEL, thì mặc định nó sẽ là

SERIALIZABLE.

− Nếu như dấu hiệu READ WRITE được đưa ra, thì thong số ISOLATION

LEVEL không thể nhận giá trị READ UNCOMMITTED.

− Nếu như thông số ISOLATION LEVEL được xác định là READ

UNCOMMITTED, thì giao tác sẽ theo mặc định trở thành READ ONLY. Trong trường hợp

ngược lại, nó sẽ là READ WRITE.

94

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

a. Phong toả theo thuộc tính(?)

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Chương II.4 Các giao tác và phục hồi dữ liệu

Trong phần này chúng ta sẽ nghiên cứu các khả năng phục hồi dữ liệu sau các sự

cố hệ thống, tương ứng với tính chất (D) của giao tác − tính lâu bền.

Yêu cầu chính về tính lâu bền dữ liệu của các giao tác là dữ liệu của các giao tác

đã được cố định cần phải được lưu trữ trong hệ thống, thậm chí vào thời điểm ngay sau đó

xảy ra sự cố hệ thống. Cảm giác rằng, cách tốt nhất để đảm bảo điều đó là ghi lại tất cả các

thay đổi dữ liệu lên các ổ đĩa ngay trong thời gian thực thi các thao tác. Tuy vậy, phương

pháp này không đáp ứng yêu cầu vì có sự khác nhau lớn giữa tốc độ làm việc với RAM và

với bộ nhớ ngoài. Cách duy nhất để đạt được tốc độ và hiệu quả công việc khả thi cho các

HQT CSDL đó là tạo bộ nhớ đệm cho các trang dữ liệu của CSDL trong RAM. Có nghĩa là

dữ liệu được ghi lên bộ nhớ vĩnh viễn bên ngoài không phải ngay lập tức sau khi thực hiện

các thay đổi dữ liệu, mà là sau một thời gian nào đó (thường là lâu). Vậy nhưng phải có

những thông tin nào đó còn lại trong bộ nhớ ngoài, nếu không thì sẽ không có gì để phục vụ

việc khôi phục dữ liệu.

Yêu cầu tính căn bản của các giao tác khẳng định, rằng các giao tác chưa được

hoàn tất hoặc đã rollback nhất thiết không được để lại dấu vết trong CSDL. Điều đó có

nghĩa là dữ liệu được giữ lại trong CSDL với một mức độ dư thừa nào đó, để có thể cho

phép có thông tin cần thiết phục vụ việc khôi phục lại CSDL v ào trạng thái ở thời điểm giao

tác không được hoàn tất bắt đầu. Sự dư thừa này thường được đảm bảo bởi nhật ký giao tác.

Nhật ký giao tác chứa thông tin chi tiết về các thao tác có thể sửa đổi dữ liệu trong CSDL,

cụ thể là giá trị cũ và giá trị mới của đối tượng được sửa đổi, SCN của giao tác thực hiện

việc sửa đổi và các thông tin khác.

Như vậy, mục đích chung của việc ghi nhật ký các thay đổi CSDL là đảm bảo khả

năng phục hồi trạng thái toàn vẹn của CSDL sau bất kỳ sự cố nào. Bởi vì cơ sở của việc hỗ

trợ trạng thái toàn vẹn của CSDL là cơ chế các giao tác, nên nhật ký và khôi phục liên quan

mật thiết với khái niệm giao tác. Hai nguyên tắc chung của việc khôi phục CSDL đó là:

− Kết quả của các giao tác đã được hoàn tất cần phải được lưu trữ trong trạng thái

đã được khôi phục của CSDL.

− Kết quả của các giao tác chưa được hoàn tất nhất thiết không được có mặt trong

95

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

trạng thái đã được khôi phục của CSDL.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Điều đó đặc biệt có nghĩa trạng thái toàn vẹn cuối cùng theo thời gian của CSDL

sẽ được khôi phục.

II.4.1 Nhật ký và ghi nhớ trung gian (buffering)

Việc ghi nhật ký không những liên quan mật thiết với việc điều khiển các giao

tác, mà còn với việc tạo bộ nhớ đệm cho các trang CSDL trong RAM.

Nếu như bản ghi về sự thay đổi của CSDL nhất thiết phải được cho vào nhật ký

khi thực thi bất kỳ thao tác để thay đổi CSDL nào, thực tế cũng cần phải lưu trữ trong bộ

nhớ ngoài ngay lập tức, thì nó sẽ dẫn đến sự kiềm hãm công việc của cả hệ thống một cách

nghiêm trọng. Vì vậy các bản ghi đó cũng được đệm hoá: Ở chế độ làm việc thông thường,

trang tiếp theo sẽ được đẩy ra bộ nhớ ngoài của nhật ký chỉ khi nào trang đó được ghi đầy

bởi các bản ghi.

Nhưng tình huống thực tế thì phức tạp hơn nhiều. Có hai kiểu tạo bộ đệm − tạo bộ

đệm nhật ký và tạo bộ đệm các trang của RAM chứa các thông tin liên quan. Vấn đề là ở

việc tạo ra một chính sách chung để đẩy bộ đệm ra bộ nhớ ngoài nào đó, mà có thể đảm bảo

các khả năng khôi phục trạng thái của CSDL sau khi xảy ra sự cố.

Các trang dữ liệu có nội dung đang được lưu trữ trong bộ đệm, được gọi là các

trang “b ẩn−dirty”. Hệ thống cập nhật danh sách các trang bẩn một cách thường xuyên, gọi

là danh sách bẩn. Việc ghi các trang bẩn từ bộ đệm lên bộ nhớ ngoài gọi là đẩy các trang

ra bộ nhớ ngoài. Rõ ràng, cần phải tính đến các quy luật nào đó việc đẩy các bộ đệm CSDL

và bộ đệm nhật ký giao tác đảm bảo các yêu cầu sau:

− Tốc độ thực thi các thao tác cao nhất. Rõ ràng thực thi việc đẩy bộ đệm ra bộ

nhớ ngoài càng thưa càng tốt. Trường hợp lý tưởng đó là dung lượng bộ nhớ RAM không

giới hạn và trong hệ thống không bao giờ xảy ra sự cố. Và khi đó cả CSDL sẽ được tạo bộ

đệm, hệ thống làm việc với CSDL trong RAM, và chỉ cần thực hiện việc đẩy ra bộ nhớ

ngoài một lần duy nhất vào thời điểm kết thúc công việc của cả hệ thống.

− Đảm bảo khôi phục lại trạng thái toàn vẹn cuối cùng của CSDL. Nghĩa là khi

xảy ra sự cố, đảm bảo dữ liệu của các giao tác đã được cố định cần được khôi phục lại, còn

dữ liệu của các giao tác chưa được cố định bị xoá vĩnh viễn không để lại dấu vết.

Như vậy, có hai lý do để đẩy bộ đệm ra bộ nhớ ngoài một cách tuần hoàn, đó là

96

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

sự hạn chế của dung lượng RAM và khả năng xảy ra sự cố.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Nguyên tắc chính của chính sách đẩy bộ đệm nhật ký và bộ đệm các trang CSDL

ra bộ nhớ ngoài là bản ghi về sự thay đổi đối tượng CSDL cần phải có mặt trong bộ nhớ

ngoài của nhật ký sớm hơn, so với đối tượng CSDL bị thay đổi được cố định trong bộ nhớ

ngoài. Giao thức tương ứng để ghi nhật ký và điều khiển việc tạo bộ đệm được gọi là Write

Ahead Log (WAL − đầu tiên hãy ghi vào nhật ký), và bao hàm rằng, nếu cần thiết phải đẩy

ra bộ nhớ ngoài đối tượng đã thay đổi của CSDL, thì phải đảm bảo trước đó đã đẩy nhật ký

ghi lại các thay đổi đó ra bộ nhớ ngoài.

Nói cách khác, nếu như trong bộ nhớ ngoài của CSDL có mặt một đối tượng nào

đó của CSDL, và liên quan đến nó có một thao tác sửa đổi dữ liệu được thực thi, thì trong

bộ nhớ ngoài nhất thiết phải có một bản ghi tương ứng với thao tác đó. Ngược lại thì không

đúng, nghĩa là, nếu trong bộ nhớ ngoài của nhật ký có chứa bản ghi về một thao tác thay đổi

dữ liệu nào đó của CSDL, thì bản thân đối tượng đã được thay đổi có thể không có trong bộ

nhớ ngoài của CSDL.

Điều kiện bổ sung của việc đẩy bộ đệm ra bộ nhớ ngoài đó là yêu cầu mỗi giao

tác đã được hoàn thành thành công cần phải thực tế được cố định trong bộ nhớ ngoài. Dù

xảy ra bất kỳ sự cố nào, hệ thống cần phải ở trong tư thế khôi phục lại trạng thái CSDL chứa

tất cả các giao tác đã được cố định tính đến thời điểm sự cố các giao tác.

Cách giải quyết đơn giản có thể là đẩy bộ đệm nhật ký ra, và ngay sau đó là đẩy

hàng loạt các bộ đệm các trang CSDL đã được thay đổi bởi giao tác hiện tại. Cách này được

sử dụng khá thường xuyên, nhưng nó là nguyên nhân của các chi phí phụ khi thực thi thao

tác cố định giao tác.

Một lý do đẩy bộ đệm ra nữa là sự giới hạn của dung lượng bộ đệm CSDLvà bộ

đệm nhật ký. Một cách tuần hoàn hoặc là khi xuất hiện một sự kiện nào đó, ví dụ, số lượng

trong danh sách các trang bẩn vượt qua một ngưỡng nào đó, hoặc số lượng các trang CSDL

trong bộ đệm được giải phóng và giảm đến một mức đáng báo động, hệ thống sẽ tự động áp

dụng một phương pháp được gọi là điểm kiểm tra (control point). Việc áp dụng điểm kiểm

tra bao hàm việc đẩy ra bộ nhớ ngoài nội dung các bộ đệm CSDL và bản ghi (vật lý chuyên

dụng của) điểm kiểm tra. Bản ghi điểm kiểm tra trình diễn bản thân như là danh sách tất cả

các giao tác đang được thực thi ở thời điểm hiện tại.

Cảm giác rằng, yêu cầu tối thiểu để đảm bảo khả năng khôi phục trạng thái toàn

vẹn cuối cùng của CSDL là đẩy ra bộ nhớ ngoài nhật ký tất cả các bản ghi về sự thay đổi

97

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

của CSDL bởi giao tác trong quá trình cố định giao tác đó trong bộ nhớ ngoài. Và khi đó

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

bản ghi cuối cùng vào nhật ký, đi kèm với tên của giao tác hiện thời, là bản ghi đặc biệt về

sự kết thúc của giao tác.

II.4.2 Các kiểu phục hồi dữ liệu

Chúng ta sẽ nghiên cứu thao tác phục hồi CSDL trong các tình huống khác nhau

được thực thi như thế nào, nếu trong hệ thống hỗ trợ nhật ký chung cho tất cả các giao tác

tương ứng với giao thức WAL cùng với tạo bộ đệm chung cho các bản ghi:

− Rollback riêng biệt một giao tác. Rollback riêng biệt một giao tác có thể được

khởi đầu hoặc bởi bản thân giao tác bằng lệnh ROLLBACK, hoặc bởi hệ thống. HQT CSDL

có thể khởi đầu rollback một giao tác trong trường hợp xuất hiện một lỗi nào đó trong công

việc của giao tác, ví dụ chia cho 0, hoặc nếu giao tác đó được chọn như vật hiến sinh trong

quá trình tháo gỡ các bế tắc.

− Sự cố hệ thống mềm (sự cố phần mềm). Sự cố hệ thống mềm đặc trưng bởi tổn

thất trong RAM của hệ thống. Khi đó tất cả các giao tác đang được thực thi sẽ bị hỏng, và

mất nội dung tất cả các bộ đệm của CSDL. Các dữ liệu đã được lưu trữ trên ổ đĩa không bị

ảnh hưởng. Nguyên nhân của sự cố hệ thống mềm có thể là bị mất điện, hoặc là kết quả của

sự cố không thể khắc phục trong bộ vi xử lý.

− Sự cố hệ thống cứng (sự cố phần cứng khẩn cấp). Sự cố cứng được đặc trưng

bởi sự hư hại các thiết bị nhớ ngoài. Ví dụ, có thể là hỏng đầu đọc hay bề mặt của ổ cứng.

Trong tất cả ba trường hợp trên cơ sở phục vụ việc khôi phục là tính dư thừa dữ

liệu được đảm bảo bởi nhật ký giao tác.

II.4.2.1 Rollback giao tác riêng biệt

Để có thể thực hiện rollback riêng lẽ giao tác theo nhật ký giao tác, tất cả các bản

ghi trong nhật ký từ giao tác hiện tại được liên kết thành danh sách ngược lại. Bắt đầu danh

sách cho các giao tác chưa được cố định là bản ghi về sự thay đổi cuối cùng bởi giao tác đó

trong CSDL. Cho các giao tác đã được cố định, mà đã không thể rollback riêng lẽ, bắt đầu

danh sách là bản ghi về việc kết thúc giao tác, mà nhất thiết đã được đẩy ra bộ nhớ ngoài

của nhật ký. Phần cuối của danh sách bao giờ cũng phục vụ bản ghi đầu tiên về sự thay đổi

CSDL bởi giao tác hiện tại. Trong mỗi bản ghi có số hệ thống độc nhất của giao tác để sau

này có thể hồi phục danh sách “thẳng” các bản ghi về sự thay đổi CSDL bởi giao tác hiện

thời.

98

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

Rollback riêng lẽ giao tác được thực thi theo kiểu mẫu sau đây:

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

− Xem qua danh sách các bản ghi đã được làm ra bởi giao tác hiện tại trong nhật

ký giao tác (theo thứ tự từ thay đổi cuối cùng đến thay đổi đầu tiên).

− Chọn bản ghi tiếp theo từ danh sách của giao tác hiện tại.

− Thực thi theo chiều hướng ngược lại theo ngữ nghĩa của thao tác để khôi phục

trạng thái kế trước của đối tượng CSDL, ví dụ thay vì INSERT thực thi thao tác DELETE

tương ứng và ngược lại, thay vì thao tác UPDATE “thẳng” thực thi thao tác UPDATE

“ngược”.

− Tất cả các thao tác ngược đó cũng được ghi nhật ký. Cần phải làm như thế, bởi

vì trong thời gian thực thi rollback riêng lẽ cũng có thể xảy ra sự cố mềm. Mà sau đó, trong

quá trình khôi phục sau sự cố mềm, đòi hỏi phải rollback giao tác đã không được thực thi

rollback riêng lẽ một cách hoàn toàn.

− Khi hoàn tất rollback thành công, một bản ghi về sự kết thúc giao tác được ghi

vào nhật ký. Trên quan điểm của nhật ký, một giao tác như thế đã được cố định.

II.4.2.2 Phục hồi sau sự cố “mềm”

Một trong những vấn đề chính của việc khôi phục sau sự cố mềm đó là một thao tác

luận lý thay đổi CSDL có thể thay đổi nhiều khối vật lý CSDL, ví dụ, trang dữ liệu và nhiều

trang chỉ mục. Các trang CSDL được đệm hoá trong RAM và đẩy ra bộ nhớ ngoài một cách

độc lập. Không tính đến việc sử dụng giao thức WAL, sau sự cố mềm tổ hợp các trang bộ

nhớ ngoài của CSDL có thể rơi vào trạng thái không toàn vẹn, nghĩa là, một phần các trang

bộ nhớ ngoài tương ứng với đối tượng cho đến lúc thay đổi, và m ột phần − sau thay đổi. Đối

với trạng thái như vậy của đối tượng các thao tác ở cấp độ luận lý không được áp dụng.

Trạng thái của bộ nhớ ngoài của CSDL được gọi là ăn khớp (toàn vẹn) về mặt vật lý,

nếu các tổ hợp các trang của tất cả các đối tượng được toàn vẹn, nghĩa là, tất cả tương ứng

với trạng thái của đối tượng hoặc là trước thay đổi, hoặc là sau thay đổi.

Chúng ta sẽ cho rằng, trong nhật ký đã được đánh dấu các điểm toàn vẹn vật lý của

CSDL − thời điểm mà trong bộ nhớ ngoài chứa các kết quả đã được nhất trí (cố định) của

các thao tác đã được hoàn thành trước thời điểm tương ứng, và không có kết quả của các

thao tác chưa được hoàn thành, còn bộ đệm nhật ký đã được đẩy ra bộ nhớ ngoài. Các điểm

đó được gọi là thời điểm toàn vẹn vật lý (tpc − time of physical consistency).

99

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

Và như thế đến thời điểm xảy ra sự cố mềm có thể có các trạng thái của giao tác:

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Hình II.6 Phục hồi sau sự cố “mềm”

Điểm kiểm tra cuối cùng được áp dụng vào thời điểm tc. Sự cố mềm đã xảy ra ở thời

điểm tf. Các giao tác T1-T5 được đặc trưng bởi các tính chất:

− T1 − giao tác đã hoàn tất thành công trước khi áp dụng điểm kiểm tra. Tất cả dữ

liệu của giao tác đó, cả các bản ghi nhật ký và cả các trang dữ liệu đã được thay đổi bởi giao

tác đó đã được lưu trữ trong bộ nhớ lâu dài.

− T2 − Giao tác được bắt đầu trước khi áp dụng điểm kiểm tra và hoàn tất thành công

sau điểm kiểm tra, nhưng trước khi xảy ra sự cố. Các bản ghi nhật ký giao tác liên quan đến

giao tác đó đã được đẩy ra bộ nhớ ngoài. Chỉ một phần trong các trang dữ liệu được thay đổi

bởi giao tác đó đã được đẩy ra bộ nhớ ngoài. Cần thiết phải thực thi lại từ đầu các thao tác

được thực thi sau khi áp dụng điểm kiểm tra cho giao tác này.

− T3 − Giao tác được bắt đầu trước khi áp dụng điểm kiểm tra, nhưng chưa hoàn tất

khi xảy ra sự cố. Cần phải rollback giao tác này. Vấn đề là ở chỗ, một phần các trang dữ liệu

đã được thay đổi bởi giao tác này đã nằm trong bộ nhớ ngoài. Đó là những trang đã được

thay đổi trước điểm kiểm tra. Các vết tích của các thay đổi sau điểm kiểm tra không có

trong CSDL. Các bản ghi nhật ký được tạo ra trước điểm kiểm tra đã được đẩy ra bộ nhớ

ngoài của nhật ký giao tác, còn các bản ghi được tạo ra sau điểm kiểm tra không có trong bộ

nhớ ngoài của nhật ký.

− T4 − Giao tác được bắt đầu sau điểm kiểm tra và đã kết thúc thành công trước khi

xảy ra sự cố trong hệ thống. Các bản ghi nhật ký giao tác, liên quan đến giao tác đó, đã được

đẩy ra bộ nhớ ngoài của nhật ký. Các thay đổi CSDL bởi giao tác đó hoàn toàn không có

mặt trong bộ nhớ ngoài của CSDL. Giao tác này cần phải thực thi lại hoàn toàn.

− T5 − Giao tác được bắt đầu sau điểm kiểm tra và chưa được hoàn tất khi xảy ra sự

100

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

cố. Cả trong bộ nhớ ngoài của nhật ký giao tác và cả trong bộ nhớ ngoài của CSDL không

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

có bất cứ vết tích nào của giao tác này. Đối với giao tác này không cần phải thực thi gì cả

bởi vì có thể xem như là nó chưa bào giờ hiện hữu.

Khôi phục lại hệ thống sau sự cố mềm được thực hiện như một phần của thủ tục khởi

động lại hệ thống. Khi khởi động lại hệ thống, cần phải thực thi lại một phần hoặc ho àn toàn

các giao tác T2 và T4, giao tác T3 − rollback một phần, các giao tác T1 và T5 − không cần

áp dụng hành động nào cả. Khi khởi động lại, hệ thống thực hiện các thao tác sau:

− Tạo ra hai danh sách giao tác UNDO (hoàn tác) và REDO (lặp lại). Cho tất cả các

giao tác từ bản ghi cuối cùng của điểm kiểm tra trong danh sách UNDO, nghĩa là, tất cả các

giao tác thực thi vào thời điểm áp dụng điểm kiểm tra. Danh sách REDO còn trống. Trong

trường hợp của chúng ta: UNDO = {T2, T3}, REDO = {}.

− Bắt đầu từ bản ghi của điểm kiểm tra xem qua nhật ký giao tác về phía trước.

− Nếu như bản ghi về sự tồn tại của giao tác được tìm thấy trong nhật ký, thì giao tác

đó được thêm vào danh sách UNDO. UNDO = {T2, T3, T4}, REDO = {}. Chú ý rằng vết

tích về giao tác T5 trong nhật ký không có.

− Nếu trong tệp đăng ký tìm được bản ghi COMMIT về sự kết thúc của giao tác, thì

giao tác đó được thêm vào danh sách REDO. UNDO = {T2, T3, T4}, REDO = {T2, T4}.

− Sau đó hệ thống lại xem nhật ký về sau, bắt đầu từ thời điểm điểm kiểm tra và

rollback tất cả các giao tác từ danh sách UNDO. Trong trường hợp của chúng ta tất cả các

thao tác, đã được thực thi cho đến khi áp dụng điểm kiểm tra, của giao tác T3 bị rollback.

− Cuối cùng, hệ thống xem nhật ký giao tác về phía trước, bắt đầu từ thời điểm điểm

kiểm tra, và thực thi lại từ đầu tất cả các thao tác của các giao tác từ danh sách REDO lại từ

đầu. Trong trường hợp của chúng ta, hệ thống thực thi lại tất cả các thao tác của giao tác T4

và các thao tác được thực thi sau điểm kiểm tra của giao tác T2.

II.4.2.3 Tính nhất quán vật lý của CSDL

Làm thế nào để có thể đảm bảo sự có mặt của các điểm toàn vẹn vật lý của

CSDL, nghĩa là có thể khôi phục vào trạng thái của CSDL ở thời điểm tpc? Để làm được

việc đó có người ta sử dụng hai phương pháp chính: − phương pháp trên cơ sở sử dụng cơ

chế nền, và − phương pháp sử dụng nhật ký các thay đổi CSDL theo từng trang.

Khi mở một tệp, bảng hiển thị các số thứ tự các khối luận lý của nó vào các địa

chỉ các khối vật lý của bộ nhớ ngoài được đọc vào RAM. Trong quá trình sửa đổi bất kỳ

101

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

khối nào của tệp trong bộ nhớ ngoài đều được phân một khối mới. Và khi đó bảng biểu thị

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

trong RAM hiện tại được thay đổi, còn bảng “nền” thì được giữ không thay đổi. Nếu như

trong quá trình làm việc với tệp bị xảy ra sự cố, trạng thái tệp trước lúc được mở ra sẽ tự

động được giữ lại trong bộ nhớ ngoài. Để phục hồi (một cách rõ ràng) tệp chỉ cần đọc lại

bảng hiển thị nền vào RAM.

Ý tưởng chung của cơ chế nền được biểu diễn trên hình sau:

Hình II.18 Ý tưởng chung của cơ chế nền

Trong ngữ cảnh của CSDL, cơ chế nền được sử dụng theo hình thức sau. Thao tác

thiết đặt điểm toàn vẹn vật lý CSDL được thực hiện một cách tuần hoàn. Để được như thế,

tất cả các thao tác luận lý đều được kết thúc, tất cả các bộ đệm RAM có nội dung không

tương ứng với nội dung các trang bộ nhớ ngoài tương ứng được đẩy ra bộ nhớ ngoài. Bảng

nền hiển thị các tệp CSDL được thay đổi thành bảng hiện tại, nghĩa là bảng hiện tại được

ghi lên chỗ của bảng nền.

Việc khôi phục vào t1pc được thực hiện trong tích tắc: Bảng biểu thị hiện tại

được thay đổi thành bảng nền (khi khôi phục chỉ cần đơn giản là đọc bảng nền biểu thị). Tất

cả các vấn đề khôi phục được giải quyết, nhưng phải trả giá bằng chi phí bộ nhớ ngoài quá

lớn, có thể yêu cầu dung tích bộ nhớ ngoài đến mức gấp hai lần mức cần để lưu trữ CSDL.

Cơ chế nền có mức độ tin cậy cao, nhưng là một công cụ quá thô thiển. Trạng thái toàn vẹn

của bộ nhớ ngoài được đảm bảo trong cùng một thời điểm cho tât cả các đối tượng. Trên

thực tế, chỉ cần có tổ hợp các tổ hợp các trang toàn vẹn, và mỗi một trong các tổ hợp đó

tương ứng với một tổ hợp thời gian.

Để đạt được yêu cầu như vậy, bênh cạnh ghi nhật ký luận lý các thao tác thay đổi

CSDL, việc ghi nhật ký các thay đổi theo từng trang cũng được tiến hành. Bước đầu tiên của

quá trình khôi phục sau sự cố mềm là rollback theo từng trang các thao tác luận lý chưa

102

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

được hoàn tất. Bản ghi về sự kết thúc thao tác là bản ghi cuối cùng về các thay đổi theo từng

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

trang bởi một thao tác luận lý. Để nhận biết trong quá trình khôi phục có cần thiết một trang

bộ nhớ ngoài CSDL hay không, khi đẩy ra bất kỳ trang nào từ bộ đệm RAM, trong trang đó

sẽ được đặt một từ định danh bản ghi cuối cùng về sự thay đổi theo trang của trang đó.

Trong hướng đi này có hai hướng phụ. Trong hướng phụ thứ nhất hỗ trợ nhật ký

chung cho các thao tác luận lý và thao tác theo trang. Tất nhiên, sự có mặt của hai kiểu dạng

bản ghi, được diễn giải theo các cách hoàn toàn khác nhau, làm phức tạp cấu trúc của nhật

ký. Ngoài ra, tính thiết yếu của các bản ghi về những thay đổi theo từng trang chỉ mang tính

chất cục bộ và làm nhật ký phình to rất nhiều nhưng không có nhiều ý nghĩa.

Vì vậy, hỗ trợ nhật ký thay đổi theo từng trang riêng và ngắn gọn trở thành phổ

biến hơn.

II.4.2.4 Phục hồi sau sự cố “cứng”

Rõ ràng, chỉ mỗi nhật ký các thay đổi CSDL không đủ để khôi phục lại trạng thái

toàn vẹn cuối cùng của CSDL khi xảy ra sự cố cứng. Cơ sở của việc khôi phục trong trường

hợp này là nhật ký và bản sao lưu của CSDL.

Khôi phục được bắt đầu bằng việc sao ngược lại CSDL từ bản sao lưu. Sau đó

thực hiện lại từ đầu đối với tất cả các giao tác đã được hoàn tất.

Chính xác hơn:

− Theo nhật ký theo hướng thẳng thực thi tât cả các thao tác đã hoàn tất.

− Thực thi rollback tất cả các giao tác chưa hoàn tất đến thời điểm xảy ra sự cố.

Thực tế, bởi vì sự cố cứng không đi cùng với sự tổn thất bộ đệm RAM, nên có thể

khôi phục CSDL đến mức độ để có thể tiếp tục thậm chí thực thi các giao tác chưa được

hoàn tất. Nhưng thường không làm như thế, bởi vì khôi phục sau sự cố cứng là một quá

trình khá dài.

Dù đối với nhật ký cũng đòi hỏi một mức độ tin cậy cao, nhưng về nguyên tắc

cũng có khả năng chính nó bị tổn thất. Và khi đó phương cách khôi phục CSDL duy nhất đó

là quay lại về bản lưu sao. Tất nhiên, trong trường hợp này không thể có được trạng thái

toàn vẹn cuối cùng của CSDL, nhưng có thể nói “có còn hơn không”. Để tránh xảy ra tình

trạng này, CSDL và nhật ký thường được đặt ở các ổ đĩa vật lý khác nhau, và được điều

khiển bởi các bộ điều khiển (các thiết bị lưu trữ bộ nhớ ngoài) khác nhau (Thường sử dụng

103

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

RAID 1).

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Vấn đề cuối cùng được xem xét, đó là thu bản sao lưu như thế nào. Cách đơn giản

nh ất − sao lưu CSDL khi nhật ký bị tràn đầy. Trong nhật ký sẽ xuất hiện một “vùng vàng”,

mà khi đạt đến vùng đó, việc bắt đầu các giao tác mới tạm thời bị phong toả. Khi tất cả các

giao tác được hoàn tất, và CSDL đi vào trạng thái toàn vẹn, có thể sao lưu CSDL, và sau đó

ghi nhật ký lại từ đầu.

Cũng có thể thực hiện sao lưu CSDL thưa hơn so với việc tràn đầy của nhật ký.

Khi nhật ký bị tràn đầy và các giao tác đã được bắt đầu được hoàn tất, có thể thực hiện sao

lưu chính nhật ký. Bởi vì sao lưu nhật ký như vậy thực tế chỉ yêu cầu để tái tạo lại bản sao

lưu CSDL, và thông tin nhật ký khi sao lưu có thể được nén lại khá nhiều.

II.4.2.5 Phục hồi dữ liệu và chuẩn SQL

Chuẩn SQL không chứa các yêu cầu về việc khôi phục dữ liệu và để lại các vấn

104

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

đề đó theo ý tưởng của các nhà phát triển HQT CSDL.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Chương II.5 Các trình biên dịch SQL. Các vấn đề tối ưu hoá

Tối ưu hoá các truy vấn trong các HQT CSDL quan hệ có nghĩa là xử lý các truy

vấn, biến đổi chúng từ dạng biểu diễn ban đầu thành một kế hoạch có tính thủ tục để thực

hiện chúng, và kế hoạch đó là tối ưu nhất trong phạm vi các cấu trúc điều khiển tồn tại trong

CSDL. Các biến đổi truy vấn tương ứng từ dạng biểu diễn ban đầu được thực hiện bởi một

cấu thành đặc biệt của HQT CSDL – “máy tối ưu hoá” (optimizer). Tính tối ưu của kế

hoạch thực thi truy vấn do máy tối ưu tạo ra có tính chất tương đối: kế hoạch tối ưu tương

ứng với các tiêu chí đã được cho trước trong máy tối ưu hoá.

II.5.1 Sơ đồ chung trong xử lý các truy vấn

Một truy vấn cấu thành từ một hay nhiều chuỗi các ký tự được xử lý qua nhiều pha

theo sơ đồ chung (Hình 2.7) dưới đây.

Ở pha đầu tiên, truy vấn (trong ngôn ngữ truy vấn) trải qua quá trình phân tích từ

ngữ và cú pháp. Khi đó sẽ có một biểu diễn bên trong của truy vấn được tạo ra. Dạng biểu

diễn đó thể hiện cấu trúc của truy vấn và chứa các thông tin đặc trưng cho các đối tượng của

CSDL (các quan hệ, các thuộc tính và các hằng số,…) có mặt trong truy vấn. Thông tin về

các đối tượng được lưu trữ trong CSDL được lấy từ các danh mục của CSDL. Biểu diễn bên

trong của CSDL được sử dụng và được biến đổi ở các giai đoạn sau của quá trình xử lý truy

vấn. Hình dạng của biểu diễn bên trong của truy vấn phải đảm bảo thuận tiện cho các biến

Truy vấn

Thực thi kế hoạch

Phân tích từ ngữ

Phân tích cú pháp

Tối ưu hoá luận lý

Chọn kế hoạch tối ưu

Tạo kế hoạch thực thi

Biểu diễn bên trong của truy vấn

Biểu diễn thực thi của truy vấn

Hình II.7 Sơ đồ chung xử lý truy vấn

105

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

đổi tối ưu hoá tiếp theo.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Ở giai đoạn thứ hai, truy vấn ở dạng biểu diễn bên trong trải qua quá trình tối ưu

hoá luận lý. Nó có thể sẽ trải qua nhiều biến đổi để có được biểu diễn bên trong tốt hơn dạng

ban đầu. Các biến đổi đó là tương đương, và sau khi thực hiện chúng, truy vấn sẽ là tương

đương với truy vấn ban đầu về mặt ngữ nghĩa. Cá c biến đổi cũng có thể là ngữ nghĩa. Nghĩa

là truy vấn thu được không tương đương về mặt ngữ nghĩa so với truy vấn ban đầu, nhưng

đảm bảo kết quả thực thi hai truy vấn đó là như nhau (điều này có thể đạt được nhờ vào các

ràng buộc trong CSDL, các dữ liệu hiện có,…). Sau khi thực thi giai đoạn xử lý thứ hai n ày,

biểu diễn bên trong của truy vấn không còn là thủ tục, và có thể nói nó hiệu quả hơn so với

dạng ban đầu.

Giai đoạn xử lý truy vấn thứ ba chọn ra tổ hợp các kế hoạch thủ tục khác nhau

thực thi truy vấn tương ứng với biểu diển bên trong của nó có từ giai đoạn thứ hai. Việc

chọn tổ hợp kế hoạch dựa trên các thông tin có được từ máy tối ưu hoá. Chi phí dự tính để

thực thi mỗi kế hoạch được đánh giá trên cơ sở các thống kê về trạng thái của CSDL. Kế

hoạch có chi phí rẽ nhất trong số đó sẽ được chọn, và biểu diễn bên trong của nó bây giờ

tương ứng với truy vấn được xử lý.

Ở giai đoạn thứ tư, biểu diễn thực thi của kế hoạch được tạo ra theo biểu diễn bên

trong của kế hoạch tối ưu nhất đã chọn. Biểu diễn thực thi kế hoạch có thể là chương trình

dưới dạng mã máy, cũng có thể là chương trình “không phụ thuộc vào máy” nhưng thuận

tiện hơn cho việc thông dịch. Mã chương trình phụ thuộc vào HQT CSDL.

Giai đoạn cuối cùng là thực thi truy vấn. Nghĩa là chương trình tương ứng được

thực thi, hoặc là trình thông dịch được gọi để thông dịch kế hoạch thực thi.

II.5.2 Tối ưu hoá cú pháp các truy vấn

Như đã nói ở trên, tính tối ưu (hay biểu diễn kết quả tốt hơn biểu diễn ban đầu)

được quyết định bởi các tiêu chí đã được cố định bên trong máy tối ưu hoá. Vì thế, rất khó

để đưa ra đầy đủ các đặc tính và sự phân loại các phương pháp tối ưu hoá luận lý. Chúng ta

chỉ xem qua vài lớp các biến đổi liên quan đến các truy vấn phức tạp trong ngôn ngữ SQL.

II.5.2.1 Biến đổi logic đơn giản các truy vấn

???

II.5.2.2 Biến đổi các truy vấn bằng cách thay đổi thứ tự các thao tác quan hệ

106

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

???

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

II.5.2.3 Chuyển các truy vấn chứa các truy vấn lồng thành các truy vấn chứa các phép

nối

Sự khác biệt chủ yếu giữa ngôn ngữ SQL và ngôn ngữ đại số quan hệ là khả năng

sử dụng các mệnh đề chứa các truy vấn lồng trong điều kiện lựa chọn (select). Ngôn ngữ

không hạn chế chiều sâu của tính lồng. Các mệnh đề (predicate) có các truy vấn lồng có thể

sở hữu các ngữ nghĩa khác nhau. Thuật toán duy nhất để thực thi các truy vấn chứa các truy

vấn lồng là thực thi truy vấn lồng mỗi khi tính giá trị của mệnh đề. Vì thế, hướng đến sự

biến đổi truy vấn chứa các mệnh đề có truy vấn lồng là cần thiết khi sự biến đổi đó làm cho

ngữ nghĩa của truy vấn trở nên rõ ràng hơn. Ngoài ra, sau này nó cũng cho phép máy tối ưu

hoá chọn phương pháp thực thi truy vấn tương ứng nhất với ngữ nghĩa của truy vấn lồng.

Có thể phân các mệnh đề được phép trong các truy vấn trên ngôn ngữ SQL thành

các nhóm sau (Ri – quan hệ thứ i trong CSDL; Ck – thuộc tính thứ k của quan hệ), không

xem xét các mệnh đề nối có dạng chung và chứa các biểu thức đại số với các thuộc tính của

hơn hai quan hệ:

1. Các mệnh đề đơn giản có dạng Ri.Ck op X. Với X là hằng hay là chuỗi các

hằng, và op là toán tử so sánh vô hướng (=, !=, >, >=, <, <=) hoặc là toán tử kiểm tra có phải

là thành phần của tập hợp hay không (IS IN, IS NOT IN).

2. Các mệnh đề chứa các truy vấn lồng dạng Ri.Ck op Q. Với Q là khối truy vấn,

còn op giống như trường hợp các mệnh đề đơn giản. Loại mệnh đề này cũng có thể có dạng

Q op Ri.Ck. Khi đó, op sẽ là CONTAINS hoặc DOES NOT CONTAIN (chứa hoặc không

chứa). Hai dạng này là đối xứng nhau.

3. Các mệnh đề nối có dạng Ri.CK op Rj.Cn. Với Ri != Rj và op – toán tử so

sánh vô hướng.

4. Các mệnh đề chia (division) có dạng Qi op Qj. Với Qi và Qj là hai khối truy

vấn, còn op có thể là toán tử so sánh vô hướng hoặc là toán tử kiểm tra một có phải là phần

tử tập hợp hay không.

Biểu diễn dạng phức hợp quy (canonial form) của một truy vấn trên n quan hệ là

một truy vấn chứa n-1 mệnh đề nối và không chứa các mệnh đề có truy vấn lồng. Thực tế,

dạng phức hợp quy là một dạng biểu diễn đại số của truy vấn.

Sau đây là các ví dụ dạng phức hợp quy của các truy vấn với các mệnh đề có

dạng khác nhau. Kỹ thuật tương ứng cũng tồn tại với các dạng mệnh đề khác.

107

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

SELECT Ri.Ck FROM Ri WHERE Ri.Ch IS IN

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

SELECT Rj.Cm FROM Rj WHERE Ri.Cn = Rj.Cp

tương đương với

SELECT Ri.Ck FROM Ri, Rj WHERE Ri.Ch = Rj.Cm AND

Ri.Cn = Rj.Cp.

SELECT Ri.Ck FROM Ri WHERE Ri.Ch =

SELECT AVG (Rj.Cm) FROM Rj WHERE Rj.Cn = Ri.Cp

tương đương với

SELECT Ri.Ck FROM Ri, Rt WHERE Ri.Ch = Rt.Cm AND Ri.Cp = Rt.Cn

- Rt ( Cp, Cn ) = SELECT Rj.Cp, AVG (Rj.Cn) FROM Rj

GROUP BY Rj.Cp

Sự khôn ngoan của các biến đổi như thế có thể làm sáng tỏ bằng việc máy tối ưu

hoá sẽ có thể chọn số lượng lớn các phương pháp thực thi truy vấn.

Chú ý rằng trong cách tiếp cận chúng ta vừa xem qua có chứa những sự thiếu

chính xác (tinh vi) về mạng ngữ nghĩa. Đã có những phương pháp chỉnh sửa, nhưng chúng

rất phức tạp về mặt kỹ thuật và nằm ngoài khuôn khổ chương trình của chúng ta.

II.5.3 Tối ưu ngữ nghĩa các truy vấn

???

II.5.3.1 Biến đổi các truy vấn trên cơ sở thông tin mạng ngữ nghĩa

???

II.5.3.2 Sử dụng các thông tin mạng ngữ nghĩa trong tối ưu hoá các truy vấn

???

II.5.4 Chọn và đánh giá các kế hoạch thực thi các truy vấn khác nhau

???

II.5.4.1 Tạo ra các kế hoạch

???

II.5.4.2 Đánh giá trị giá các kế hoạch thực thi truy vấn

???

108

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

II.5.4.3 Các đánh giá chính xác hơn ???

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

HQT CSDL trong ki ến trúc “Client−Server” Phần III

Chương III.1 Ki ến trúc “Client−Server”

Ứng dụng kiến trúc khách-chủ vào các HQT CSDL có tính cấp thiết bởi vì nó

đảm bảo một giải pháp đơn giản và tương đối rẻ tiền để giải quyết vần đề truy cập tập thể

đến các CSDL trong mạng cục bộ. Ở một mức độ nào đó, các HQT CSDL trong kiến trúc

khách-chủ cũng gần với HQT CSDL PT, nhưng tất nhiên không gần đến mức ở đó phải giải

quyết các vấn đề liên quan đến HQT CSDL phân tán, ví dụ như biên dịch truy vấn phân tán,

thực thi giao tác phân tán,…

III.1.1 Các hệ thống mở

Kiến trúc khách-chủ thực sự phổ biến nhờ vào sự phát triển và ứng dụng rộng rải

trong thực tế các hệ thống mở. Ý tưởng chủ đạo trong hướng phát triển các hệ thống mở là

đơn giản hoá việc kết nối các hệ thống nhờ vào sự chuẩn hoá quốc tế và quốc gia các giao

diện phần cứng và phần mềm. Việc chuyển sang dùng mạng máy tính cục bộ ở khắp mọi

nơi đã đánh thức sự phát triển của khái niệm hệ thống mở. Trong mối quan hệ của sự phát

triển như vũ bão của công nghệ thông tin liên lạc toàn cầu các hệ thống mở càng có ý nghĩa

lớn và phát triển về quy mô.

Chìa khoá đưa người dùng đến với các hệ thống mở đó là nó không phụ thuộc vào

một nhà cung cấp cụ thể nào. Khi một nhà cung cấp nào đó duy trì các chuẩn của hệ thống

mở, thì một khi khách hàng tiếp nhận các sản phẩm của công ty đó, sẽ không bị rơi vào tình

trạng phụ thuộc. Khách hàng đó có thể tiếp tục phát triển hệ thống của mình bằng cách tiếp

nhận các sản phẩm của các công ty khác duy trì các chuẩn đó trên cả lĩnh vực phần cứng và

phần mềm. Và sự độc lập đó đã được kiểm định qua thời gian.

Một trong những ví dụ về sự tồn tại lâu bền của hệ thống mở đó là các hệ điều

hành được chuẩn hoá, ví dụ như UNIX. Các công ty phát triển và cung cấp các phiên bản

của hệ điều hành này đã đi đến với những thoả thuận về các chuẩn cơ bản trong hệ điều

hành này. Bây giờ các phiên bản phổ biến của UNIX tương dung với các giao diện được

cung cấp cho các lập trình viên ứng dụng và cả hệ thống.

Các công nghệ và chuẩn của các hệ thống mở đảm bảo các khả năng phát triển và

sản xuất các công cụ phần mềm ứng dụng và hệ thống đã được kiểm nghiệm qua thực tế

thời gian cùng với các tính chất di động và khả năng liên kết (interoperability). Tính chất di

109

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

động có nghĩa sự đơn giản trong việc chuyển một hệ thống phần mềm đến một phạm vi rộng

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

các công cụ phần cứng cũng như phần mềm có các chuẩn tương ứng. Khả năng liên kết có ý

nghĩa đơn giản hoá việc kết nối các hệ thống phần mềm mới trên nền tảng sử dụng các

thành phần đã có sẵn cùng với các giao diện chuẩn.

Việc sử dụng cách tiếp cận các hệ thống mở có lợi cho cả người dùng và nhà sản

xuất. Trước tiên, các hệ thống mở đảm bảo giải quyết vấn đề các thế hệ phần cứng và phần

mềm. Các nhà sản xuất các thiết bị như thể không bắt buộc phải giải quyết vấn đề lại từ đầu.

Họ có thể theo thời gian tiếp tục kết nối các hệ thống bằng cách dùng các thành phần đã có.

Và như thế xuất hiện một mức độ cạnh tranh mới. Tất cả các nhà sản xuất đảm

bảo một môi trường chuẩn nào đó, và bắt buộc phải triển khai chúng với mức độ tốt nhất.

Tất nhiên, sau một thời gian nào đó các chuẩn hiện tại sẽ đóng vai trò chống chọi với sự

phát triển, và khi đó chúng cần phải được xem xét lại.

Ưu thế cho người dùng đó là họ có thể dần dần thay thế các thành phần hệ thống

cho hiện đại hơn mà không đánh mất khả năng làm việc của hệ thống.

III.1.2 Các máy khách và máy chủ trong mạng cục bộ

Ý tưởng chia sẽ tài nguyên là nền tảng của sự phát triển và phổ biến rộng rãi của

các mạng máy tính cục bộ. Khả năng lưu thông cao của các LAN đảm bảo truy cập hiệu quả

từ một nút của LAN đến các tài nguyên được phân bố trên các nút khác của LAN.

Sự phát triển ý tưởng đó dẫn đến việc phân chia chức năng các thành phần của

mạng: Sẽ khôn ngoan hơn, nếu ngoài khả năng truy cập đến các tài nguyên của một nút từ

xa, còn có thể nhận được từ các nút đó những dịch vụ đặc trưng cho tài nguyên của một thể

loại nút như thế, và các phương tiện phần mềm để đảm bảo điều đó không được lặp lại ở

nhiều nút trong mạng. Và như vậy, các nút trong LAN được chia ra làm hai loại: các máy

chủ và các máy trạm (khách).

Các máy khách là những máy sử dụng những tài nguyên/dịch vụ của các máy chủ,

và máy chủ là thành phần LAN cung cấp các dịch vụ/tài nguyên cho các máy khách.

Các máy khách có chức năng đảm bảo công việc trực tiếp của người dùng và có

những tài nguyên tương ứng với những nhu cầu công việc cục bộ của người dùng đó. Các

đặc điểm đặc trưng của các máy trạm có thể là dung lượng bộ nhớ (rõ ràng không phải tất cả

các tầng lớp người dùng đều có nhu cầu dung lượng bộ nhớ lớn), sự có mặt và dung lượng

các ổ đĩa lớn (những máy trạm không có ổ cứng và sử dụng ổ cứng chung trên máy chủ là

110

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

rất phổ biến), các đặc tính của CPU và màn hình (có những người dùng cần một bộ vi xử lý

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

mạnh, nhưng cũng có nhiều người dùng lại cần màn hình có độ phân giải cao hơn, và có thể

cả hai, v.v.). Và khi cần có thể sử dụng các tài nguyên cũng như dịch vụ của máy chủ.

Các máy chủ của LAN cần phải có các tài nguyên tương ứng với chức năng của

chúng và tương ứng với yêu cầu của mạng. Cùng với việc thiên về hướng tiếp cận các hệ

thống mở, cần phải nói về các máy chủ luận lý (ý nói về tổ hợp các tài nguyên và các công

cụ phần mềm đảm bảo các dịch vụ trên các tài nguyên đó). Những máy mà không nhất thiết

phải được phân bố trên các máy chủ (phần cứng) khác nhau. Đặc trưng của một máy chủ

luận lý trong các hệ thống mở là ở chỗ, nếu cần theo yêu cầu hiệu quả công việc máy chủ

luận lý có thể được chuyển ra một máy tính riêng lẻ, và điều đó không kèm theo yêu cầu

phải chỉnh sửa lại chính máy chủ luận lý, kể cả các trình ứng dụng mà nó sử dụng.

Các ví dụ máy chủ có thể là:

− Máy chủ thông tin liên lạc (telecommunicational Server) – cung cấp các dịch vụ

đảm bảo liên lạc giữa LAN và thế giới bên ngoài.

− Máy chủ tính toán – có khả năng thực hiện các tính toán phức tạp và số lượng

lớn mà không thể thực hiện trên các máy trạm.

− Máy chủ ổ đĩa (Disk Server) – có các tài nguyên bộ nhớ ngoài mở rộng và cung

ứng các tài nguyên đó cho các máy trạm, và có thể cả các máy chủ khác.

− Máy chủ tệp tin (file server) – hỗ trợ kho lưu trữ chung các tệp tin cho tất cả các

máy trạm.

− Máy chủ CSDL (Database Server) – thực tế là một máy chủ bình thường với

khả năng tiếp nhận các truy vấn từ LAN, thực thi và trả kết quả.

Các máy chủ LAN có thể cung cấp tài nguyên/dịch vụ cho các máy trạm và có thể

cho các máy chủ khác.

III.1.3 Kiến trúc hệ thống “khách-chủ”

Dễ thấy rằng, để các trình ứng dụng thực thi trên các máy khách có thể yêu cầu

các dịch vụ của một máy chủ nào đó, yêu cầu tối thiểu phải có một tầng (lớp) chương trình

giao diện nào đó hỗ trợ các tác động qua lại. Yêu cầu tối thiểu đó là đảm bảo các trình ứng

dụng không phải trực tiếp dùng các lệnh thô sơ của cấp chuyển vận của LAN. Từ yêu cầu

đó đã nảy sinh các nguyên tắc cơ bản của kiến trúc hệ thống “khách-chủ”.

Hệ thống phân chia thành hai phần: phần chủ và phần khách và được phân bố ở

các nút khác nhau của LAN. Các trình ứng dụng hoặc người dùng cuối tương tác với phần

111

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

khách của hệ thống. Phần khách truy cập đến phần chủ qua mạng khi cần. Chú ý rằng, trong

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

các hệ thống phát triển truy cập qua mạng đến phần chủ có thể không cần thiết, nếu hệ thống

có thể “đoán” được các nhu cầu người dùng, và khi đó trong phần khách chứa các dữ liệu có

thể thỏa mãn được truy vấn tiếp theo. Ngày nay, dựa trên sự phân chia nguồn lực và chức

năng hệ thống, máy khách có thể được phân loại thành máy khách “thông minh” (smart

client), máy khách “giàu” (mập, rich client, fat client, thick client), và máy khách “gầy”

(thin client, dumb terminal).

Giao diện của phần chủ được xác định và cố định. Vì thế có khả năng xây dựng

các phần khách mới của hệ thống hiện hữu.

Vấn đề chính của các hệ thống trên nền tảng kiến trúc “khách-chủ”, đó là tương

ứng với quan niệm các hệ thống mở, tính di động được yêu cầu trên phổ rộng nhất có thể

các giải pháp phần cứng và phần mềm. Các thử nghiệm xây dựng các hệ thống, duy trì tất cả

các giao thức có thể, dẫn đến việc quá tải các chi tiết mạng dẫn đến thiệt hại về chức năng.

Một đặc trưng phức tạp hơn của vấn đề đó liên quan mật thiết với khả năng sử

dụng các cách biểu diễn dữ liệu khác nhau giữa các nút LAN không đồng nhất. Trên các

máy tính khác nhau có thể tồn tại các cách ghi địa chỉ khác nhau (addressing), biểu diễn số,

mã hóa ký tự, v.v. Điều đó đặc biệt rõ nét trong các máy chủ cấp cao như truyền thông, tính

toán, CSDL.

Giải pháp chung, trên cơ sở kiến trúc “khách-chủ”, cho vấn đề di động của các hệ

thống là dựa trên các gói phần mềm triển khai các giao thức gọi thủ tục từ xa RPC. Khi ứng

dụng các công cụ đó, truy cập đến các dịch vụ trên một nút từ xa các thủ tục được gọi giống

như các thủ tục thông thường. Tất nhiên, các công cụ RPC chứa tất cả về các đặc trưng phần

cứng của LAN và các giao thức mạng, và biên dịch cuộc gọi vào một chuỗi các tương tác

mạng. Cũng thế, các đặc trưng môi trường mạng và các giao thức ẩn đối với lập trình viên

ứng dụng.

Trong quá trình gọi một hàm từ xa các chương trình RPC chuyển đổi các định

dạng dữ liệu của máy khách vào những định dạng không phụ thuộc máy (machine-

impedenment) trung gian và sau đó chuyển đổi vào các định dạng của máy chủ. Trong quá

trình truyền tải các thông số trả lời cũng diễn ra các chuyển đổi tương tự.

Nếu một hệ thống được triển khai trên nền tảng gói chuẩn RPC, thì nó có thể

112

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

được chuyển sang bất cứ môi trường mở nào một cách dễ dàng.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

III.1.3.1

Khách thông minh (Smart Client)

Trong thời gian đầu kỷ nguyên khách-chủ, chúng là những máy khách gầy (dumb

terminal) và các mainframes. Khi đó các máy khách chỉ đảm nhận vai trò tiếp nhận (nhập)

dữ liệu và chuyển đến các mainframes để xử lý. Và điều đó là đủ cho một thời gian dài.

Nhưng kỷ nguyên máy tính cá nhân (PC – Personal computers) đã đến và mô hình khách-

chủ cũng thay đổi rất nhiều. Các máy các nhân được kết nối với nhau và có nhiều phần

chương trình trước kia chỉ chạy trên máy chủ nay được chuyển sang máy cá nhân. Các máy

cá nhân trở thành các khách “mập” (fat client), quá trình xử lý được phân tán và giảm tải

cho mainframe, và người dùng nhận được thoả mãn hơn với tốc độ công việc và giao diện

đồ hoạ phong phú.

Đến tiếp theo sau kỷ nguyên của PC và các khách “mập” là mô hình trên nền tảng

trình duyệt (browser-based model). Mô hình này cho phép sự phân phối của một điểm duy

nhất và tự động cập nhật các phần mềm. Mô hình này cũng khác xa khách “mập” và biến

các PC trở thành các khách gầy giả (pseudo dumb terminals). Và ta thấy, điện toán đã đi hết

một vòng phát triển của nó và trở về với mainframe và khách gầy. Chỉ có khác biệt ở chỗ

các thiết bị (mainframe) quá đắt đỏ từ IBM đã được thay thế bằng các máy chủ PC và các

máy khách.

Chúng ta ngạc nhiên vì đã quay lại bước đi ban đầu. Tại sao chúng ta chuyển qua

các khách “mập”? Thực tế, cùng với sự ra đời của .NET 2.0, WEB 2.0 và Ajax,… chúng ta

sẽ lấy những phần tốt nhất của mô hình khách mập (khả năng thực thi cao và hiệu quả cao)

và mô hình trên nền tảng trình duyệt (thin client – không cần cài đặt (zero-install), tự động

cập nhật (auto-update)) để kết hợp chúng thành mô hình mới, được gọi là khách “thông

minh” (smart client).

Thường thuật ngữ khách thông minh miêu tả một môi trường ứng dụng cung cấp

ứng dụng trên nền WEB với kết nối http, không đòi hỏi phải cài đặt chương trình hoặc cung

cấp tính năng tự động cài đặt và cập nhật, tự động cập nhật không đòi hỏi hành động của

người dùng và cuối cùng là có giao diện nhìn giống và tạo cảm giác như là một ứng dụng

desktop.

Như vậy, khách thông minh là một ứng dụng chứa các tính năng tốt nhất của

khách mập và các ứng dụng web-client, và chúng được đặc trưng bởi các thuộc tính sau

113

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

(http://msdn.microsoft.com/smartclient/, http://www.microsoft.com/net/SmartClient.mspx):

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

III.1 Mô hình khách thông minh (smart client)

- Trải nghiệm người dùng độ tin cậy cao (High fidelity user experience) nhờ vào

các công nghệ đồ hoạ mới nhất. Ngoài ra, chúng còn được cá nhân hoá cho từng người

dùng.

- Kết nối thông minh (Intelligent connection). Khách thông minh có thể làm

việc ở chế độ trực tuyến (online) hoặc gián tuyến (offline) nhờ sử dụng bộ đệm dữ liệu ( data

caching) cục bộ và xử lý cục bộ nhưng vẫn đảm bảo tính đồng bộ của dữ liệu. Ngoài ra,

khách thông minh là một ứng dụng phân tán tận dụng các lợi ích của các dịch vụ mạng.

- Năng suất cao.

- Thông tin tập trung (Information-centric). Trong mô hình khách thông minh,

việc truy cập dữ liệu được liên kết lỏng lẽo. Dữ liệu dễ tiếp nhận, lưu trữ (cache) và gửi đi.

- Thiết kế theo thao tác (Designed for operations). Khách thông minh sử dụng

một cách thông minh khả năng xử lý của CPU cục bộ. Khách thông minh được bảo mật,

114

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

khai thác tập trung và versionable.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Vấn đề là phải quyết định để lựa chọn các tính năng nào đặt trên máy chủ và tính

năng nào đặt trên máy khách trong quá trình triển khai ứng dụng để đạt được hiệu quả cao

nhất.

III.1.4 Các máy chủ CSDL

Thuật ngữ “máy chủ CSDL” thường được sử dụng để chỉ cả HQT CSDL trên nền

tảng kiến trúc “khách-chủ”, bao gồm cả phần chủ và phần khách. Các hệ thống như thế

chuyên dụng cho việc lưu trữ và đảm bảo truy cập đến CSDL.

Thông thường một CSDL được lưu trữ trên một nút mạng và được hỗ trợ bởi một

máy chủ. CSDL cũng có thể phân bố trên nhiều nút khác nhau và được duy trì bởi nhiều

máy chủ khác nhau.

III.1.4.1 Các nguyên tắc tương tác giữa phần khách và phần chủ

Truy cập đến CSDL từ một trình ứng dụng hoặc người dùng diễn ra theo cách

truy cập (hướng) đến phần khách của hệ thống. Giao diện chính giữa phần khách và phần

chủ là ngôn ngữ CSDL SQL.

Ngôn ngữ đó thực chất là chuẩn giao diện hiện tại của HQT CSDL trong các hệ

thống mở. Các máy chủ CSDL có giao diện trên nền tảng ngôn ngữ SQL có những ưu điểm

và nhược điểm riêng. Ưu điểm dễ nhận thấy nhất đó là tính chuẩn của giao diện. Dù chưa

hoàn toàn, nhưng các phần khách của HQT CSDL hướng SQL bất kỳ có thể làm việc với

bất cứ máy chủ hướng SQL nào, không phụ thuộc vào việc chúng đã được xây dựng như thế

nào.

Nhược điểm của nó cũng dễ nhận thấy. Trên cấp độ cao như vậy của giao diện

giữa phần khách và phần chủ, quá ít phần mềm HQT CSDL làm việc từ phía khách. Điều đó

là bình thường, nếu từ phía khách là một nút có công suất không lớn. Nhưng nếu máy khách

có công suất tương đối lớn, thì thường xuất hiện ý muốn phân bố trên nó nhiều hơn các chức

năng quản trị CSDL, giảm tải máy chủ − một “điểm yếu” của toàn hệ thống.

Một trong những hướng có triển vọng của HQT CSDL đó là cấu hình hệ thống

mềm dẻo hơn, và khi đó phân bố chức năng giữa phần khách và phần người dùng (phần

chủ?) được xác định trong quá trình thiết đặt hệ thống.

III.1.4.2 Các ưu điểm của giao thức gọi thủ tục từ xa

Các giao thức gọi hàm thừ xa đã nhắc đến ở trên đặc biệt quan trọng trong các

115

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

HQT CSDL dựa trên nền tảng kiết trúc “khách-chủ”.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Đầu tiên, việc ứng dụng cơ chế gọi thủ tục từ xa cho phép phân chia lại chức năng

giữa phần khách và phần chủ, bởi vì trong mã nguồn chương trình, gọi một thủ tục từ xa

không có gì khác biệt so với gọi (từ) tại chỗ. Vì thế, trên lý thuyết bất cứ thành phần nào của

hệ thống cũng có thể được phân bố cả trên phần chủ, và cả trên phần khách.

Thứ hai, cơ chế gọi thủ tục từ xa che đậy những khác biệt giữa các máy tính

tương tác với nhau. LAN vật lý không đồng nhất của các máy tính được đưa về LAN luận lý

đồng nhất của các thành phần chương trình tương tác với nhau. Kết quả là người dùng

không cần quan tâm nhiều về việc phải mua các máy chủ và máy khách tương thích.

III.1.4.3 Sự phân bố chức năng điển hình giữa khách và chủ

Ngày nay, trong trường hợp điển hình, trên phần khách HQT CSDL chỉ có phần

mềm không truy cập trực tiếp đến CSDL, mà nhờ vả việc đó ở máy chủ bằng cách sử dụng

ngôn ngữ SQL.

Trong một vài trường hợp giá như có thể cài vào thành phần phần khách một vài

chức năng để làm việc với “cache cục bộ” của CSDL, nghĩa là, với phần CSDL được sử

dụng với cường độ cao bởi trình ứng dụng của phần khách. Trong công nghệ hiện tại điều

đó có thể thực hiện bằng cách xây dựng một bản sao cục bộ của máy chủ CSDL ở phần

khách và xem cả hệ thống là một tổ hợp các máy chủ tương tác với nhau.

Mặt khác, đôi khi mong muốn chuyển phần lớn hệ thống ứng dụng sang phần

chủ, nếu sự khác nhau về công suất giữa phần khách và phần chủ là vô cùng lớn. Nhìn

chung trong trường hợp này nếu sử dụng RPC thì không khó triển khai. Nhưng đòi hỏi phần

mềm nền tảng của máy chủ cho phép việc đó.

III.1.4.4 Các yêu cầu khả năng phần cứng và phần mềm nền tảng đối với khách và chủ

Từ các thảo luận trên dễ nhận thấy các yêu cầu phần cứng và phần mềm của chủ

và khách khác biệt nhau tuỳ thuộc vào loại hình ứng dụng hệ thống.

Nếu sự phân chia giữa khách và chủ tương đối cứng nhắc, như trong đa số các

HQT CSDL hiện đại, thì phần cứng nào và hệ điều hành nào trên máy chủ hoàn toàn không

quan trọng đối người dùng làm việc trên máy khách hoặc máy tính cá nhân, chỉ quan trọng

nó có thể thực thi tốt các luồng truy vấn xuất hiện.

Nhưng nếu như xuất hiện yêu cầu tái phân bố chức năng giữa khách và chủ, thì

116

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

không phải hoàn toàn không quan trọng những hệ điều hành nào được sử dụng.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Phần IV Các khung nhìn thực

Chương IV.1 Khái niệm khung nhìn thực

Khung nhìn thực (KNT, Materialized Views – MV) là kết quả thực thi truy vấn được

lưu lại (archived, cached) trong một bản chuyên biệt trong CSDL. Trong các tài liệu chúng

ta có thể bắt gặp các thuật ngữ tương đương với KNT, đó là ảnh chụp (Snapshot), khung

nhìn cụ thể (concret view), khung nhìn chỉ mục hoá (indexed view).

Hiệu ứng từ việc đưa vào ứng dụng cơ chế các KNT được thể hiện trong việc giảm

đáng kể thời gian thực thi các truy vấn đến CSDL nhờ bỏ qua một số lượng rất lớn các thao

tác cần thiết để chọn dữ liệu từ một hoặc thường là nhiều bảng quan hệ với nhau tương ứng

với các điều kiện của truy vấn.

Phụ thuộc vào độ phức tạp của tuy vấn và số lượng các bảng được sử dụng để thực

thi truy vấn, thời gian cần thiết để thực thi truy vấn có sử dụng KNT có thể nhỏ hơn hàng

trăm, thậm chí hàng ngàn lần so với thời gian thực thi một truy vấn thông thường.

Có thể sử dụng KNT như là công cụ nâng cao năng suất trong các ứng dụng chuyên

dụng như kho dữ liệu (data warehouse) và các hệ thống hổ trợ ra quyết định. Các hệ thống

đó có thể chứa hàng trăm ngàn hoặc hàng triệu bản ghi [1, 2].

Đi đối với những lợi ích đó, KNT cũng tạo ra những vấn đề nhất định. Nếu không

giải quyết được những vấn đề đó, KNT không những không nâng cao năng suất hệ thống

trong tổng thể, mà còn làm xấu tính chất đó.

Thứ nhất, cần phải giải quyết vấn đề chọn lựa truy vấn m à việc tạo KNT cho nó là có

ý nghĩa. Có thể mường tượng rằng, đó là những truy vấn khá “nặng” (trị giá thực thi cao) v à

thường xuyên được sử dụng. Quản trị viên CSDL hoặc là nhà phát triển ứng dụng có thể có

quan điểm chủ quan của mình về các truy vấn ứng viên tạo KNT. Tuy nhiên, quan điểm đó

không thể được xem là hoàn toàn đầy đủ và có căn cứ rõ ràng. Suy ra, trước khi đưa vào

ứng dụng KNT, cần phải thực hiện phân tích AKS trên quan điểm làm rõ các truy vấn phức

tạp và thường xuyên lặp lại.

Vấn đề tiếp theo đó là cập nhật KNT khi có sự thay đổi dữ liệu trong các bảng gốc

(các bảng mà truy vấn sử dụng). Vấn đề có hai khía cạnh. Khía cạnh thứ nhất liên quan đến

tần suất thay đổi dữ liệu. Tần suất thay đổi dữ liệu lớn tương ứng với việc phải cập nhật

KNT thường xuyên và dẫn tới hiệu quả dương tính ứng dụng KNT tiến về 0. Xác định tần

117

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

suất thay đổi dữ liệu cho một KNT cụ thể không cần nghiên cứu hệ thống một cách đặc biệt

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

thực tế là điều không thể. Vì cập nhật hoàn toàn (full refresh) KNT đòi hỏi rất nhiều thời

gian và nguồn lực hệ thống, nên trong hàng loạt các công trình các phương pháp cập nhật

tăng tiến (incremental update - IU) được đề nghị. IU được đặc trưng bởi việc cập nhật từng

phần nhỏ KNT trong khối lượng được xác định bởi những thay đổi dữ liệu cụ thể trong các

bảng gốc. Thực hiện IU nhanh hơn nhiều so với cập nhật hoàn toàn, và điều đó cho phép

nâng cao ngưỡng ứng dụng KNT (số lượng truy vấn được tạo KNT). Tuy nhiên, IU không

tính đến những yêu cầu cụ thể trong việc cập nhật dữ liệu trong một hệ thống cụ thể, nhưng

tại đây mở ra các khả năng tiềm tàng cả trong nâng cao hiệu quả ứng dụng một KNT cụ thể,

cả trong việc tăng số lượng của chúng. Vấn đề nằm ở chỗ, nhiều dữ liệu trong các hệ thống

thực tế hoàn toàn không yêu cầu phải cập nhật không chậm trễ, mà nếu như cập nhật có thể

trì hoãn, thì số lượng cập nhật có thể thu gọn đáng kể. Vấn đề trì hoãn cập nhật cũng như

cập nhật không đồng bộ không được chú ý đúng mức. Điều đó là có thể vì nó lại đòi hỏi

phải phân tích hệ thống cụ thể mà chúng ta dự định sẽ triển khai ứng dụng KNT.

Vấn đề tiếp theo đó là so sánh các truy vấn. Để lựa chọn từ dòng truy vấn đến HQT

CSDL những truy vấn đã có KNT, cần phải so sánh chúng một cách nhanh chóng và hiệu

quả. Nếu như chúng ta xem rằng, trình ứng dụng gửi một truy vấn SQL đã được lưu trữ từ

trước (dưới dạng KNT), thì không có vấn đề gì đặc biệt trong việc xây dựng máy phân tích

(analyzer) các truy vấn. Tuy nhiên, nếu như số trạm làm việc lớn, và các truy vấn có thể

được sửa đổi theo ý muốn của người dùng, thì có thể xuất hiện các truy vấn giống nhau về

mặt ngữ nghĩa nhưng khác nhau về mặt cú pháp cũng như câu chữ. Nếu như các truy vấn

này không được làm sáng tỏ, thì mỗi một KNT chỉ phục vụ một số lượng nhỏ các truy vấn,

và số lượng chung của KNT nhằm nâng cao năng suất hệ thống một cách tổng thể cần phải

rất lớn. Hoàn thiện cơ chế so sánh truy vấn là cách giải quyết của vấn đề. Cơ chế này cho

phép không những xác định sự đồng nhất của các truy vấn, mà còn xác định khả năng tính

một truy vấn từ một truy vấn khác. Triển khai một máy phân tích truy vấn như thế cho phép

xây dựng một KNT cho một nhóm các truy vấn “tương tự nhau”. Điều đó có thể làm giảm

đáng kể số lượng KNT (thu gọn bộ nhớ) và số lượng các các cập nhật (thu gọn tổng thời

gian cho phụ vụ).

Cùng với thời gian, trong các hệ thống máy tính tự động hoá (ACS) hiện đại sử dụng

cơ sở dữ liệu (CSDL) quan hệ (QH) đang được vận hành, số lượng các truy vấn cũng như

độ phức tạp của các truy vấn đều tăng dần. Trong mối tương quan với vấn đề đó, xuất hiện

118

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

yêu cầu nâng cao năng suất của hệ thống. Một trong những các giải quyết hiệu quả nhất bài

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

toán đó là sử dụng các khung nhìn thực (materialized view - MV) – là kết quả thực thi truy

vấn được lưu trữ trong CSDL. Áp dụng MV cho các truy vấn phức tạp và xuất hiện thường

xuyên sẽ giảm thời gian thực thi chúng, và đó cũng là nâng cao năng suất chung của cả hệ

thống, và cũng làm cho nó có khả năng đáp ứng các yêu cầu của từng người dùng riêng lẽ.

Ý tưởng sử dụng MV xuất hiện trong những năm 80 của thế kỷ trước. Tuy nhiên

trong những năm gần đây MV bắt đầu được triển khai ứng dụng trong các hệ quản trị (HQT)

CSDL thương mại như Oracle, MS SQL Server và IBM DB2. Nguyên nhân của việc chậm

triển khai ứng dụng một công nghệ hiệu quả như thế là phát triển cơ chế thiết kế và sử dụng

MV không đủ về mặt lý thuyết. Nếu các vấn đề cập nhật gia tăng (incremental update) dữ

liệu trong MV được chú ý khá nhiều trong các công trình khoa học, thì các vấn đề chọn lựa

các truy vấn – ứng cử viên để tạo MV, đánh giá hiệu quả áp dụng chúng, giảm tải bổ sung

cho CSDL hầu như không có ai tìm hiểu.

Chương IV.2 Ứng dụng của KNT

Trong báo giới chuyên ngành máy tính chúng ta thường gặp các thuật ngữ “khả năng

mở rộng” (scalability), “năng suất” (productivity) và “tính lưu động” (mobility). Trong khi

đó, để ngõ sự thật, rằng không một trong chúng tự bản thân nó có ý nghĩa, bởi vì bất cứ một

năng suất nào cũng có thể là không đủ, bất cứ tính lưu động nào cũng có thể là không hữu

ích, và chính khả năng mở rộng cũng chứa những thiếu sót nghiêm trọng. Thường thì phần

mềm hoạt động trên giới hạn của năng suất mà nền tảng phần cứng (thiết bị) cho phép. Thay

thế một máy chủ bằng một máy chủ khác hoàn thiện hơn không hề đơn giản vì trị giá quá

cao. Ngoài ra, thậm chí thiết bị hiện đại nhất cũng chỉ cho một mức tăng trưởng nhất định về

năng suất trong vài lần, và thường thì không đủ.

Tồn tại một số công nghệ cho phép nâng cao đáng kể và an toàn năng suất của hệ

thống. Có những tổng kết rất hiếm khi được thực hiện, và chúng rất “nặng”, chúng có thể

được thực hiện trong chế độ trì hoãn. Nhưng có những bộ phận tổng kết luôn luôn cần thiết

hoặc trong chế độ thời gian thực. Các tổng kết đó cần phải đ ược thực hiện ngay tức khắc, và

việc thực hiện chúng có thể kiềm hảm công việc của cả doanh nghiệp, ví dụ, quyết toán kế

toàn, tổng kết tồn kho,… KNT cho phép giải quyết các vấn đề đó.

Ý tưởng ứng dụng KNT – kết quả thực thi được giữ lại của các truy vấn, xuất hiện từ

những năm 80 của thế kỷ trước, nhưng KNT chỉ được triển khai thực tế cách đây không lâu

trong các phiên bản cuối cùng của một số HQT CSDL thương mại như Oracle, MS SQL

119

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

Server và IBM DB2.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Nếu như dữ liệu cần để trả lời một truy vấn có trong KNT, thi khi xuất hiện truy vấn

chúng sẽ được truy xuất bằng cách quét các bảng KNT. Khi đó các chi phí bao gồm trong

việc quét các bảng KNT, và không bao gồm các thao tác đắt giá như nối (JOIN), tổng kết

(SUM, COUNT, AVG, MIN, MAX) và nhóm (GROUP BY). Rõ ràng KNT khô ng cho phép

nâng cao năng suất trong tất cả các trường hợp, hiệu quả ứng dụng chúng có thể giảm đi rõ

rệt nếu thường xuyên xảy ra thay đổi dữ liệu trong các bảng gốc sử dụng để tạo KNT (hay

KNT sử dụng).

Hình IV.1 Nguyên tắc ứng dụng KNT

Sử dụng KNT vi phạm một số yêu cầu của lý thuyết thiết kế CSDL, chẳng hạn, vi

phạm tính dư thừa và các bất thường, và nó đòi hỏi chi phí duy trì. Tuy nhiên, một khi các

“tác hại” của nó là nhỏ, rất nhỏ so với “lợi ích” do nó mang lại, thì chúng ta có thể chấp

nhận các “tác hại” đó. Các ưu điểm ứng dụng KNT bao hàm trong việc nâng cao năng suất

hệ thống thông tin nhờ:

- Rút ngắn thời gian thực thi các truy vấn

- Giảm số lượng các lần đọc vật lý, bởi vì khối lượng dữ liệu cần quét giảm

- Giảm tải bộ vi xử lý trung tâm

- Giảm khối lượng thao tác sắp xếp cũng như tính các hàm tổng hợp.

Vấn đề sử dụng các KNT để trả lời các truy vấn nhận đ ược sự quan tâm đáng kể dưới

dạng ứng dụng chúng trong nhiều ứng dụng quản trị dữ liệu, chẳng hạn như trong liên kết

dữ liệu, trong các kho dữ liệu, trong thiết kế web, trong tối ưu hoá truy vấn. Bài toán có thể

được định dạng như sau: cho một truy vấn trên một lược đồ CSDL và tập hợp các KNT trên

chính lược đồ CSDL đó, có thể trả lời truy vấn sử dụng chỉ các truy vấn đến các KNT hay

không.

120

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

Sau đây chúng ta sẽ xem qua các hướng chủ đạo trong nghiên cứu KNT.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

IV.2.1 Ứng dụng KNT trong các HQT CSDL thương mại Hiện tại hệ thống hỗ trợ KNT được triển khai chỉ trong một vài HQT CSDL thương

mại, chẳng hạn như Oracle, Microsoft SQL Server, IBM DB2,… Từ phiên bản 7.0, trong

HQT CSDL Oracle đã có khả năng tạo ra các bảng chuyên biệt, được gọi là “ảnh chụp tạm

thời” (momentary snapshot). Các bảng đó ban đầu được tạp ra nhằm mục đích phục vụ sao

lưu nhân bản. Các ảnh chụp tạm thời được sử dụng như là kết quả trả lời cho một truy vấn

cụ thể. Khả năng tính lại một ảnh chụp được thực hiện trên cấp độ ứng dụng người dùng.

Trong phiên bản 8.1.5 của Oracle xuất hiện khả năng tính lại và tự động hoá cập nhật,

cũng như cơ chế hoạch định cập nhật các ảnh chụp tạm thời. Những điểm mới đó được sử

dụng bởi máy tối ưu hoá nhằm xác định kế hoạch tốt nhất để thực thi truy vấn. Có thể nói về

việc ứng dụng KNT từ thời điểm đó.

Từ phiên bản 8i Enterprise, HQT CSDL Oracle cung cấp khả năng định dạng KNT

theo ý muốn của người dùng và sử dụng chúng trong các ứng dụng của họ. Sử dụng KNT

cho phép rút gọn khối lượng sao lưu nhân bản nhờ hỗ tính kịp thời (hợp thời) của dữ liệu

thông qua KNT.

Sự khác nhau cơ bản trong triển khai KNT trong Oracle và Microsoft SQL Server là

ở điểm, Oracle cho phép không tạo các chỉ mục cho KNT, còn trong Microsoft SQL Server

cần phải tạo ít nhất một chỉ mục liên cung độc nhất (unique clustered index) cho KNT.

Trong khi đó, KNT trong Oracle có thể được cập nhật tự động hoặc không, trong khi đó

KNT trong SQL Server bao giờ cũng được cập nhật tự động.

Trong Oracle 9i có ba phương pháp cập nhật: hoàn toàn (thực tế là tạo lại KNT), gia

tăng (chỉ đưa vào các thay đổi), và ép buộc. Cập nhật ép buộc nghĩa là khi có khả năng thì

thực hiện IU, còn nếu không thì sử dụng cập nhật hoàn toàn.

Trong MS SQL Server, quá trình thực hoá (materialization) khung nhìn diễn ra tại

thời điểm tạo chỉ mục liên cung. Trong SQL Server, phần chứa các khoá của chỉ mục liên

cung nằm trực tiếp trong các trang dữ liệu. Khi có mặt chỉ mục, tất cả các chỉ mục còn lại

với tính chất là khoá sẽ sử dụng giá trị của chỉ mục liên cung, chứ không phải là các từ định

danh của bản ghi. Vì thế, có thể nói rằng, quá trình thực hoá các khung nhìn trong SQL

121

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

Server chính là quá trình xây dựng chỉ mục liên cung [2].

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Việc chọn các truy vấn để thực hoá trong các HQT CSDL đó được thực hiện bởi

người dùng trên cơ sở trực giác của họ và kinh nghiệm công việc trong một lĩnh vực ứng

dụng nhất định. Cũng có các công cụ chọn các truy vấn để thực hoá được đề nghị bằng cách

xem xét phương pháp chọn các truy vấn và định dạng KNT trên nền tảng các bảng được sử

dụng trong các truy vấn và trên nền tảng định giá sự phức tạp của các truy vấn và số lượng

SizeOf

)

các bản ghi trong các bảng:

T ( j

j

=)(

*

,

∑ S

TW i

i

i

SiszeOf

)

Z iT ( l

l

với – tất cả các bảng trong CSDL;

T

1,2,3...}

T j { | j

Z i

Z i

T

|

l

1,2,3...}

– tất cả các bảng được sử dụng trong Zi;

T { l

Si – độ phức tạp của truy vấn Zi.

Nếu như sự đánh giá đó cho một truy vấn vượt quá một ngưỡng cho trước, thì một

KNT được tạo ra cho truy vấn đó. Suy ra, giá trị ngưỡng càng cao, thì số lượng các truy vấn

được vật chất hoá càng lớn, dung lượng bộ nhớ cần thiết để lưu trữ KNT càng lớn, và nguồn

lực cần thiết để để duy trì KNT càng lớn.

Phương pháp chọn truy vấn để thực hoá vừa nêu không tính đến hai nhân tố rất quan

trọng ảnh hưởng đến hiệu quả ứng dụng KNT: - tần suất xuất hiện của các truy vấn được

chọn, và – tần suất thay đổi những dữ liệu mà các truy vấn được chọn sử dụng.

IV.2.2 Ứng dụng KNT nhằm đẩy nhanh tốc độ thực thi các truy vấn

Các KNT có thể giúp đẩy nhanh tốc độ trả lời các truy vấn, bằng các biến đổi các

truy vấn sử dụng các bảng gốc thành các truy vấn tương đương sử dụng các KNT hoặc KNT

và bảng gốc để nhận kết quả.

Để đẩy nhanh tốc độ thực thi các truy vấn, các khung nhình có thể được thực hoá

vĩnh viễn hoặc là tạm thời. Để tối ưu hoá thực thi các truy vấn và tách các phần chung (các

giá trị của các biểu thức điều kiện chọn lựa, kết quả phép nối,…) từ chúng. Các phần đó

được thể hiện dưới dạng các KNT tạm thời và được sử dụng để đẩy nhanh quá trình thực thi

các truy vấn từ nhóm đó. Ví dụ KNT tạm thời: truy vấn con (sub-query) trong truy vấn lồng

(nested query) có thể được thực hoá để được gọi lặp lại nhiều lần khi thực thi truy vấn lồng.

Các KNT vĩnh viễn (permanent) được lưu trữ trong thời gian dài. Chúng được sử

122

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

dụng để lưu trữ các kết quả thực thi các truy vấn theo ý muốn của người dùng, hoặc như là

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

kết quả thực hiện phép nối các bảng gốc hoặc các truy vấn phục vụ cho việc đẩy nhanh quá

trình IU các KNT. Các vấn đề duy trì KNT, chọn lựa các KNT tạm thời (được gọi là “tối ưu

hoá đa truy vấn”), cũng như chọn lựa các KNT vĩnh viễn được xem xét một cách toàn diện.

Chọn lựa các truy vấn tạm thời. khái niệm đa truy vấn như là nhóm các truy vấn

được thực thi đồng thời được đưa ra. Trước kia, tối ưu hoá đa truy vấn được đánh giá là quá

đắt đỏ để ứng dụng thực tiễn. Cơ chế chọn lựa các KNT tạm thời nhằm tối ưu đa truy vấn

trên cơ sở tính hiệu của các biểu thức quan hệ đã được điều chỉnh lại và đưa ra đánh giá hiệu

quả của điều chỉnh đó. Ngoài ra, đảm bảo các thuật toán heuristic (phương pháp giải quyết

vấn đề bằng cách đánh giá kinh nghiệm, và tìm giải pháp qua thử nghiệm và rút tỉa khuyết

điểm) hiệu quả nhằm tối ưu hoá đa truy vần và biểu diễn, rằng tối ưu hoá đa truy vấn là có

thể và hiệu quả. Tuy nhiên, không một trong số các công trình trong lĩnh vực tối ưu hoá đa

truy vấn tính đến cập nhật KNT. Lần đầu tiên việc đánh giá các chi phí cho cập nhật KNT

và đánh giá hiệu quả tối ưu quá trình IU được đưa ra trong các công trình [21, 25].

Chọn lựa các KNT vĩnh viễn. Tồn tại khả năng tách các KNT vĩnh viễn bổ sung cho

việc tối ưu hoá cập nhật các KNT khác. Một số trong các ý t ưởng cho lớp truy vấn rộng hơn

được mở rộng. Ban đầu, việc lựa chọn KNT vĩnh viễn mắc phải một số khiếm khuyến chính

sau đây và sau này đã được khắc phục:

- Không xem xét quá trình tối ưu hoá cập nhật các KNT trong sự có mặt của các

KNT khác. Chỉ đơn giản chỉ ra, rằng trị giá cập nhật một tập hợp các KNT có thể tính được,

nhưng không đưa ra thuật toán chi tiết để tính trị giá đó;

– Không chỉ ra, rằng có thể lợi dụng các biểu thức con (sub-expression) chung, nếu

chúng được thực hoá tạm thời;

– Không mở ra (phơi bày) các phương pháp hiệu quả để triển khai các thuật toán

KNT và liên kết chúng vào các máy tối ưu hoá các truy vấn.

Tuy nhiên, vẫn còn thiếu sót ở điểm trong đó vắng mặt một mô hình so sánh truy vấn

chính thức (formal), được thể hiện như là trình bày một số ý tưởng nào đó và giảng giải một

số trường hợp riêng lễ trên các ví dụ, còn các KNT vĩnh viễn được chọn lựa nhằm mục đích

tối ưu quá trình IU các KNT đã có.

Vấn đề biến đổi các truy vấn SPJ (Select-Proẹct-Join) để chúng có thể sử dụng các

KNT để thu kết quả. Có thể biến đổi truy vấn để nó có thể sử dụng các KNT, kể cả các truy

vấn tổng hợp (with aggregate functions). Vấn đề sử dụng các KNT để trả lời các truy vấn

123

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

phức tạp trong hỗ trợ ra quyết định chứa các phép nối, phép toán đại số cũng như các hàm

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

khác của người dùng, các hàm tổng hợp (thường là dọc theo các phép tính đa chiều) và các

truy vấn lồng. Có thể sử dụng các KNT để tính kết quả truy vấn để tạo ra các biến đổi hiệu

quả và tương đương về mặt trị giá. Các máy tối ưu hoá truy vấn tiếp nhận kế hoạch luận lý

làm đầu vào và tạo ra các kế hoạch vật lý hiệu quả để tính kết quả bằng cách sử dụng mô

hình trị giá (cost model). Mô hình trị giá đó cho phép không tính đến một số phần tử trong

các quan hệ trung gian. Nhờ đó, nó hiệu quả hơn cách tiếp cận truyền thống “quan hệ bổ

sung”.

IV.2.3 Ứng dụng KNT trong các kho dữ liệu

KNT cũng được ứng dụng trong các kho dữ liệu. Các tổ chức lớn thường lưu trữ dữ

liệu trong các CSDL khác nhau. Ví dụ, trường đại học lưu trữ các loại dữ liệu về sinh viên

trong một vài CSDL. Các công ty, chẳng hạn như IBM hay AT&T, lưu trữ thông tin về

khách hàng cũng như hợp đồng trong vài CSDL. Các tiếp cận chung cho liên kết dữ liệu –

đó là xây dựng các KNT kết nối, sau đó thu nhận câu trả lời cho các truy vấn từ các KNT

cho các hệ thống khác nhau. Mô hình này không áp dụng cho các ứng dụng đòi hỏi nghiêm

ngặt (critical) thời gian chờ đợi câu trả lời.

Chương IV.3 Cập nhật KNT

Mỗi lần dữ liệu trong các bảng gốc được cập nhật, các KNT sử dụng dữ liệu từ các

bảng gốc đó trở nên không thực (not actual) nữa. Quá trình làm cho dữ liệu trong KNT

tương ứng với các thay đổi dữ liệu trong các bảng gốc được gọi là cập nhật (actualization,

update) KNT

HQT CSDL cần phải thực hiện nhiều hình thức khác nhau để tính lặp lại các biểu

thức quan hệ để đáp ứng các sửa đổi của các dữ liệu gốc. Quan trọng l à làm thế nào để KNT

đã được cập nhật theo thời gian để đảm bảo hoàn toàn sẵn sàng sử dụng tại thời điểm xuất

hiện truy vấn. Duy trì tính thực tiễn của KNT đòi hỏi phải tính lại mỗi lần các bảng gốc

tương ứng thay đổi.

IV.3.1 Các cơ chế cập nhật KNT

Nếu như thực thi lại truy vấn và lưu trữ kết quả vào KNT (giống như khi tạo KNT),

thì quá trình cập nhật được gọi là tính lại hoàn toàn (Full Refresh). Nếu như chỉ thay đổi

KNT tương ứng chỉ với các phần dữ liệu đã thay đổi trong các bảng gốc, thì gọi là cập nhật

124

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

gia tăng (CNGT, UI – Incremental Update).

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Tính lại hoàn toàn KNT thường rất “đắt giá” và làm giảm năng suất của hệ thống, và

thư thế, không đảm bảo các yêu cầu về năng suất của hệ thống thông tin (Information

System - IS). CNGT thường “rẻ” hơn gấp nhiều lần so với tính lại hoàn toàn KNT cho mỗi

sữa đổi dữ liệu trong bảng gốc. Tuy nhiên, không phải bao giờ CNGT cũng “rẻ” hơn về mặt

tổng thể, n >> 1 lần CNGT có thể bao gồm tổng chi phí cao h ơn so với một lần tính lại hoàn

toàn.

Vấn đề CNGT KNT được nghiên cứu khá đầy đủ. Sau đây chúng ta sẽ lược qua một

vài phương án triển khai CNGT KNT.

Vào năm 1984, lần đầu tiên KNT được xem như là ứng cử viên để trả lời các truy vấn

theo thời gian thực, nhưng chính các tác giả cũng từ chối cách tiếp cận này vì lý do quá khó

khăn trong triển khai cơ chế CNGT KNT.

Các công trình [51, 38] đã khái quát các công trình trong lĩnh vực CNGT KNT cho

tới năm 1995. Trên nền tảng tổng kết đó, quá trình phân tích rộng hơn và phân tích các công

trình sau này, có thể đề nghị phân loại các vấn đề đảm bảo KNT trên cơ sở sáu khía cạnh

(aspect):

Khía cạnh thông tin. Khía cạnh này đánh giá khối lượng thông tin có được để duy

trì các khung nhìn. Khả năng truy cập có thể là đến tất cả các bảng gốc hoặc một vài trong

quá trình thực thi việc duy trì KNT, cũng như khả năng truy cập đến các thông tin về các

ràng buộc toàn vẹn dữ liệu và thông tin về các khoá. Khía cạnh thông tin theo dõi các thông

tin được sử dụng để tính các thay đổi cần thiết trong KNT trong sự tương ứng với các thay

đổi trong các bảng gốc.

Khía cạnh sửa đổi (modification). Khía cạnh này xem xét các loại sửa đổi: thêm

(insert) và xoá (delete) các bản ghi. Thay đổi (cập nhật, update) được mô hình hoá như là tổ

hợp của xoá và thêm hoặc là một thao tác riêng biệt. Nếu xem xoá là một thao tác riêng biệt,

thì yêu cầu ít thông tin cũng như chi phí hơn. Khi xoá hoặc thêm mới các bản ghi vào bảng

gốc, thường thì các tập hợp các bản ghi cần xoá hoặc thêm vào KNT được tính ra. Rất ít khi

cập nhật KNT bằng một thao tác.

Khía cạnh ngôn ngữ. Trên khía cạnh này xem xét các thành tố công cụ ngôn ngữ

được dùng để tạo ra các KNT: Truy vấn kiểu SPJ, hay là tập con của đại số quan hệ; SQL

125

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

hay là tập con của SQL; cho phép trùng (duplicate) hay không; các hàm tổng hợp.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Khía cạnh phiên bản các bản ghi. Thuật toán cập nhật có thể làm việc với tất cả

hay là chỉ những phiên bản nào đó của CSDL. Cho mỗi phiên bản cụ thể hoặc kiểu thay

(sửa) đổi dữ liệu trong bảng gốc có thể sẽ áp dụng các thuật toán khác nhau.

Khía cạnh thời điểm thực thi CNGT. Khía cạnh này xác định thời điểm cập nhật

các KNT. Cập nhật được tiến hành như là một phần của giao tác sửa đổi dữ liệu trong các

bảng gốc, hay là được thực thi vào một thời điểm khác.

Khía cạnh phương pháp cập nhật. Có thể chia các phương pháp cập nhật thành hai

loại là ép buộc CNGT và ép buộc tính lại toàn bộ. Trong quá trình cập nhật của mỗi KNT

vĩnh viễn, phương pháp tính lại toàn bộ hoặc CNGT được chọn dựa trên trị giá tối thiểu của

việc thực thi cập nhật và trên cơ sở tần suất cập nhật dữ liệu trong các bảng gốc. Khía cạnh

này cũng xác định thứ tự thực thi CNGT.

IV.3.2 Phân loại các thuật toán CNGT KNT

IV.3.2.1 CNGT có sử dụng đầy đủ thông tin (bảng KNT, các bảng gốc, văn bản truy vấn và văn bản truy vấn thao tác dữ liệu)

Thuật toán đếm. Một trong những kiểu thuật toán CNGT KNT đó là thuật toán đếm.

Thuật toán này có nền tảng là ý tưởng lưu trữ số lượng (count) các bản sao (duplica) cho

mỗi bản ghi của KNT. Thuật toán này có thể sử dụng cho các KNT chứa các bản sao của

bản ghi. Khi xoá hoặc thêm mới một bản ghi từ/vào bảng gốc, nếu bản ghi có quan hệ với

bản ghi của KNT, thì giảm/tăng số đếm (counter) của bản ghi tương ứng trong KNT

xuống/lên một đơn vị. Các thuật toán được đề nghị hỗ trợ cả các KNT chứa các hàm tổng

hợp, nhưng không có đệ quy. Việc đếm số lượng các bản ghi có thể được thực hiện với trị

giá nhỏ hơn hoặc lớn hơn so với thu nhận các bản ghi trực tiếp từ các bản gốc. Thuật toán

tối ưu ở chỗ nó chỉ tính các bản ghi KNT cần phải thêm vào hoặc xoá đi.

Thuật toán CNGT KNT được định nghĩa trên các truy vấn có nối tương đương

(EQUAL-JOIN), chiếu và chọn lựa (SPJ) sử dụng số đếm các bản sao bản ghi trong KNT.

Có một phương pháp triển khai KNT khác, được gọi là ViewCache. Trong

ViewCache lưu trữ tổ hợp các con trỏ (pointer) đến các bản ghi của bảng gốc được sử dụng

trong quá trình thực hoá khung nhìn. Nghĩa là, trong khung nhìn thực lưu trữ chỉ các chỉ

mục của các bản ghi của bảng gốc, chứ không phải kết quả thực thi truy vấn. Tác giả đề

nghị thuật toán CNGT ViewCache xác định trên các truy vấn SPJ với một hoặc hai bảng

126

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

gốc. Trên cơ sở hai thuật toán đó xây dựng thuật toán CNGT ViewCache với các truy vấn

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

sử dụng hơn hai bảng gốc. Công trình đánh giá trị giá thực thi CNGT, trị giá truy cập đến

ViewCache cho mỗi kiểu truy vấn SPJ và mỗi kiểu thao tác dữ liệu, và sử dụng ViewCache

để tạo ra kết quả thực thi truy vấn trong các giao dịch I/O (Input-Output) cũng như tải của

bộ vi xử lý trung tâm. Và trên cơ sở đó, công trình đánh giá hiệu quả ứng dụng ViewCache.

Một kỹ thuật hiệu quả để tối ưu hoá được đề nghị. Kỹ thuật cho phép thay việc thực

thi lại toàn bộ các truy vấn bằng một sửa đổi gia tăng KNT cục bộ hiệu quả. Phương pháp

có nền tảng là các tính toán có giới hạn của phép hiệu các phép chọn, chiếu, tích Đề-cát, nối,

hiệu và giao. Xây dựng các quy luật cho tất cả các phép mà thuật toán hỗ trợ. Và trên cơ sở

các quy luật đó, quy luật chung để CNGT KNT cho một truy vấn/biểu thức được xây dựng.

Quy luật chung đó tính toán phần cần thêm vào hay xoá đi của KNT.

Cũng có đề nghị thuật toán để đưa ra biểu thức đại số nhằm tính toán các thay đổi

cho KNT có tính đến các KNT có thể chứa các bản sao (duplica). Cập nhật KNT với MIN,

MAX được xem xét riêng lẽ trong các thuật toán chuyên biệt. Hai biểu thức đại số riêng biệt

cho thao tác thêm mới và xoá tương ứng được đưa ra cho mỗi KNT.

Các thuật toán số đếm vừa xem xét đảm bảo năng suất cao nhất trong CNGT KNT

kiểu SPJ. Rất có ý nghĩa để làm tốt hơn các thuật toán đó nhờ vào việc tính đến các bản ghi

lặp lại.

CNGT KNT có các phép nối ngoài (Outer-Join Views). CNGT KNT có phép nối

ngoài toàn phần (FULL Outer-Join). Thuật toán biến đổi truy vấn đầu vào với phép nối

ngoài toàn phần thành các truy vấn với phép nối ngoài trái cộng với truy vấn với phép nối

ngoài phải (FULL Outer Join thành LEFT Outer Join cộng với RIGHT Outer Join) và tính

các cập nhật riêng lẽ cho mỗi trong hai truy vấn mới đó, sau đó đưa ra cập nhật cho KNT

trên nền tảng hai cập nhật thu được.

Liên kết dữ liệu từ nhiều CSDL là một vấn đề rất quan trọng. Mô hình liên kết dữ

liệu có thể như sau: dữ liệu từ nhiều CSDL được tổ hợp vào KNT liên kết và lưu trữ trong

CSDL. Thuật toán CNGT các KNT liên kết với các phiên bản phép nối ngoài cũng được dẫn

ra.

IV.3.2.2 CNGT KNT sử dụng một phần thông tin

Khác với KNT mà CNGT yêu cầu phải sử dụng đầy đủ thông tin, một số KNT có thể

được cập nhật chỉ cần sử dụng một tập hợp con các bảng gốc tham gia trong quá trình thực

127

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

hoá khung nhìn (part of information, thông tin một phần). Khả năng ứng dụng CNGT có sử

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

dụng một phần thông tin cũng có thể phụ thuộc vào kiểu của thao tác dữ liệu – thêm mới,

xoá hay là sửa đổi.

A) CNGT không cần sử dụng thông tin

Hàng loạt các công trình đề nghị thực thi CNGT KNT:

– không sử dụng bảng gốc, sử dụng KNT và các truy vấn cập nhật bảng gốc;

– chỉ sử dụng KNT và các ràng buộc toàn vẹn của các trường;

– sử dụng một phần các bảng gốc.

“Cập nhật liên quan” là những cập nhật gây ảnh hưởng đến trạng thái của KNT, và

ngược lại, “cập nhật không liên quan” – không ảnh hưởng đến trạng thái của KNT. Có thể

xác định các cập nhật liên quan và không liên quan này. Các thuật toán CNGT KNT được

xây dựng trên nền tảng các truy vấn kiểu chọn, chiếu v à nối, cũng như các truy vấn kiểu SPJ

định nghĩa những thay đổi tối thiểu cần thiết trong KNT khi thêm mới, xoá và thay đổi dữ

liệu trong một bảng gốc, cũng như đồng thời trong các bảng gốc và cho các tổ hợp khác

nhau của các kiểu thao tác dữ liệu trên bảng gốc cho các “cập nhật không liên quan”.

B) CNGT sử dụng KNT – tự cập nhật

Những KNT có thể được duy trì trong khi chỉ sử dụng KNT và các ràng buộc khoá

được gọi là KNT tự cập nhật. Tính tự cập nhật – một tính chất hiệu quả để hỗ trợ các KNT

lớn trong các ứng dụng quan trọng câu trả lời nhanh với độ tin cậy cao. Một ví dụ cho môi

trường đó – đó là kho dữ liệu, nơi các KNT được sử dụng để nối dữ liệu từ tập hợp các

CSDL, và nơi mà các bảng gốc thường là không truy cập được. “Các cập nhật được tính một

cách tự chủ” (autonomically) cho phép trên cơ sở trạng thái hiện tại củ KNT và văn bản các

truy vấn sửa đổi các bảng gốc xác định cái gì và cần phải như thể nào để cập nhật trong

KNT một cách độc lập với trạng thái các bảng gốc. Xác định khả năng tính toán độc lập các

cập nhật, trong đó các cập nhật bảng gốc được phân chia thành 4 kiểu: thêm mới, xoá, thay

đổi các bản ghi tham gia và KNT và thay đổi các bản ghi không tham gia vào KNT. Các

truy vấn KNT kiểu SPJ và kiểu nối ngoài tương ứng với thêm mới, xoá và sửa có khả năng

tự cập nhật.

C) CNGT sử dụng KNT và một số các bảng gốc

Trong một số trường hợp không phải tất cả các bảng gốc là có thể truy cập để CNGT

KNT. Có thể tồn tại hai trường hợp: truy cập được KNT và tất cả các bảng gốc ngoại trừ các

128

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

bảng gốc thay đổi; truy cập được KNT và các bảng gốc có thay đổi.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Các bảng gốc thay đổi truy cập được. Đưa vào khái niệm “lịch sử” (history) cho

trường hợp này. Lịch sử thể hiện mình là một chuỗi các bản ghi được lưu trữ. Các dữ liệu

theo trình tự thời gian (chronological data) có thể không được đưa vào hoàn toàn trong

CSDL, bởi vì chúng có thể quá nhiều. Và như thế, vấn đề hỗ trợ những KNT sử dụng lịch sử

– hỗ trợ KNT để trả lời việc thêm mới các dữ liệu theo trình tự thời gian vào lịch sử không

cần truy cập đến tất cả các dữ liệu được thêm vào.

Chỉ có thể truy cập đến các bảng đã sửa đổi. Đôi khi KNT được truy cập bằng việc

sử dụng chỉ các bảng gốc đã thay đổi và KNT và không truy cập đến các bảng gốc khác.

Nhiều sửa đổi khác nhau cần phải xem xét theo các cách khác nhau.

Có thể cập nhật bản sao cục bộ của các nguồn dữ liệu độc lập (autonomic data-

source) để duy trì các bản sao được thực tiễn (more actual) hơn. Một cấu trúc chặt chẽ

(formal) được đưa vào nhằm đảm bảo nền tảng lý thuyết để giải quyết vấn đề đó, và công

trình cũng nghiên cứu hiệu quả của các phương pháp cập nhật khác nhau. Có hai thước đo

tính thực tiễn (actual) được định nghĩa, cũng như các mô hình sửa đổi dữ liệu gốc, các

phương pháp đồng bộ hoá, và dẫn ra hiệu quả của các thuật toán phân bổ nguồn khác nhau.

D) CNGT sử dụng các KNT bổ sung và các chỉ mục

Chọn chỉ mục cho các khung nghìn có thể tối ưu hoá quá trình sử dụng chúng và

CNGT. Vấn đề CNGT KNT dưới dạng các thay sửa đổi CSDL, có thể rút ngắn trị giá toàn

bộ về thời gian cập nhật khung nhìn bằng cách thực hoá và duy trì các khung nhìn bổ sung.

Định hìn vấn đề xác định tập hợp tối ưu các khung nhìn bổ sung để thực hoá và thay quá

trình tối ưu hoá toàn cục (global) bằng cục bộ. Tối ưu hoá cục bộ được áp dụng cho mỗi

KNT cục bộ.

OptimalViewSet là thuật toán toàn diện nhằm xác định tập hợp tối ưu các khung nhìn

bổ sung để thực hoá trong quá trình CNGT KNT. Trị giá quá trình duy trì tập hợp KNT cho

giao tác thu được như là trị giá chuỗi sửa đổi rẻ nhất. Chuỗi đó d ùng để CNGT KNT. Ví dụ,

giả sử cần phải duy trì KNT kiểu SPJ R1 R2 R3. Có vài tập hợp các KNT bổ sung khác

nhau cho việc duy trì – các phép nối { }, {Rl R2}, {R2 R3}, {R1 R3}, {Rl R2, R2 R3},

{R2 R3, R1 R3}, {Rl R2, R1 R3}. Chọn các phép nối cho hiệu quả cao nhất trong số

các kết nối đó. Cần phải chọn được một kế hoạch hiệu quả để duy trì đồng thời tập hợp

KNT bằng cách sử dụng các biểu thức con chung của các biểu thức khác nhau được duy trì

129

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

của các khung nhìn. Ý tưởng đó là một số các dữ liệu được cập nhật có thể được sử dụng để

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

cập nhật nhiều KNT khác nhau. Kế hoạch cập nhật tốt nhất có thể là: CNGT ép buộc tất cả

các KNT vĩnh viễn; và tính lại toàn bộ một cách ép buộc khi CNGT là không thể; cập nhật

thích nghi – cho mỗi KNT chọn tính lại toàn bộ hoặc là CNGT trên cơ sở tối thiểu hoá trị

giá cập nhật.

IV.3.2.3 Cập nhật trì hoãn

Cập nhật KNT không chậm trễ không thể thực thi trong một số ứng dụng. Ví dụ,

trong hệ thống kho dữ liệu, nếu CSDL tổng hợp (liên kết) không biết, những KNT nào tồn

tại trong kho dữ liệu, thì không thể trên cập nhật các KNT nền tảng các giao tác sửa đổi dữ

liệu trong các bảng gốc. Thậm chí, trong các hệ thống tập trung hoá, nơi có thể biết tất cả

các KNT, thì có thể, cần phải tối thiểu hoá gới hạn trên của kích thước giao tác để duy trì

KNT. Trong các trường hợp đó, cập nhật trì hoãn được là khả thi nhất.

Có thể CNGT KNT cho đến thời điểm sử dụng KNT. Khi đó, tất cả các thay đổi dữ

liệu được ghi nhớ lại. Trong quá trình cập nhật như thế xuất hiện khả năng tối ưu hoá thao

tác CNGT. Ngoài ra, công trình cũng nghiên cứu hai vấn đề: 1) cập nhật KNT như thế nào

sau khi các bảng gốc đã được sửa đổi, và 2) tối thiểu hoá thời gian như thế nào, vì trong thời

gian đó không thể truy cập KNT vì cập nhật.

CNGT trì hoãn KNT cần các bảng ghi nhớ. Các bảng này chứa thông tin được ghi lại,

bắt đầu từ thời điểm cuối cùng cập nhật KNT. Có ba kịch bản (scenario) sử dụng các bảng

ghi nhớ và công trình chỉ ra những bảng nào rút ngắn giao tác và phân tích thời gian cập

nhật. Mỗi kịch bản được mô tả bởi một invaritant’om. Invaritant sử dụng chuỗi các trạng

thái của CSDL. Đồng thời chỉ ra rằng, có thể giảm trị giá của giao tác cập nhật và thời gian

cập nhật KNT bằng cách lựa chọn tương ứng các bảng bổ sung.

CNGT KNT thường không đắt như tính lại hoàn toàn. Tuy nhiên, nó vẫn là một thao

tác đắt giá. Thực thi CNGT KNT như là chuỗi các bước nhỏ và đồng bộ. Và có thể điều

khiển kích thước mỗi bước để hạn chế xung đột giữa quá trình cập nhật và các thao tác

tương tranh khác truy cập đến KNT và các bảng gốc. Khi đó, các cập nhật đảm bảo KNT

thực tiễn trong một thời điểm giữa lần cập nhật cuối cùng và cập nhật hiện tại.

Các phương pháp đã nghiên cứu và các phương pháp cập nhật trì hoãn KNT không

cho phép khai thác các đặc thù của các dữ liệu được cập nhật của bảng gốc và thực tế là

những biến thể của cập nhật đồng bộ KNT, bởi vì chúng bị hạn chế bởi thời điểm sử dụng

130

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

KNT.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Ứng dụng ý tưởng KNT trong các HQT CSDL chưa hỗ

Chương IV.4 trợ KNT

KNT không cho phép nâng cao năng suất trong tất cả các trường hợp, hiệu quả ứng

dụng chúng có thể giảm đi rõ rệt nếu thường xuyên xảy ra thay đổi dữ liệu trong các bảng

gốc sử dụng để tạo KNT (hay KNT sử dụng). Nghĩa là, lợi ích sử dụng KNT thể hiện ở sự

chênh lệch tổng chi phí duy trì KNT và tổng chi phí thực thi các truy vấn trên các bảng gốc;

hoặc là tổng chi phí duy trì cao hơn nhưng được dàn trải theo thời gian và không gây ảnh

hưởng đến hoạt động của hệ thống, trong khi chi phí thực thi truy vấn giảm đi rõ rệt. Năng

suất của hệ thống thông tin có thể bị giảm, thậm chí khả năng phản hồi các truy vấn bị mất

đi nếu số lượng truy vấn sử dụng một tập hợp dữ liệu ít và trị số các truy vấn thấp, trong khi

các phần tử của tập hợp dữ liệu đó được cập nhật với tần suất cao.

Trong quá trình ứng dụng KNT trong các hệ quản trị cơ sở dữ liệu (HQT CSDL) hỗ

trợ KNT như SQL Server và Oracle nảy sinh vấn đề HQT CSDL không thể thực hiện cập

nhật gia tăng cho nhiều KNT được tạo ra trên cơ sở các truy vấn khác nhau, đặc biệt trong

số đó nhiều truy vấn đòi hỏi nhiều tài nguyên. Khi đó, việc buộc phải cập nhật hoàn toàn

làm cho việc ứng dụng KNT trở nên không còn hiệu quả, thậm chí, KNT có thể trở thành

“gánh nặng” đối với hệ thống. Trong khi đó, trong nhiều trường hợp, kết quả thực thi các

truy vấn đó có thể cần phải có trong chế độ thời gian thực. Ngoài ra, sử dụng KNT là một ý

tưởng rất tốt để nâng cao năng suất hệ thống, nh ưng chúng chưa được hỗ trợ trong tất cả các

HQT CSDL nguồn mở và miễn phí như mySQL, PostgreSQL, FireBird,…kể cả thương mại

như Interbase,…

Ta có thể ứng dụng một phần ý tưởng KNT trong các HQT CSDL đó, cũng như khắc

phục nhược điểm không thể thực hiện cập nhật gia tăng trong nhiều trường hợp đối với các

HQT CSDL có hỗ trợ KNT, bằng cách xây dựng các bẫy sự kiện (trigger) để thực hiện cập

nhật gia tăng các bảng KNT.

IV.4.1 Ví dụ về hạn chế của KNT trong các HQT CSDL thương mại

KNT được tạo ra với ý tưởng ban đầu là một công cụ hỗ trợ cho các kho dữ liệu và

các hệ thống hỗ trợ ra quyết định. Tuy nhiên, nó có thể được ứng dụng cho bất kỳ CSDL

nào.

Một ví dụ điển hình về tính hiệu quả của việc ứng dụng KNT. Một tập đoàn có nhiều

đại diện tại nhiều vùng thuộc nhiều quốc gia cung cấp cho nhiều khách hàng khác nhau một

131

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

số lượng lớn các sản phẩm. Như vậy, CSDL trung tâm của tập đoàn này có thể chứa hàng

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

triệu hoặc hơn bản ghi về chi tiết bán hàng. Bây giờ, người ta cần thống kê số lượng sản

phẩm được bán cũng như tổng doanh thu cho từng loại sản phẩm tại mỗi vùng theo quốc

gia. Truy vấn được thực thi và kết quả được trả lại sau một khoảng một thời gian T1 nào đó.

Kết quả này được lưu lại trong một bảng – KNT bao gồm 200 bản ghi. Sau này, mỗi khi

xuất hiện truy vấn đó, thay vì thực thi lại từ đầu bằng việc quét và xử lý hàng triệu bản ghi,

HQT CSDL đọc bảng KNT chứa chỉ 200 bản ghi và trả lại kết quả trong khoảng thời gian T2

(thường rất nhỏ so với T1), thường là vài ms. Thậm chí, KNT có thể được dùng để trả lời các

truy vấn tương tự nhưng cho trường hợp cả thế giới, hoặc một vài vùng nào đó, hoặc trường

hợp chỉ cần tính hoặc doanh thu hoặc số lượng sản phẩm. Tính năng này được gọi là viết lại

truy vấn (query rewrite). Trong các HQT CSDL thương mại, các truy vấn được so sánh và

viết lại như thế nào là điều hầu như không được phổ biến. Một số công trình đưa ra các kỹ

thuật so sánh truy vấn để xác định sự tương đồng, cũng như sự bao phủ giữa các truy vấn

với nhau. Các kỹ thuật đó có thể được sử dụng để triển khai kỹ thuật KNT.

Có những thống kê rất hiếm khi được thực hiện, và chúng rất “nặng” trên khối lượng

dữ liệu lớn, chúng có thể được thực hiện trong chế độ trì hoãn. Nhưng có những bộ phận kết

quả thống kê luôn luôn cần thiết hoặc được yêu cầu trong chế độ thời gian thực. Các thống

kê đó cần phải được thực hiện ngay tức khắc, và việc thực hiện chúng có thể kiềm hãm công

việc của cả tổ chức, ví dụ, quyết toán kế toán, thống kê tồn kho,… KNT cho phép giải quyết

các vấn đề đó. Nó có thể giúp tăng tốc nhiều lần các truy vấn phức tạp tr ên các CSDL với số

lượng bản ghi rất lớn, cho phép thực thi các truy vấn phức tạp trên các CSDL dung lượng

hàng terabytes trong vài giây hoặc phần nhỏ của giây. HQT CSDL thực hiện việc đó bằng

cách sử dụng các thống kê hoặc các phép nối đã được tính trước của dữ liệu – kết quả thực

thi các truy vấn, để trả lời các truy vấn một cách trong suốt đối với người dùng. Thông

thường, các thống kê được tính trước đó có kích thước rất nhỏ so với nguồn dữ liệu gốc là

các bảng, mà nếu không có KNT, truy vấn sẽ được thực thi trên các bảng đó.

Truy vấn tính tổng doanh thu cho từng khách hàng theo từng vùng trên CSDL trong

SQL Server 2005 sau đây phần nào minh hoạ sức mạnh của KNT (gọi là indexed view trong

SQL Server 2005) thông qua việc giảm rất mạnh thời gian thực thi truy vấn, trong khi thời

gian thực hiện cập nhật bảng gốc tăng không đáng kể. Tạm gọi truy vấn này là

Q_TongTheoVung:

SELECT a.HoTen, b.KhachHangID, COUNT_BIG(*) as CNT, SUM(d.SoLuong *

132

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

d.DonGia) AS TongTien FROM Sales.VungLanhTho a INNER JOIN Sales.KhachHang b

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

ON a.LanhThoID = b. LanhThoID INNER JOIN Sales.BanHang c ON a. LanhThoID = c.

LanhThoID AND b.KhachHangID = c.KhachHangID INNER JOIN Sales.ChiTietBanHang

d ON c.BanHangID = d.BanHangID GROUP BY a.Name, b.KhachHangID.

Các bảng VungLanhTho, KhachHang, BanHang và ChiTietBanHang được sử dụng

trong truy vấn có số lượng bản ghi tương ứng là 10, 19.185, 31.465 và 121.217. Khi không

sử dụng KNT, truy vấn này có thời gian thực thi trung bình 750 ms – một tốc độ ấn tượng

trên một số lượng bản ghi tương đối lớn nhờ các chỉ mục liên cung đã được tạo ra cho một

số cột của các bảng KhachHang, BanHang, ChiTietBanHang. Thời gian thực thi truy vấn

này được đo bằng cách dùng SET STATISTICS TIME ON hoặc getdate (thực tế tồn tại các

phương pháp để đo với độ chính xác cao hơn) trên hệ thống với bo mạch chủ DQ965GF,

CPU E6800, 2GB RAM và SATA2 RAID 5 với một người dùng. Kế hoạch thực thi do công

cụ Query Analyzer cung cấp như sau: quét d – 27%, quét c – 14%, nối c d – 9%, quét b –

1%, nối (c d) b – 34%, tổng hợp – 14%, nối (kết quả tổng hợp) a – 0%, chọn kết quả –

0%.

Tuy nhiên, sau khi tạo KNT V_TongTheoVung cho truy vấn trên, thời gian thực thi

của nó đo được xấp xỉ 0 ms. Kế hoạch thực thi ước lượng của truy vấn Q_TongTheoVung

trên sẽ là: quét V_TongTheoVung – 100%, chọn kết quả – 0%. Vì lệnh CREATE UNIQUE

CLUSTERED INDEX đã thực hoá khung nhìn, kết quả thực thi truy vấn trên đã có sẵn

trong KNT và bao gồm chỉ 6 bản ghi, nên thời gian thực thi truy vấn trên xấp xỉ 0 ms là điều

dễ hiểu. Thậm chí, bây giờ thời gian thực thi truy vấn tính tổng doanh thu to àn cầu cũng xấp

xỉ 0 ms, bởi vì SQL Server 2005 cũng sử dụng một cách linh hoạt KNT để trả lời.

Phân tích kế hoạch thực thi việc cập nhật bảng ChiTietBanHang, chẳng hạn cập nhật

số lượng đã bán – SoLuong, cho thấy SQL Server 2005 cập nhật KNT V_TongTheoVung

theo phương pháp cập nhật gia tăng trong quá trình cập nhật bảng gốc. Thời gian cập nhật

bảng ChiTietBanHang lúc này giao động từ 2 – 3ms, so với xấp xỉ 1ms khi chưa có KNT.

Tuy nhiên, SQL Server không thể thực hiện cập nhật gia tăng cho mọi KNT. Khi không thể

thực hiện cập nhật gia tăng, HQT CSDL sẽ thực hiện cập nhật toàn phần.

Chẳng hạn, Oracle 11g chỉ có thể cập nhật theo phương pháp cập nhật hoàn toàn

KNT trên cơ sở truy vấn để tính tổng thành tiền cho từng khách hàng theo từng vùng (tạm

gọi là Q_TongTheoKhachHang):

SELECT a.QuocGia_Vung, b.KhachHang_ID, SUM(c.SoLuong*d.DonGia) AS

133

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

Total FROM SH.QUOCGIA a INNER JOIN SH.KHACHHANG b ON a. QuocGia_ID =

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

b.QuocGia_ID INNER JOIN SH.BANHANG c ON b.KhachHang_ID = c.KhachHang_ID

INNER JOIN SH.BANGGIA d ON c.SanPham_ID = d.SanPham_ID AND c.ThoiGian_ID

= d.ThoiGian_ID GROUP BY a.QuocGia_Vung, b.KhachHang_ID.

Các bảng QUOCGIA, KHACHHANG, BANHANG và BANGGIA có số lượng bản

ghi tương ứng là 23, 55.500, 918.843 và 82.112. Thời gian thực thi truy vấn là 5.42s (đo

thời gian thực thi bằng lệnh SET TIMER ON). Thời gian cần thiết để cập nhật một bản ghi

trong bảng BANHANG xấp xỉ 1ms. Khi KNT được tạo ra với thông số REFRESH ON

COMMIT, Oracle thực hiện việc cập nhật KNT giống như một phần của giao tác thực thi

cập nhật bảng gốc. Thời gian thực hiện lệnh sửa đổi dữ liệu trong các bảng gốc sẽ bằng thời

gian cập nhật KNT, xấp xỉ 5.4s. Điều đó chứng tỏ KNT này được Oracle cập nhật theo

phương pháp cập nhật hoàn toàn. Một khi KNT được cập nhật sau khi có sự thay đổi dữ liệu

trong các bảng gốc, thời gian thực thi truy vấn Q_TongTheoKhachHang xấp xỉ 0ms.

Khi KNT đã được cập nhật, Oracle có thể sử dụng nó để trả lời các truy vấn, chẳng

hạn các truy vấn tương đương với truy vấn Q_TongTheoKhachHang nhưng có cách viết

khác; hoặc truy vấn Q_TongTheoKhachHang có thêm điều kiện WHERE a.QuocGia_Vung

= ‘Americas’; hoặc truy vấn tính tổng thành tiền theo từng vùng sẽ có thời gian thực thi xấp

xỉ 0 ms. Đó là kết quả làm việc của chức năng viết lại truy vấn.

IV.4.2 “KNT” trong các HQT CSDL không hỗ trợ KNT

Nếu HQT CSDL không hỗ trợ KNT, chúng ta vẫn có thể áp dụng ý tưởng KNT để

tăng tốc độ thực thi truy vấn bằng cách sử dụng các bẫy sự kiện (trigger). Chẳng hạn, cho

trường hợp truy vấn Q_TongTheoKhachHang trên đây chúng ta có thể thực hiện theo sơ đồ

ba bước sau đây.

Bước 1. Tạo một bảng có các cột và kiểu dữ liệu tương ứng chứa kết quả thực thi truy

vấn Q_TongTheoKhachHang, sau đó tạo các chỉ mục nếu cần:

CREATE TABLE TMV_TongTheoKhachHang as Q_TongTheoKhachHang.

Bước 2. Tạo các bẫy sự kiện thêm mới (ON INSERT), cập nhật (ON UPDATE) và

xoá (ON DELETE) cho mỗi bản ghi cho mỗi bảng trong các bảng gốc liên quan

QUOCGIA, KHACHHANG, BANHANG, BANGGIA. Các bẫy sự kiện này sẽ điều chỉnh

giá trị các bản ghi trong bảng TMV_TongTheoKhachHang tương ứng với sự thay đổi dữ

liệu trong các bảng gốc. Ví dụ, bẫy sự kiện thêm mới đơn giản cho bảng BANHANG có thể

được xây dựng theo kịch bản sau đây.

134

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

CREATE OR REPLACE TRIGGER TRG_BanHang_AI ON BANHANG

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

AFTER INSERT FOR EACH ROW

DECLARE Gia number(10, 2);

BEGIN

--Đọc giá trị DonGia từ BANGGIA tương ứng với SanPham_ID và ThoiGian_ID vừa

--được thêm mới; Giả sử new.KhachHang_ID đã có trong bảng

TMV_TongTheoKhachHang

SELECT DonGia INTO Gia FROM SH.BANGGIA WHERE

SanPham_ID = :new.SanPham_ID AND ThoiGian_ID =

:new.ThoiGian_ID;

--Cập nhật bản ghi trong bảng TMV_TongTheoKhachHang có KhachHang_ID

tương ứng

UPDATE TMV_TongTheoKhachHang SET Total = Total + :new.SoLuong * :Gia

WHERE KhachHang_ID = :new.KhachHang_ID;

END;

Các bẫy sự kiện này sẽ đảm bảo cho thông tin chứa trong bảng

TMV_TongTheoKhachHang – kết quả thực thi truy vấn Q_TongTheoKhachHang luôn luôn

tương ứng với các thay đổi dữ liệu trong các bảng gốc. Vì thời gian thực thi các bẫy sự kiện

này là rất nhỏ, nên thời gian thực thi việc cập nhật dữ liệu trong các bảng gốc cũng rất nhỏ,

và thường người dùng không nhận thấy sự khác biệt so với khi không có chúng. Trong

trường hợp này, có thể nói “KNT” TMV_TongTheoKhachHang của chúng ta được cập nhật

gia tăng trong chế độ ON COMMIT.

Bước 3. Vì các HQT CSDL này thông thường không có chức năng viết lại truy vấn,

rõ ràng, các cách viết khác nhau của một truy vấn sẽ được HQT CSDL hiểu là các truy vấn

khác nhau. Lập trình viên phải thực hiện công việc viết lại truy vấn. Chỉ những truy vấn nào

được viết lại hướng tới các bảng KNT một cách rõ ràng mới có thể sử dụng KNT. Trong các

chương trình ứng dụng, thay vì sử dụng truy vấn Q_TongTheoKhachHang, chúng ta sử

dụng truy vấn sau đây:

SELECT QuocGia_Vung, KhachHang_ID, Total FROM

TMV_TongTheoKhachHang.

Và truy vấn tính tổng thành tiền theo từng vùng sẽ là:

SELECT QuocGia_Vung, SUM(Total) AS SUM_Total

135

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

FROM TMV_TongTheoKhachHang GROUP BY QuocGia_Vung.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Cũng giống như trường hợp các truy vấn Q_TongTheoKhachHang được thực thi một

khi KNT trên cơ sở truy vấn đó đã được cập nhật, các truy vấn trên bảng

TMV_TongTheoKhachHang sẽ được thực thi trong thời gian xấp xỉ 0ms. Tuy nhiên, trong

trường hợp này thời gian thực thi cập nhật “KNT” nhỏ hơn nhiều, hầu như không đáng kể.

Trên đây tác giả đã chỉ ra, các HQT CSDL Oracle và MS SQL Server không thể thực hiện

cập nhật gia tăng đối với nhiều truy vấn, chẳng hạn trường hợp truy vấn

Q_TongTheoKhachHang. KNT tương ứng được cập nhật hoàn toàn với thời gian cập nhật

KNT xấp xỉ thời gian thực thi lại truy vấn. Cho dù truy vấn có phức tạp bao nhiêu và thực

thi trên các bảng lớn bao nhiêu chăng nữa, với giải pháp sử dụng các bẫy sự kiện, lập trình

viên có thể thực hiện cập nhật gia tăng cho bất kỳ “KNT” nào. Việc cập nhật gia tăng này

chiếm không đáng kể tài nguyên của hệ thống. Cách thức này có thể được áp dụng để khắc

phục hạn chế thời gian cập nhật cao tương đương thời gian thực thi truy vấn khi buộc phải

thực thi cập nhật hoàn toàn trong các HQT CSDL Oracle 11g và MS SQL Server 2005. Tuy

nhiên, khi đó tính năng viết lại truy vấn của chúng sẽ bị mất đi, vì HQT CSDL không biết

rằng, một KNT cho truy vấn đã được tạo ra.

Thêm một kinh nghiệm ứng dụng ý tưởng KNT trong các HQT CSDL chưa hỗ trợ

KNT. Tại một cơ sở đào tạo có gần 20.000 học viên thuộc hơn 40 ngành đào tạo thông qua

các hệ đào tạo khác nhau tại 13 khoa đào tạo trình độ đại học và hai trường cao đẳng trực

thuộc. Học viên học theo nhiều diện khác nhau: Kinh phí nhà nước, tự túc, hợp đồng giữa sơ

sở đào tạo và các tổ chức kinh tế xã hội. Học viên có thể đóng tiền theo nhiều đợt trong

năm. Với HQT CSDL PostgreSql trên một máy chủ tương đối yếu (vi xử lý AMD K6), việc

thực hiện thủ tục tính số học viên, tính tổng số tiền và phần trăm số tiền sinh viên đã đóng

theo từng khoa, ngành và hệ đào tạo chiếm xấp xỉ 13 phút, thậm chí khi chỉ có một phiên

bản của nó xuất hiện trong hệ thống. Thủ tục này thường làm ngưng trệ công việc của các

ứng dụng khác. Sau khi ứng dụng kỹ thuật bẫy sự kiện viết bằng ngôn ngữ C++ để cập nhật

bảng chứa kết quả thực thi thủ tục trên, thay vì phải thực thi thủ tục, các ứng dụng được

hướng đến bảng “KNT”, thời gian truy cập đến bảng được tính với đơn vị ms. Năng suất

làm việc của hệ thống tăng vượt bậc, trong khi người dùng không nhận ra sự khác biệt khi

cập nhật dữ liệu trong các bảng gốc liên quan. Một kịch bản thành công ngoài mong đợi

tương tự cũng xẩy ra với thủ tục tính toán các thống kê liên quan đến thu nhập của hơn

3.000 công nhân viên làm việc tại cơ sở đào tạo đó.

136

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

Như vậy:

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

- Tuy KNT có thể cho phép thực thi các truy vấn phức tạp trên các CSDL với dung

lượng lớn, có thể đến hàng terabytes trong vài giây hoặc phần nhỏ của giây, nhưng nó ít

được biết đến và ít được ứng dụng.

- KNT được hỗ trợ khá mạnh nhưng cũng chỉ giới hạn ở các HQT CSDL thương

mại nổi tiếng như Oracle, MS SQL Server, IBM DB2. Việc cập nhật KNT trong Oracle và

MS SQL Server còn nhiều hạn chế, đặc biệt khả năng cập nhật gia tăng còn yếu trong một

số trường hợp dẫn đến tính kém hiệu quả của kỹ thuật này.

- Ta ứng dụng ý tưởng KNT trong các HQT CSDL chưa hỗ trợ KNT bằng cách sử

dụng các bẫy sự kiện. Thậm chí, cách thức này có thể được áp dụng để khắc phục hạn chế

của các HQT CSDL Oracle và MS SQL Server trong thời gian cập nhật cao tương đương

thời gian thực thi truy vấn. Tuy nhiên, khi đó tính năng viết lại truy vấn của chúng sẽ bị mất

137

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

đi, lập trình viên phải thực hiện chức năng viết lại truy vấn thay cho HQT CSDL.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

138

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

Phần V Kho dữ liệu – DataWarehouse

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

CSDL phân tán Phần VI

Dữ liệu trong các Hệ quản trị CSDL phân tán (HQT CSDLPT) được lưu trữ ở các

nút khác nhau, và mỗi nút thường được điều hành bởi một HQT CSDL có thể vận hành độc

lập không phụ thuộc vào các nút khác. Quan điểm cổ điển của một hệ CSDLPT là hệ thống

cần phải làm cho sự phân tán của dữ liệu là trong suốt đối với người dùng. Nhiệm vụ chính

− đảm bảo tính trong suốt của các DBDistributedDB (HQT CSDL PT − HQT CSDL Phân

Tán) là đảm bảo các công cụ liên kết (integrate) các CSDL cục bộ, phân bố tại các nút khác

nhau của mạng máy tính, như thế nào đó để các người dùng làm việc ở bất kỳ nút nào trong

mạng đều có thể truy cập đến bất kỳ CSDL n ào ở các nút giống như truy cập đến một CSDL

duy nhất.

Và khi đó cần phải đảm bảo:

− Sự đơn giản trong việc sử dụng hệ thống.

− Các khả năng thực hiện các chức năng một cách độc lập khi sự liên kết mạng bị

phá huỷ hoặc vì thực thi các yêu cầu quản trị.

− Cấp độ hiệu quả công việc cao.

Để đạt được các yêu cầu trên cần phải giải quyết hiệu quả các vấn đề sau: phân

tách truy vấn, chọn phương cách tối ưu để thực thi truy vấn, thực thi nhất quán các giao tác,

đảm bảo đồng bộ, phát hiện và giải quyết các bế tắc phân tán, khôi phục trạng thái của

CSDL sau khi xảy ra sự cố các loại khác nhau.

Cụ thể, các tính chất sau đây được xem là cần phải có cho một HQT CSDL PT:

− Tính độc lập của dữ liệu phân tán. Người dùng cần phải được thực hiện các

truy vấn không cần nói các bảng liên quan, hoặc bản sao hoặc là các phân đoạn của các bảng

nằm ở đâu. Và đây cũng là một phần yêu cầu về sự đơn giản trong việc sử dụng hệ thống.

Nguyên tắc này là sự mở rộng của tính độc lập vật lý và luận lý. Ngoài ra, các truy vấn trên

nhiều bảng nằm ở và phân bố (các phân mảnh của nó) tại các nút khác nhau cũng cần phải

được tối ưu hoá một cách hệ thống trên cơ sở đánh giá trị số thu được từ việc tính toán trị

giá liên lạc và mức độ khó khăn trong việc thực hiện truy vấn trên máy cục bộ.

Trong các HQT CSDL PT, ví dụ System R*, sự đảm bảo tính tự quản (autonom?)

rất được chú ý. Mỗi CSDL cục bộ được quản trị không phụ thuộc vào các nút khác. Các nút

có thể tự thêm những người dùng mới cho riêng hệ thống của mình, thay đổi các phiên bản

của hệ thống, v.v. Hệ thống được thiết kế, để trên mỗi nút không nhất thiết phải có các dịch

139

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

vụ trung tâm để đặt tên các đối tượng hoặc phát hiện các bế tắc trong thực thi các giao tác.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Trong mỗi nút khác nhau không cần phải có kiến thức toàn cục về các thao tác đang được

thực hiện tại các nút khác của mạng, và công việc với các dữ liệu có thể truy cập được có

thể vẫn được tiến hành bình thường, không phụ thuộc vào tình trạng của các nút khác và

thậm chí là đường truyền.

− Tính chất A – tính nguyên tử của các giao tác phân tán. Người dùng cần thiết

có thể tạo ra các giao tác để truy cập và cập nhật dữ liệu ở các nút khác nhau giống như là

viết các giao tác hoàn toàn trên một nút cục bộ. Cụ thể, các hiệu ứng của một giao tác xuyên

suốt nhiều nút cũng cần phải có tính nguyên vẹn: hoặc hoàn tất tất cả hoặc không có gì −

nếu giao tác hoàn tất thành công thì tất cả các thay đổi bởi nó được cố định, và ngư ợc lại −

không có dấu tích nào về giao tác trong CSDL nếu nó không hoàn tất thành công.

Mặc dù đa số có thể đồng ý, rằng các tính chất trên là lý tưởng, nhưng trong tình

huống cụ thể, ví dụ các nút được liên kết với nhau bởi một mạng tốc độ chậm ở khoảng cách

lớn, thì các tính chất trên không được giữ đúng mức.

Mức độ hiệu quả cao là một trong những yêu cầu chìa khoá cho các HQT CSDL

PT. Để đạt được hiệu quả cao như thế cần áp dụng hai phương cách, đó là các truy vấn được

biên dịch trước khi thực thi và đảm bảo khả năng di chuyển các quan hệ từ xa về CSDL cục

bộ.

(~~~?)

Chương VI.1 Các loại hình hệ thống phân tán

Các CSDL PT có thể là đồng nhất hoặc không đồng nhất. Trong trường hợp đồng

nhất, các CSDL cục bộ được quản lý bởi một loại HQT CSDL. Trong các hệ thống không

đồng nhất các CSDL cục bộ có thể thuộc nhiều mô hình dữ liệu khác nhau, và vì thế còn

được gọi là hệ thống đa CSDL. Sự liên kết mạng của các CSDL không đồng nhất là cấp

thiết, nhưng cũng là vấn đề rất phức tạp. Có nhiều cách giải quyết trên cấp độ lý thuyết,

nhưng hiện tại vẫn chưa th ể đối phó với vấn đề chính − đó là không đủ hiệu quả trong các

hệ thống liên kết.

Chú ý rằng, thực tế bài toán liên kết các hệ thống không đồng nhất dòng SQL đã

được giải quyết thành công. Hiểu rằng, chúng tương ứng với việc chuẩn hoá ngôn ngữ SQL

ở mức độ cao, và sự tuân theo của các nhà phát triển HQT CSDL theo nguyên tắc hệ thống

mở.

Chìa khoá cho sự thành công trong việc xây dựng một hệ thống không đồng nhất

140

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

là có các chuẩn được chấp nhận rộng rãi cho các giao thức gateway. Giao thức gateway là

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

một giao diện lập trình ứng dụng (API – Application Programming Interface) có thể đưa các

chức năng của HQT CSDL cho các chương trình khác bên ngoài (external). Ví dụ, ODBC

và JDBC. Các sự khác nhau, ví dụ khả năng các máy chủ, định dạng dữ liệu…, được nhận

thấy khi truy cập đến các máy chủ CSDL qua các giao thức gateway.

Gateway không phải là một công cụ đa năng. Nó thêm một lớp xử lý, mà có thể là

rất “đắt đỏ”, và không phải nó chấp nhận tất cả mọi sự khác biệt giữa các máy chủ. Ví dụ,

máy chủ có thể không có khả năng cung cấp các dịch vụ cần thiết cho việc điều hành các

giao tác phân tán, và thậm chí nếu có khả năng, thì các giao thức gateway đang được chuẩn

hoá hoàn toàn theo mức độ tương tác đó cũng chưa được giải quyết thoả đáng như mong

đợi.

Quản trị dữ liệu phân tán đòi hỏi một giá đắt cho hiệu suất, sự hoàn thiện của

phần mềm, và sự khó khăn trong quả trị. Điều đó đặc biệt đúng cho trường hợp các hệ

141

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

không đồng nhất.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Chương VI.2 Các kiến trúc của HQT CSDL PT

Có ba cách khác nhau để phân chia các chức năng giữa các tiến trình (process)

của các HQT CSDL liên quan. Các kiến trúc khác nhau của HQT CSDL PT được gọi là

Client-Server, máy chủ cộng lực (hợp tác, collaborating server) và ứng dụng tầng trung gian

(Middleware).

VI.2.1 Các hệ thống khách-chủ

Một hệ thống khách-chủ có thể có một hoặc nhiều tiến trình khách và một hoặc

nhiều tiến trình chủ, và các tiến trình khách có thể gửi các truy vấn đến bất kỳ tiến trình chủ

nào. Máy khách đáp ứng các yêu cầu về giao diện người dùng, còn máy chủ quản trị dữ liệu

và thực thi các giao tác. Như vậy, một tiến trình máy khách có thể chạy trên một máy cá

nhân và gửi các truy vấn đến tiến trình máy chủ đang chạy trên mainframe.

Kiến trúc này trở nên rất phổ biến vì các lý do sau. Thứ nhất, nó tương đối đơn

giản trong việc triển khai nhờ sự phân chia chức năng rõ ràng và vì máy chủ là trung tâm.

Thứ hai, một máy chủ đắt đỏ vẫn hơn là các máy khách đắt đỏ để tương tác với người dùng.

Thứ ba, người dùng có thể sử dụng các giao diện thân thiện, hơn là các giao diện không thân

thiện trên máy chủ.

Khi viết các ứng dụng khách- chủ, việc ghi nhớ ranh giới giữa chủ và khách, cũng

như giữ liên lạc giữa chúng theo tập hợp (tập hợp có thể) là rất quan trọng.

VI.2.2 Các hệ thống máy chủ hợp tác

Kiến trúc khách-chủ không cho phép một truy vấn riêng lẽ bao trùm đa máy chủ,

vì tiến trình máy khách có thể phải có khả năng chia nhỏ một truy vấn thành các truy vấn

nhỏ hơn riêng lẽ để được thực thi ở các máy chủ khác nhau và sau đó liên kết các kết quả

truy vấn lại với nhau thành một kếu quả thống nhất. Các tiến trình máy khách vì vậy có thể

sẽ hoàn toàn phức tạp, và việc phân biệt giữa chủ và khách trở nên khó khăn. Để giảm thiểu

vấn đề này chúng ta sử dụng một kiến trúc khác, đó là hệ các máy chủ hợp tác. Chúng ta có

thể có một tập hợp các máy chủ CSDL, và mỗi chúng có khả năng thực thi các giao tác trên

dữ liệu cục bộ, và chúng có thể hợp tác để cùng thực thi các giao tác bao trùm đa máy chủ.

Khi một máy chủ nhận một truy vấn đòi hỏi phải truy cập đến dữ liệu nằm trên

142

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

các máy chủ khác, nó sẽ tạo ra các truy vấn con để được thực thi trên các máy chủ đó và kết

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

hợp các kết quả thực thi các truy vấn con với nhau để thu được kết quả thực thi truy vấn

gốc. Một cách lý tưởng, việc phân tích thành các truy vấn con được thực hiện trên cơ sở tối

ưu chi phí, được tính bằng giá trị của việc liên lạc trong mạng và chi phí tính toán cục bộ

trên các máy chủ.

VI.2.3 Các hệ thống tầng trung gian

Kiến trúc phân tầng trung gian được thiết kế để cho phép một truy vấn đơn lẽ có

thể bao trùm đa máy chủ, không cần đòi hỏi tất cả các máy chủ CSDL có khả năng điều

khiển các chiến lược thực thi truy vấn đa máy chủ. Nó thực sự hiệu quả khi liên kết vài hệ

thống cũ mà các khả năng cơ bản của chúng không thể mở rộng.

Một ý tưởng nữa là chỉ cần một máy chủ CSDL có khả năng quản trị các truy vấn

và các giao tác bao trùm đa máy chủ; còn các máy chủ còn lại chỉ cần xử lý các truy vấn và

giao tác cục bộ. Có thể cho rằng, máy chủ đặc biệt đó như là một tầng phần mềm có thể xác

định việc thực thi các truy vấn và các giao tác trên một hoặc nhiều máy chủ CSDL độc lập.

Máy chủ như vậy thường được gọi là phần mềm tầng trung gian (lớp giữa) – middleware.

Phần mềm tầng trung gian có khả năng thực hiện các phép nối và các thao tác quan hệ khác

trên dữ liệu thu được từ các máy chủ khác, nhưng thường thì bản thân nó không hỗ trợ bất

143

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

cứ dữ liệu nào.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Chương VI.3 Lưu trữ dữ liệu trên HQT CSDL PT

Trong HQT CSDL PT, các quan hệ được lưu trữ trên các nút khác nhau. Việc truy

cập đến một quan hệ được lưu trữ trên một nút từ xa gánh chịu các chi phí gửi thông điệp,

và để giảm thiểu chi phí đó, mỗi quan hệ có thể được chia cắt (partitioned) hoặc phân

mảnh(fragmented) xuyên suốt nhiều nút. Và các phân đoạn được lưu trữ tại các nút mà nó

được truy cập thường xuyên, hoặc được nhân bản (replicated) ở mỗi nút, nơi mà quan hệ

cần đến ở mức độ cao.

VI.3.1 Phân mảnh (fragmentation)

Phân mảnh là chia một quan hệ thành các quan hệ nhỏ hơn hoặc các mảnh và lưu

trữ các phân mảnh đó, thay vì chính bản thân quan hệ, có thể là ở các nút khác nhau. Trong

cách phân mảnh ngang (horizontal fragmentation), mỗi phân mảnh là một tập hợp con các

bản ghi của quan hệ gốc. Trong cách phân mảnh dọc (vertical fragmentation), mỗi phân

mảnh là một tập hợp con các thuộc tính của quan hệ gốc. Các cách phân mảnh được minh

hoạ trong hình dưới đây.

Id Họ tên Tuổi Địa chỉ Lương

Phân mảnh ngang

1 Nguyễn Văn A 20 … 1000

2 Trần Thị B 30 … 2000

3 Chu Tấn C 28 … 1500

4 Châu Văn D 27 … 3700

5 Phí Thu E 40 … 2200

Phân mảnh dọc

6 Phạm Phú F 45 … 1200

Hình VI.1 Phân mảnh ngang và phân mảnh dọc

Thường thì các bản ghi thuộc về một phân mảnh theo chiều ngang đã cho được

định danh bởi một truy vấn lựa chọn. Ví dụ, select * from NhânViên where tuổi between 25

144

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

and 30. Cũng như vậy, các bản ghi của một phân mảnh theo chiều dọc đã cho được định

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

danh bởi một truy vấn chiếu (projection query), ví dụ select Id, HọTên, Tuổi from

NhânViên.

Một khi một quan hệ được phân mảnh, cần phải đảm bảo khả năng khôi phục lại

quan hệ gốc từ các phân mảnh thu được:

− Phân mảnh theo chiều ngang: bản kết hợp (union) của các phân mảnh theo

chiều ngang phải bằng quan hệ gốc.

− Phân mảnh theo chiều dọc: Tập hợp các phân mảnh theo chiều dọc phải là kết

quả của một phân tách không mất mát của phép nối.

Để chắc chắn rằng sự phân mảnh theo chiều dọc là một phép nối không mất dữ

liệu, các hệ thống thường gán cho mỗi bản ghi trong quan hệ gốc một từ định danh độc nhất

tid, và gắn từ định danh đó cho từng bản ghi trong mỗi phân mảnh. Nếu cho rằng quan hệ

gốc có một thuộc tính bổ trợ tid như là một khoá, thì thuộc tính đó được thêm vào mỗi phân

mảnh theo chiều dọc. Cũng như là kết quả phân tách đảm bảo là một phép nối không mất dữ

liệu.

Nhìn chung mỗi quan hệ đều có thể phân mảnh theo chiều ngang hoặc dọc, và

mỗi phân mảnh sau đó cũng có thể được phân mảnh như thế.

VI.3.2 Nhân bản (replication)

Nhân bản có nghĩa là lưu trữ nhiều bản sao của một quan hệ hoặc phân mảnh của

quan hệ. Một quan hệ có thể được nhân bản và lưu trữ ở một hoặc nhiều nút. Và như vậy,

một hoặc nhiều phân mảnh của một quan hệ cũng có thể được nhân bản ở một hoặc nhiều

nút. Ví dụ, nếu quan hệ R được phân mảnh thành R1, R2 và R3. Có thể bản sao của R1 và

R2 được nhân bản ở hai nút, còn R3 − ở tất cả các nút.

Động cơ của việc nhân bản là hai mục đích:

− Tăng tính sẵn sàng của dữ liệu: Nếu nút chứa một nhân bản bị sự cố, thì

những dữ liệu như thế có thể tìm được ở những nút khác. Giống như thế, nếu có bản sao cục

bộ của các quan hệ “từ xa”, thì chúng ta không bị rơi vào tính thế nguy hiểm nếu xảy ra sự

cố mạng.

− Thực thi truy vấn nhanh hơn: Các truy vấn có thể được thực thi nhanh hơn

nhiều nếu sử dụng bản sao cục bộ của các quan hệ thay v ì truy cập đến các bản từ các nút từ

145

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

xa.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Có hai dạng của nhân bản, được gọi là nhân bản đồng bộ (synchronous) và không

đồng bộ (asynchronous). Sự khác biệt chính giữa chúng là các bản sao được cập nhật như

thế nào, khi các bản ghi của quan hệ được thay đổi.

Trong nhân bản đồng bộ, khi cập nhật dữ liệu, các giao tác có thể phải tiếp tục

trên cơ sở các hành động thành phần riêng lẽ, không quan tâm đến việc phân mảnh và sao

lưu nhân bản của dữ liệu. Cụ thể, tất cả các bản sao của quan hệ đã được sửa đổi phải được

cập nhật trước khi giao tác sửa đổi dữ liệu hoàn tất. Nghĩa là trước khi giao tác sửa đổi dữ

liệu hoàn tất, nó đồng bộ tất cả các bản sao của các dữ liệu đã được sửa đổi.

Dạng nhân bản khác là nhân bản không đồng bộ được sử dụng rộng rãi trong các

HQT CSDL PT thương mại. Trong cách nhân bản này, các bản sao nhân bản của quan hệ

chỉ được cập nhật một cách tuần hoàn theo một chu kỳ nhất định hoặc khi xảy ra một sự

kiện nào đó, hoặc là theo lệnh của người dùng. Và như vậy, trong những khoảng thời gian

nhất định giữa hai lần cập nhật, một giao tác đọc hai bản sao nhân bản khác nhau của cùng

một dữ liệu có thể thu được các giá trị dữ liệu khác nhau. Vì thế, trong nhân bản không đồng

bộ tính độc lập và nhất quán của dữ liệu phân tán chỉ mang tính thoả hiệp và có thể bị xâm

phạm, nhưng trong triển khai sử dụng thì nó thường cho hiệu quả cao hơn so với cách nhân

bản đồng bộ.

VI.3.2.1 Nhân bản đồng bộ

Có hai kỹ thuật cơ bản để thực thi nhân bản đồng bộ. Kỹ thuật thứ nhất được gọi

là biểu quyết (voting). Giao tác phải cố định những sửa đổi những bản sao chính để sửa đổi

đối tượng và đọc một số lượng đủ lớn các bản sao để chắc chắn một trong các bản sao là

mới nhất. Ví dụ, nếu có 6 bản sao và 4 trong đó đã được ghi, thì khi đọc dữ liệu cần phải

đọc ít nhất 3 (3 đọc + 4 đã cố định > 6 tất cả). Mỗi bản sao có một số của phiên bản, và bản

sao nào có số phiên bản lớn nhất là bản sao được cập nhật sau cùng. Kỹ thuật này không

được ưa chuộng lắm vì thông thường thao tác đọc xảy ra thường xuyên hơn so với thao tác

sửa đổi cùng một đối tượng và thường tốc độ đọc các đối tượng là cực kỳ quan trọng. Trong

kỹ thuật này khi đọc một đối tượng cần phải đọc nhiều bản sao nhân bản của nó nên kỹ

thuật này không hiệu quả lắm.

Kỹ thuật nhân bản đồng bộ thứ hai được gọi là đọc một vài-ghi tất cả (read any

write all), nghĩa là, giao tác chỉ cần đọc một bản sao khi đọc một đối tượng, và khi thay đổi

một đối tượng thì cố định sự thay đổi đó tại tất cả các bản sao. Như vậy thao tác đọc diễn ra

146

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

rất nhanh, đặc biệt là khi có bản sao nhân bản cục bộ. Và so với voting, thao tác sửa đổi đối

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

tượng chậm hơn. Nhưng kỹ thuật này được ưa chuông hơn trong triển khai nhân bản đồng

bộ, bởi vì thông thường thao tác đọc dữ liệu diễn ra thường xuyên hơn nhiều so với sửa đổi.

Rõ ràng nhân bảng đồng bộ đòi hỏi chi phí cao vì quá trình cập nhật các bản sao

phải được diễn ra cùng với việc dữ liệu được sửa đổi, và mỗi quá trình đó phải tuân thủ các

giao thức thực thi các giao tác (xem phần quản trị giao tác và đồng bộ hoá…). Cụ thể trong

trường hợp giao tác sửa đổi dữ liệu, giả sử sử dụng kỹ thuật đọc một – ghi tất cả. Giao tác

cần phải thực hiện việc phong toả tất cả các bản sao nhân bản ở tất cả các nút. Ở mỗi nút

yêu cầu phong toả một đối tượng có thể được chấp nhận ngay nhưng cũng có thể phải chờ

đợi, và cũng có thể xảy ra tình huống phải chờ đợi rất lâu. Và trong khi phải chờ đợi ở một

nút, giao tác đó cần phải giữ tất cả các bản sao nhân bản ở tất cả các nút còn lại trong tình

trạng bị phong toả. Nếu xảy ra sự cố hệ thống ở một nút nào đó hoặc là đường truyền bị

hỏng, hoặc một giao tác nào đó trong số các giao tác thành phần (phụ) bị rollback (ví dụ

được chọn là giao tác hiến sinh của tập hợp các giao tác cục bộ đang được thực thi trên nút

đó, v.v.), thì giao tác sửa đổi dữ liệu đó cũng không thể được hoàn tất thành công, thậm chí

ở thời điểm đó ở tất cả các nút còn lại các giao tác thành phần đã ở trong trạng thái “sẵn

sàng cố định”. Ngoài ra, cho dù giao tác được cố định thành công, nhưng khi tuân thủ các

giao thức cố định giao tác, các chi phí thực thi giao tác khác như chi phí phụ để truyền tải

các thông báo,… cũng cần được tính đến. Và vì thế, nó chỉ được sử dụng trong những

trường hợp đặc biệt nào đó, còn thường thì nhân bản không đồng bộ được sử dụng.

VI.3.2.2 Nhân bản không đồng bộ

Nhân bản không đồng bộ được sử dụng phổ biến hơn, mặc dù chúng cho phép các

bản sao nhân bản khác nhau của cùng một dữ liệu có những giá trị khác nhau trong những

giai đoạn thời gian nào đó. Tình huống này vi phạm nguyên tắc độc lập của dữ liệu phân

tán, và bản thân người dùng phải nhận biết mình đang truy cập bản sao nào, nhận biết những

bản sao nào được cập nhật theo định kỳ, và chấp nhận mức độ nhất quán dữ liệu bị thu nhỏ.

Tuy nhiên, nó cũng được chấp nhận trong nhiều tình huống mà thực tế cho phép và có thể

dàn xếp được.

VI.3.2.2.1 Nhân bản theo nút chính và nhân bản ngang hàng

Sao lưu nhân bản không đồng bộ có thể theo hai cách tuỳ thích.

Cách thứ nhất được gọi là nhân bản không đồng bộ theo nút chính. Một bản sao

147

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

nào đó được thiết kế làm bản sao chính (primary or master copy). Các bản sao nhân bản

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

của quan hệ hiện tại hoặc là các phân mảnh có thể được tạo ra ở nhiều nút khác – đó là

những bản sao phụ. Không giống như bản sao chính, các bản sao phụ không được cập nhật.

Cơ chế chung cho cả bản sao chính và các bản sao phụ đó là, đầu tiên người dùng đăng ký

(register) hoặc quảng bá (publish) một quan hệ tại nút chính, và ngay sau đó miêu tả

(subscribe) đến một phân mảnh của một quan hệ đã được đăng ký từ một nút phụ.

Như vậy, các thay đổi ở bản sao chính được phát tán đến các bản sao phụ.

Thường nó diễn ra theo hai bước, gọi là chụp lại và áp dụng. Các thay đổi được cố định bởi

lệnh COMMIT TRAN[SACTION] (COMMIT WORK) ở bản sao chính và bằng cách nào

đó ở bước chụp lại và sau đó được phát tán đến các bản sao phụ ở bước áp dụng.

Giao tác thực thi các thay đổi ở quan hệ được sao lưu nhân bản chỉ phong toả và

thực hiện các thay đổi đó ở bản sao chính. Và nó thường được cố định trước khi bước áp

dụng được bắt đầu.

Bước chụp lại được triển khai theo một trong hai cách, được gọi là chụp lại trên

cơ sở nhật ký (log-basic capture) và chụp lại theo thủ tục (procedural capture). Log được

duy trì cho mục đích khôi phục dữ liệu được sử dụng để tạo nên các bản ghi phục vụ việc

cập nhật các bản sao phụ. Về căn bản, khi phần đuôi của log được ghi lên phương tiện lưu

trữ lâu dài, thì tất cả các bản ghi liên quan đến các quan hệ được sao lưu nhân bản cũng

được ghi lên một bảng thay đổi dữ liệu (CDT – change data table) riêng lẽ. Vì một giao tác

tạo ra các bản ghi (log) cập nhật vẫn có thể còn đang được thực thi khi các bản ghi đã được

ghi lên CDT ngay sau đó có thể bị rollback. Nên suy ra các bản ghi (log) phải được xoá khỏi

CDT để chỉ chụp lại những luồng sửa đổi do các giao tác đã được cố định. Các luồng đó có

thể được thu lại như là một phần của bước chụp lại, mà cũng có thể là một phần của bước áp

dụng nếu các bản ghi commit-log đã được cho vào CDT. Cụ thể hơn, các luồng sửa đổi đã

được cố định được bắt lấy như là một phần của bước chụp lại, và CDT đó được chuyển cho

bước áp dụng chỉ chứa các bản ghi (log) sửa đổi do các giao tác đã được cố định.

Trong cách chụp lại theo thủ tục, một thủ tục tự động được đưa vào bởi HQT

CSDL hoặc một trình ứng dụng nào đó khởi động quá trình chụp lại, mà cốt lõi của nó

thường là lấy một “ảnh chụp nhanh” (snapshot) của bản sao chính. Ảnh chụp nhanh chỉ

đơn giản là một bản sao của một quan hệ ở một trạng thái nào đó trong một thời điểm nào

đó. Một ví dụ của thủ tục thực hiện việc chụp lại theo thủ tục đó là các bẩy sự kiện (trigger).

Chụp lại trên cơ sở nhật ký có chi phí thấp h ơn so với chụp lại theo thủ tục, vởi vì

148

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

nó được điều khiển bởi những thay đổi dữ liệu, mà các kết quả bị trì hoãn trong một khoảng

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

thời gian ngắn hơn giữa thời điểm bản sao chính được sửa đổi và khi thời điểm mà các thay

đổi đó được phát tán đến các bản sao phụ. Khi phát tán các sửa đổi từ bản sao chính, các

ràng buộc đảm bảo tính nhất quán các liên kết cũng được phát tán cùng. Bất lợi chính của

việc triển khai chụp lại trên cơ sở nhật ký là ở chỗ các chi tiết về cấu trúc của log không

được phổ biến rộng rãi, và đôi khi là những bí mật, và là những đặc trưng hoàn toàn mang

tính hệ thống. Vì vậy, một nhà cung cấp sẽ khó có thể triển khai cơ chế chụp lại trên cơ sở

log để chụp lại các thay đổi dữ liệu được thực thi trên các HQT CSDL của nhà cung cấp

khác.

Bước áp dụng lấy các sửa đổi đã được thu thập từ bước chụp lại có trong CDT

hoặc bản chụp nhanh và phát tán các thay đổi đó đến các bản sao phụ. Điều này có thể diễn

ra liên tục một cách tuần hoàn theo định kỳ hoặc theo các yêu cầu gửi CDT hoặc ảnh chụp

nhanh của các bản sao phụ từ các nút phụ đến bản sao chính ở nút chính. Các yêu cầu đó

được gửi đi bởi trình ứng dụng người dùng hoặc tuần hoàn theo chu kỳ của một timer.

Trong một số hệ thống, các bản sao nhân bản c ó thể không phải là phân mảnh của

một quan hệ, mà là khung nhìn (thực) (kết quả thực thi truy vấn của khung nhìn). Và cơ chế

nhân bản được duy trì như là một khung nhìn ở một nút từ xa theo cách gia tăng, nghĩa là

chỉ tính lại khung nhìn bởi một phần của khung nhìn bị ảnh hưởng bởi các sửa đổi được ghi

lại trong CDT.

Chụp lại trên cơ sở nhật ký cùng với áp dụng một cách liên tục giảm thiểu khoảng

thời gian trì hoãn trong phát tán các thay đổi, và là giải pháp có chi phí thấp nhất để triển

khai sao lưu nhân bản đồng bộ. Chụp lại theo thủ tục và áp dụng theo hướng trình điều

khiển được sử dụng rộng rãi hơn trong các trình ứng dụng kho dữ liệu (data warehouse).

Trong kho dữ liệu sự co giản trong xử lý các dữ liệu gốc và các thay đổi trước khi chúng

đến với các bản sao, và các khả năng làm sạch và lọc các dữ liệu thu được quan trọng hơn là

tính được cập nhật của một bản sao, được cho phép ra bởi sự co giản đó.

Cách sao lưu nhân bản thứ hai là sao lưu nhân bản ngang hàng (peer-to-peer

replication). Nhiều hơn một bản sao, thường thì không phải tất cả, có thể được thiết kế để

có thể trở thành “thay đổi được”, giống như là các bản sao chính. Để phát tán các thay đổi

dữ liệu, một chiến lược tháo gỡ xung đột được sử dụng để đối phó với các sự thay đổi gây

nên xung đột giữa các nút khác nhau. Có những tình huống xung đột đặc biệt không xảy ra

trong nhân bản ngang hàng, và khi đó nhân bản ngang hàng được dùng nhiều nhất. Ví dụ, độ

149

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

tuổi một công nhân có thể được đổi thành 30 ở một nút và 40 ở các nút khác. Vậy độ tuổi

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

nào là đúng? Những xung đột dữ liệu giống như thế thường xảy ra trong nhân bản ngang

hàng, nhưng chúng tương đối dễ được tháo gỡ. Ví dụ:

− Mỗi bản sao chính chỉ được cho phép thay đổi dữ liệu một phân mảnh của một

quan hệ, thường là phân mảnh theo chiều ngang, và bất cứ hai phân mảnh nào thay đổi dữ

liệu được tại các bản sao chính khác nhau đều tách rời nhau (disjoin). Ví dụ, độ tuổi của các

nhân viên đến từ Nhật chỉ được cập nhật tại Hà Nội, và từ Mỹ − TP Hồ Chí Minh, mặc dù

quan hệ đó được lưu trữ cả tại Hà Nội và tp. Hồ Chí Minh.

− Chỉ một nút chính được trao quyền thay đổi dữ liệu trong một thời điểm. Ví dụ,

một nút được thiết kế là bản backup của một nút khác. Các thay đổi ở nút chính được phát

tán đến các nút khác và cập nhật không được cho phép tại các nút đó, kể cả nút backup.

Nhưng nếu xảy ra xự cố ở nút chính, thì nút backup sẽ thay thế và mọi thay đổi cũng chỉ

được cho phép trên nút backup.

VI.3.3 Quản trị danh mục phân tán

Chúng ta cần phải nắm thông tin các quan hệ được phân mảnh và nhân bản như

thế nào. Cụ thể là, ngoài các lược đồ, chứng thực (authentification) và các thông tin thống

kê, cần phải biết các phân mảnh của quan hệ được phân bố xuyên suốt các nút như thế nào

và các bản sao của các phân mảnh được lưu trữ ở đâu.

VI.3.3.1 Đặt tên cho các đối tượng

Nếu một quan hệ được phân mảnh và nhân bản, cần phải đảm bảo khả năng nhận

diện “một cách độc nhất” (uniquely) mỗi bản sao của mỗi phân mảnh. Việc tạo ra những t ên

độc nhất như vậy cũng đòi hỏi một sự quan tâm nhất định. Nếu chúng ta d ùng một “tên máy

chủ toàn cục” (global name-server) để quy cho các tên toàn cục (global) độc nhất, thì tính tự

quản cục bộ (autonomy) được dàn xếp ổn thoả; chúng ta muốn (người dùng ở) mỗi nút có

khả năng quy các tên cho các đối tượng cục bộ không cần liên kết đến các tên hệ thống trên

diện rộng.

Cách giải quyết thông thường cho vấn đề đặt tên là dùng các tên bao hàm nhiều

thuộc tính (trường). Ví dụ, chúng ta có thể có:

− Tên của một trường có tên cục bộ được gán cục bộ tại nút mà quan hệ được tạo

ra. Hai đối tượng ở các nút khác nhau có thể có chung một tên cục bộ, nhưng hai đối tượng

150

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

ở cùng một nút đã cho không thể có cùng một tên cục bộ.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

− Một trường của nút “gốc” (birth site field) định danh nút, nơi mà quan hệ được

tạo ra, và nơi chứa tất cả các thông tin về tất cả các phân mảnh cà các bản sao của quan hệ

đó.

Hai trường đó định danh một quan hệ một cách độc nhất. Sự kết hợp đó được gọi

là tên toàn cục của quan hệ. Để định danh một bản sao của một quan hệ hoặc một phân

mảnh của quan hệ, chúng ta lấy tên toàn cục của quan hệ và thêm vào một trường từ định

danh của bản sao repl-id, và gọi đó là tên toàn cục của bản sao.

VI.3.3.2 Cấu trúc danh mục phân tán

Các danh mục hệ thống trung tâm có thể được dùng, nhưng nó có thể bị nguy

hiểm bởi nút chứa danh mục đó. Một cách khác đó là duy trì một bản sao của danh mục hệ

thống toàn cục. Danh mục đó có thể miêu tả tất cả dữ liệu ở tất cả các nút. Mặc dù cách này

không bị nguy hiểm bởi sự cố trên một nút riêng lẽ, nó đảm bảo tính tự lập của nút, nhưng

cũng giống như các giải quyết đầu tiên, bởi vì mỗi sự thay đổi trong danh mục cục bộ cần

phải ngay lập tức được truyền tải sang tất cả các nút.

Một trong những dự án HQT CSDL PT thành công của IBM đó là System R*.

Khái niệm danh mục phân tán trong System R* dựa trên cơ sở sự có mặt của một tên hệ

thống độc nhất của mỗi đối tượng của CSDL. Một sự thoả thuận sau đây được chấp nhận:

thông tin về sự phân bố của bất kỳ đối tượng nào của CSDL, ví dụ như từ chỉ danh nút hiện

tại mà đối tượng được đặt trên đó, được lưu trữ trong danh mục cục bộ của nút đó, nơi mà

đối tượng được đặt lên ngay sau khi nó đư ợc tạo ra (nút sinh − birth site).

Suy ra, để thu được thông tin đầy đủ về một quan hệ, trong trường hợp chung cần

phải sử dụng danh mục cục bộ của nút nơi xảy ra quá trình biên dịch, và sau đó truy cập từ

xa đến danh mục của nút sinh của quan hệ hiện tại, và cuối cùng, sử dụng danh mục của nút

hiện tại. Như vậy, để có được thông tin chính xác về bất cứ quan hệ nào của CSDL PT cũng

đều có thể cần đến nhiều nhất hai truy cập từ xa đến các quan hệ-danh mục.

Thủ tục này cũng có thể được tối ưu hoá. Các bản sao của các phần tử danh mục

của các nút khác có thể được lưu trữ trong danh mục cục bộ, như là một dạng cache. Tính

nhất quán của các phần tử danh mục không được đảm bảo (hỗ trợ). Thông tin đó được sử

dụng ở giai đoạn đầu tiên của quá trình biên dịch một truy vấn. Và sau đó, ở giai đoạn thứ

hai, nếu thông tin liên quan đến một đối tượng nào đó được xác định là không chính xác, thì

nó sẽ được điều chỉnh cho chính xác trên cơ sở danh mục cục bộ của nút mà hiện tại đối

151

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

tượng đó đang được lưu trữ. Việc phát hiện sự không chính xác của bản sao phần tử danh

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

mục được thực hiện nhờ vào sự có mặt số của phiên bản ở mỗi phần tử danh mục. Nếu sức ì

(sự chậm trễ) của thông tin hệ thống đủ lớn thì sự tối ưu hoá đó sẽ có ý nghĩa khá cao.

Mỗi một nút duy trì một danh mục cục bộ. Danh mục cục bộ đó mô tả tất cả các

bản sao của dữ liệu được lưu trữ trên nút đó. Bổ sung thêm, danh mục trên nút sinh của quan

hệ chịu trách nhiệm về thông tin nơi lưu trữ các quan hệ, hoặc là các phân mảnh của quan

hệ. Cụ thể, thông tin mô tả chính xác hơn của nội dung mỗi bản sao nhân bản là một danh

sách các cột cho trường hợp phân mảnh theo chiều dọc và điều kiện select cho trường hợp

phân mảnh theo chiều ngang, được lưu trữ ở danh mục trên nút sinh. Một khi một bản sao

nhân bản được tạo ra, hoặc được chuyển xuyên suốt các nút, thì thông tin trên nút sinh cần

phải được cập nhật. Và như vậy, các bản sao nhân bản của danh mục của các nút cũng phải

được cập nhật.

VI.3.4 Tính độc lập của dữ liệu phân tán

Tính độc lập của dữ liệu phân tán được hiểu là người dùng có khả năng tạo ra các

truy vấn, không cần biết các quan hệ được phân mảnh hoặc nhân bản như thế nào. HQT

CSDL có trách nhiệm tính toán các quan hệ như cần thiết, bằng cách xác định các bản sao

hợp lý của các phân mảnh, nối (join) các phân mảnh theo chiều dọc, và hợp nhất (union) các

phân mảnh theo chiều ngang.

Cụ thể tính chất này ngụ ý rằng, khi viết các truy vấn người dùng không cần phải

chỉ chính xác tên đầy đủ của các đối tượng dữ liệu được truy cập. Chúng ta hãy xem người

dùng có thể truy cập đến các quan hệ như thế nào khi thiếu thông tin các quan hệ đã được

phân tán như thế nào. Tên cục bộ của một quan hệ trong danh mục hệ thống thực tế là một

sự kết hợp của tên người dùng và tên của quan hệ do người dùng định nghĩa. Người dùng có

thể đặt tên cho các quan hệ của họ, không cần quan tâm đến các quan hệ được tạo bởi các

người dùng khác. Khi người dùng viết một chương trình hoặc một câu lệnh SQL có sử dụng

các quan hệ, họ chỉ cần đơn giản dùng các tên của các quan hệ. HQT CSDL PT sẽ tự động

thêm tên người dùng vào tên quan hệ để thu được tên cục bộ, và sau đó thêm từ định danh

của nút site-id của người dùng (mặc định là nút sinh), để thu được tên toàn cục của quan hệ.

Bằng cách tìm kiếm tên toàn cục của quan hệ trong danh mục cục bộ, nếu như có bản sao

nhân bản ở đó, hoặc là danh mục trên nút sinh, HQT CSDL có thể xác định các bản sao

nhân bản của một quan hệ.

Người dùng có thể tạo ra các đối tượng ở nhiều nút khác nhau và có thể liên kết

152

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

đến các quan hệ được tạo ta bởi các người dùng khác theo ý muốn. Để làm điều đó, người

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

dùng có thể sử dụng các lệnh dạng SQL để tạo ra các từ đồng nghĩa (synonym) cho các tên

toàn cục của quan hệ, rồi sau đó có thể liên kết (hoặc truy cập) đến các quan hệ bằng

synonym. HQT CSDL sẽ duy trì một bảng các synonym giống như là một phần của danh

mục tại mỗi nút cho mỗi người dùng đã ghi tên ở nút đó, và dùng bảng đó để xác định tên

toàn cục của quan hệ. Chú ý rằng, các ứng dụng người dùng có thể làm việc không có thay

đổi gì khi các bản sao nhân bản của quan hệ bị huỷ bỏ, bởi vì tên toàn cục của quan hệ vẫn

còn tồn tại mãi mãi trong hệ thống cho đến khi chính bản thân quan hệ đó bị xoá đi.

Người dùng có thể thực thi các truy vấn trên các bản sao nhân bản, đặc biệt nếu

các bản sao đó được cập nhật theo phương pháp đồng bộ. Và như vậy, cơ chế synonym có

thể được thích nghi để cho phép người dùng tạo ra các synonym cho các tên toàn cục của

153

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

các bản sao nhân bản.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Chương VI.4 Xử lý các truy vấn phân tán

Để thấu hiểu các vấn đề được bàn luận trong phần này cần phải biết các kiết thức

về đại số quan hệ. Ở đây chúng ta chỉ tóm lược những ý chung nhất về quá trình phức tạp

này. Các kiến thức đầy đủ hơn có thể tham khảo ở [HQT CSDL, 2000; ….].

VI.4.1 Các thuật toán nối join

VI.4.1.1 Các truy vấn nonjoin

Thậm chí các thao tác đơn giản như quét các quan hệ, phép chọn, và phép chiếu

cũng bị tác động bởi việc phân mảnh và nhân bản.

Ví dụ, nếu một bảng nào đó được phân mảnh theo chiều ngang và hai phân mảnh

được lưu trữ tại hai nút khác nhau cách xa nhau. Tuỳ thuộc v ào điều kiện select của truy vấn

và các thuộc tính cũng như các công thức có thể (avg, sum và phức tạp hơn nữa) trong phần

select, để trả lời một truy vấn, nếu chỉ cần dữ liệu từ một phân mảnh th ì HQT CSDL sẽ thực

thi truy vấn trên nút chứa phân mảnh đó. Nếu cần dữ liệu từ nút còn lại thì phức tạp hơn: −

Nếu trong phần select chỉ đơn giản là một thuộc tính (phép chiếu projection) hoặc tương tự,

thì có thể thực hiện một truy vấn ở nút còn lại và sau đó union kết quả của hai truy vấn; −

Nếu đó là một hàm hoặc một công thức, ví dụ tính giá trị trung bình, thì thường là cần thực

thi truy vấn duy nhất trên một quan hệ là cả kết quả của phép kết hợp (union) hai phân mảnh

của quan hệ gốc. Trong trường hợp thứ hai, tinh vi hơn, câu truy vấn và điều kiện dùng để

phân mảnh quan hệ có thể được phân tích, để có thể thực thi hai phần truy vấn trên hai phân

mảnh, và một phần trên những dữ liệu từ hai phân mảnh không tham gia vào hai phần trước

của truy vấn.

Nếu giả sử quan hệ được phân mảnh theo chiều dọc bằng phép phân tách không

mất dữ liệu và các phân mảnh được lưu trữ trên các nút khác nhau. Chỉ cần một truy vấn

đơn giản nhất là phép chiếu mà trong phần select có chứa các thuộc tính của bảng gốc, mà

không phân mảnh nào trong các phân mảnh chứa đủ các thuộc tính đó, thì HQT CSDL cũng

cần phải thực hiện phép nối hai phân mảnh để thu được một quan hệ và thực thi truy vấn

trên đó.

Ngoài ra, tuỳ thuộc vào khả năng xử lý của các nút, các thuộc tính đ ã được cài đặt

154

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

và các chức năng của các HQT CSDL và CSDL cục bộ mà chi phí của việc xử lý cục bộ có

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

thể khác nhau giữa các nút, cũng như các chi phí và độ tin cậy truyền tải thông tin qua mạng

khác nhau. Và như vậy, cần phải chọn cách thực thi cho chi phí thấp nhất.

VI.4.1.2 Thực thi phép nối trên HQT CSDL PT

Phép nối trong HQT CSDL PT giữa các nút khát nhau có thể rất đắt đỏ. Chúng ta

sẽ xem xét các phương án thực thi phép nối được sử dụng.

VI.4.1.2.1 Rút ra những gì cần thiết

HQT CSDL có thể thực hiệt phép nối lồng-lặp (nested loops join) theo trang. Và

với mỗi mỗi một trang của phân mảnh thứ nhất từ nút thứ nhất HQT CSDL rút (fetch) tất cả

các trang của phân mảnh thứ hai từ nút thứ hai, và thực thi phép nối ở nút thứ nhất. Nếu chỉ

cần rút các trang của phân mảnh thứ hai một lần và lưu trữ tạm thời trên nút thứ nhất thì tình

hình khả quan hơn. Thậm chí bằng một cách khác, HQT CSDL có thể dùng phép nối lồng-

lặp theo các chỉ mục. Khi đó trị giá thực thi phép nối thấp hơn. Nhưng cả hai thuật toán thực

hiện phép nối bằng cách rút từ xa các bản ghi cần thiết từ các nút khác khi cần thiết vẫn

không phải là một ý tưởng tốt, bởi vì chi phi cho việc truyền tải thông tin qua mạng chiếm

phần chủ yếu trong tổng chi phí, kể cả trong trường hợp mạng tốc độ cao.

VI.4.1.2.2 Chuyển đến một nút

Cũng có thể chuyển một hoặc nhiều phân mảnh từ một hoặc nhiều nút đến một

nút còn lại, hoặc chuyển tất cả các phân mảnh đến nút mà ở đó truy vấn được đưa ra. Rồi

sau đó thực thi phép nối ở nút đó bằng phép nối sort-merge (xem phần 12.10?). Tổng chi phí

có giảm đi, nhưng dù sao phép nối sort-merge cũng chỉ tối ưu trong trường hợp cả hai quan

hệ cùng nằm trên một nút.

VI.4.1.2.3 Semijoins và Bloomjoins

Khi phân tích phương pháp vừa rồi ta thấy rằng, có khả năng có rất nhiều bản ghi

trong (phiên bản instance hiện tại của) quan hệ được truyền đến nút khác không nối với

nhiều bản ghi trong (phiên bản instance hiện tại của) quan hệ ở nút mà phép nối được thực

thi. Nếu bằng cách nào đó chúng ta xác định được những bản ghi chắc chắn không tham gia

vào quá trình nối, thì chúng ta không cần phải truyền tải các bản ghi đó qua mạng cũng như

thực hiện các phép nối với chúng. Hai kỹ thuật được đưa ra để giảm thiểu số bản ghi cần

truyền tải qua mạng và giảm thiểu công việc trong phép nối, đó là Semijoin và Bloomjoin.

155

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

Ý tưởng của Semijoin có thể được gói gọn trong ba bước:

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

1. Ở nút thứ nhất thực hiện phép chiếu để thu được các cột nối (join columns), và

truyền kết quả đó, tạm gọi là kết qủa phép chiếu, đến nút thứ hai.

2. Ở nút thứ hai, phép nối giữa kết qủa phép chiếu thu được từ nút thứ nhất và các

bảng cục bộ. Kết quả của phép chiếu này được gọi là bản thu nhỏ bảng cục bộ của nút thứ

hai trong sự liên quan đến bảng từ nút thứ nhất. Rõ ràng chỉ có những bản ghi từ nút thứ hai

có trong bản thu nhỏ cục bộ tham gia vào phép nối với các bảng ở nút thứ nhất. Bởi vậy,

truyền bản thu nhỏ đến nút thứ nhất có thể có lợi hơn rất nhiều so với chuyển tất cả các bảng

nguyên vẹn.

3. Ở nút thứ nhất, thực hiện phép nối bản thu nhỏ với các bảng cục bộ.

Dễ nhận thấy rằng, tổng chi phí để thực thi phép nối phân tán giảm xuống nhờ

giảm bớt việc truyền tải qua mạng những bản ghi thực tế không tham gia vào quá trình nối

cũng như giảm thiểu công việc nối các bảng.

Kỹ thuật thứ hai được gọi là Bloomjoin, cũng tương tự Semijoin, nhưng thay vì

gửi kết quả phép chiếu đến nút thứ hai, một bit-vector được gửi đi ở bước thứ nhất. Một bit-

vector kích thước k, tự chọn nào đó, được tính bằng cách băm (hashing) mỗi bản ghi của

bảng ở nút thứ nhất về khoảng từ 0 đến k-1, và gán giá trị của bit i bằng 1 nếu có bản ghi

nào đó hash to i, và 0 nếu không có. Ở bước thứ hai, bản thu nhỏ của bảng cục bộ được tính

cũng được tính bằng cách dùng chính hàm băm đã được sử dụng ở bước thứ nhất băm mỗi

bản ghi (dùng các trường nối như từ bảng ở nút thứ nhất) về khoảng từ 0 đến k-1, và từ chối

những bản ghi mà giá trị băm i bằng 0. Bởi vì nếu bản ghi của bảng ở nút thứ nhất không

hash to i, thì nó cũng không thể nối với bất cứ bản ghi nào trong bảng ở nút thứ hai.

Trong kỹ thuật này, chi phí truyền tải thông tin qua mạng giảm đi, vì truyền tải

một bit-vector thì chi phi ít hơn truyền tải một kết quả phép chiếu. Nhưng mặt khác, kích

thước của bản thu nhỏ ở bước thứ hai có vẻ lớn hơn, và chi phí cho việc truyền tải nó qua

mạng và thực thi phép nối với bảng ở nút thứ nhất thường lớn hơn so với kỹ thuật Semijoin.

Phương pháp Bloomjoin thường được chọn trong quá trình thực thi các phép nối phân tán,

bởi vì so với SemiJoin, nó đòi hỏi chi phí vào ra (input/output) nhỏ hơn nhiều vì ít nhất nó

tạo ra ít bảng tạm thời hơn. Cũng đã có một số đề nghị cải tiến bằng cách lai ghép hai kỹ

thuật SemiJoin và BloomJoin, cho kết quả là một kỹ thuật hiệu quả hơn hai kỹ thuật trên

156

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

[15,16,…].

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

VI.4.2 Biên dịch phân tán các truy vấn

Một trong hai phương án nâng cao hiệu quả HQT CSDL PT đó là bất cứ một truy

vấn nào cũng được biên dịch trước khi được thực thi thực thụ. Trong trường hợp System R*

cũng vậy, việc biên dịch các truy vấn có thể được diễn ra ở giai đoạn precompiler các trình

ứng dụng được viết trên các ngôn ngữ lập trình, như assembler v.v., bao gồm cả các câu

lệnh SQL, hoặc là trong quá trình thực thi các giao tác khi thực thi câu lệnh PREPARE. Một

chương trình ở dạng mã máy được tạo ra cho mỗi câu lệnh SQL. Và việc gọi chương trình

đó được đưa vào mã nguồn của trình ứng dụng.

Tuy nhiên, trên thực tế việc quá trình biên dịch một truy vấn phức tạp hơn nhiều,

bởi vì các tương tác mạng phức tạp được được đòi hỏi trong quá trình thực thi một giao tác.

Biên dịch phân tán các truy vấn bao gồm tập hợp lớn các mánh khoé và sự tinh vi về mặt kỹ

thuật. Nhưng chúng ta chỉ xem xét sơ đồ chung của quá trình đó.

Để phục vụ việc đó chúng ta gọi nút bắt đầu quá trình biên dịch phân tán truy vấn

là nút chính, và các nút phụ là những nút còn lại tham gia vào quá trình biên dịch. Ở một

cấp độ “đại khái” quá trình biên dịch có thể phân chia thành các pha sau đây:

1. Ở nút chính diễn ra quá trình phân tích câu lệnh SQL cùng với việc xây dựng

biểu diễn bên trong của truy vấn ở dạng cây. Trên cơ sở thông tin từ danh mục cục bộ của

nút chính và các danh mục từ xa của các nút phụ, tên của các đối tượng có trong truy vấn

được thay bằng các từ chỉ danh hệ thống của chúng.

2. Ở nút chính một kế hoạch thực thi truy vấn toàn cục được tạo ra. Kế hoạch này

chỉ chứa thứ tự tương tác của các nút trong quá trình thực thi truy vấn trên thực tế. Kỹ thuật

tối ưu hoá mở rộng được sử dụng để tạo ra kế hoạch toàn cục đó. Kế hoạch toàn cục được

biểu thị ở dạng cây truy vấn đã được biến đổi tương ứng.

3. Nếu như các nút phụ tham gia vào kế hoạch toàn cục thực thi truy vấn, thì kế

hoạch đó được phân tách ra các phần nhỏ. Mỗi phần nhỏ có thể được thực thi trên một nút.

Ví dụ, lọc cục một một quan hệ trương ứng với điều kiện select đã cho. Các phần của truy

vấn ở dạng biểu diễn bên trong được phân phát cho các nút phụ tương ứng.

4. Giai đoạn kết thúc quá trình biên dịch diễn ra ở mỗi nút tham gia vào kế hoạch

thực thi toàn cục của truy vấn. Giai đoạn này bao gồm hai pha cuối cùng của quá trình biên

dịch truy vấn, đó là tối ưu hoá và tạo mã máy. Ở mỗi nút diễn ra quá trình chọn kế hoạch

cục bộ tối ưu để thực thi một phần của truy vấn ở dạng biểu diễn bên trong đã nhận được.

157

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

Sau đó diễn ra các quá trình kiểm tra quyền thực thi các hành động tương ứng của người

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

dùng, mà trên tư cách của người đó đã diễn ra quá trình biên dịch; quá trình xử lý các khung

nhìn của CSDL, trong đó có những xử lý tinh vi liên quan đến khả năng trong các khung

nhìn có liên kết đến các quan hệ đã bị xoá đi (và như vậy, tạm thời chúng ta xem rằng, trong

các truy vấn chỉ có các bảng gốc được sử dụng); thực thi quá trình tối ưu hoá cục bộ các

phần nhỏ của truy vấn được xử lý trong sự tương ứng với các chỉ mục hiện có và tạo ra các

mô-đun truy cập; và cuối cùng, diễn ra quá trình tạo mã máy.

Trong trường hợp chung, mỗi truy vấn có thể có các thao tác khác nhau, ví dụ như

phép chọn, phép chiếu, các phép toán tổng hợp (aggregation), và phép nối. Và việc tối ưu

hoá các truy vấn trong CSDL PT được đặt trước các thử thách sau đây:

− Phải tính đến chi phí thông tin liên lạc. Nếu có vài bản sao nhân bản của một

bảng hoặc phân mảnh nào đó ở các nút khác nhau, thì cần xác định bản sao nào sẽ được sử

dụng.

− Nếu các nút khác nhau dùng các HQT CSDL khác nhau, thì tính tự quản của

mỗi nút cần phải được tôn trọng khi tạo ra kế hoạch thực thi toàn cục của truy vấn (global

query planning).

Quá trình tối ưu hoá truy vấn, cùng với việc sử dụng thông tin về các quan hệ tại

các nút từ xa thu được từ danh mục hệ thống, về bản chất giống như trên các HQT CSDL

tập trung. Dù vậy, có nhiều hơn phương pháp khác nhau để thực thi mỗi thao tác, và cần

phải tính đến chi phí truyền tải thông tin qua mạng. Nếu chúng ta lấy thước đo chi phí là chi

phí tổng thể cho tất cả các thao tác, quá trình lập kế hoạch thực thi trong tổng thể vẫn không

đổi.

Trong kế hoạch toàn cục, các thao tác cục bộ với các quan hệ tại nút mà nó đang

được lưu trữ được đóng gói (gói gọn, tích tụ, encapsulated) vào kế hoạch cục bộ được đề

nghị (suggested local plan). Kế hoạch toàn cục bao gồm nhiều kế hoạch cục bộ như vậy,

giống như là các truy vấn con được thực thi tại các nút khác nhau. Khi tạo ra kế hoạch toàn

cục, các kế hoạch cục bộ được đề nghị cung cấp các chi phí ước lượng thực tế cho việc tính

toán các quan hệ trung gian; các kế hoạch cục bộ được đề nghị được kiến trúc bởi “máy tối

ưu hoá” chính để cung cấp các chi phí ước lượng cục bộ đó. Mỗi nút có thể bỏ qua kế hoạch

cục bộ được đề nghị cho nó, nếu nó có thể tìm ra một kế hoạch với chi phí thấp hơn bằng

cách sử dụng các thông tin mới hơn trong các danh mục cục bộ. Vì vậy, tính tự chủ của các

158

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

nút được lưu giữ trong quá trình tối ưu hoá và thực thi các truy vấn phân tán.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Chương VI.5 Quản trị các giao tác và quá trình đồng bộ hoá

Tất nhiên, quá trình thực thi các giao tác trong các HQT CSDL PT là phân tán.

Các giao tác được bắt đầu ở nút chính khi truy cập đến một phần (session) của mô-đun truy

cập bằng cách gọi một chương trình con nào đó. Nút này được gọi là nút chính. Ngoài mã

chương trình cục bộ của mình, các chương trình con đó còn có thể gọi từ xa các thành phần

của các mô-đun truy cập khác thông qua giao thức gọi hàm từ xa (RPC). Như vậy, vấn đề

nảy sinh là làm thế nào để đảm bảo tính nhất quán của quá trình kết thúc một giao tác phân

tán, để kết quả thực thi của nó ở tất cả các nút mà nó đã đụng chạm đến hoặc là được cố

định trong các CSDL cục bộ, hoặc là hoàn toàn không có.

Để đạt được mục đích đó trong các HQT CSDL PT thường sử dụng giao thức cố

định giao tác phân tán hai pha (two-phases commit protocol).

VI.5.1 Giao thức cố định hai pha (2PC – Two-Phases Commit Protocol)

Giao thức này chia quá trình cố định giao tác phân tán thành hai pha: Pha biểu

quyết (votting) và pha quyết định (decision). Để miêu tả giao thức này chúng ta sử dụng mô

hình sau. Giao tác-điều phối viên điều khiển tất cả các giao tác-thành viên độc lập của giao

tác phân tán. Giao tác điều phối viên thường là giao tác được bắt đầu trên nút chính. Các

giao tác liên quan trên các nút còn lại là những giao tác thành viên (cấp dưới?). Quyết định

về việc kết thúc một giao tác phân tán được đưa ra bởi điều phối viên. Sau đó pha đầu tiên

của quá trình kết thúc giao tác phân tán được thực thi, khi mà điều phối viên gửi cho mỗi

một thành viên thông báo “chuẩn bị cố định”. Khi nhận được thông báo này, mỗi thành viên

ghi một bản ghi (log) “chuẩn bị” và chuyển vào trạng thái sẵn sàng cho việc cố định không

chậm trễ. Cũng giống như vậy cho trường hợp rollback, tương ứng bản ghi (log) là rollback.

Sau đó mỗi thành viên thực thi thành công các bước cần thiết để cố định giao tác cục bộ, và

gửi cho điều phối viên một thông báo “sẵn sàng cố định”. Nếu điều phối viên nhận được

thông báo đó từ tất cả các thành viên, thì nó sẽ chuyển sang pha thứ hai của giao thức bằng

cách ghi một bản ghi (log) “cố định” và gửi cho tất cả các thành viên thông báo “cố định

giao tác”. Và giao tác phân tán được cố định. Nếu không phải tất cả các thành viên thực hiện

thành công pha thứ nhất, thì điều phối viên gửi cho tất cả các thành viên thông báo “rollback

giao tác”, và khi đó hiệu ứng của các thao tác của giao tác phân tán lên trạng thái của CSDL

không còn nữa. Khi tất cả các nút thành viên nhận được lệnh “cố định” hoặc là “rollback”,

chúng sẽ ghi một bản ghi (log) tương ứng − cố định hoặc rollback, gửi cho điều phối viên

159

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

thông điệp “nhận biết” (ack - acknowledgement) và cố định hoặc rollback giao tác cục bộ.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Khi nhận được thông điệp “nhận biết” từ tất cả các nút thành viên, điều phối viên sẽ ghi một

bản ghi (log) “kết thúc” cho giao tác.

Giao thức 2PC có thể được minh hoạ như trên hình vẽ VI.2. Ngoài ra, còn có các

phiên bản của giao thức cố định hai pha như Auxilary-based integration [Tal and Alonso,

94], Presumed Any (PrAny) [Al-Houmaily,Chrysanthis, 96],…, và các giao thức được phát

triển theo hướng tăng năng suất trong điều kiện thực thi bình thường: Linear 2PC (L2PC),

Decentralized 2PC (D2PC), Implicit Yes-Vote (IYV) [Al-Houmaily,Chrysanthis97],

Presumed Abort (PrA), Presumed Commit (PrC), IBM Presumed Commit (IBM-PrC), và

theo hướng giảm thiểu phong toả sau sự cố: Three-Phase Commit (3PC), Four-Phase

Commit (4PC). Giao thức 2PC cũng có các phiên bản tối ưu hoá như Read-Only,

Traditional (TRO), Unsolicited Update-Vote (UUV), Last Agent, Group Commit, Lazy

Commit.

160

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

Hình VI.2 Giao thức cố định hai pha - Two-Phases Commit Protocol

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Hình VI.3 Các phiên bản của giao thức 2PC

VI.5.2 Các phương pháp quản trị

Tính nhất quán của trạng thái CSDL khi thực thi song song nhiều giao tác phân

tán cũng được đảm bảo trên cơ sở phong toả (chiếm lĩnh) đồng bộ các đối tượng CSDL

cùng với việc tuân thủ theo giao thức phong toả hai pha (Two -Phases Lock Protocol − 2PL).

Quản trị các phong toả có thể được phân tán bao trùm tất cả các nút theo nhiều cách khác

nhau:

− Tập trung (Centralized). Một nút đơn lẽ chịu trách nhiệm phong toả và dỡ bỏ

phong toả cho tất cả các đối tượng. Cách này có thể bị đe doạ bởi các sự cố xảy ra tại nút

chứa trình điều khiển phong toả.

− Bản sao chính (Primary copy). Một bản sao của mỗi đối tượng được thiết kế là

bản sao chính. Tất cả các yêu cầu phong toả và giải phóng đối tượng đó được xử lý bởi trình

quản trị các phong toả ở nút mà bản sao chính được lưu trữ, không quan trọng bản sao của

chính bản thân nó được lưu trữ ở đâu (?). Cách này loại bỏ nguy cơ trên, nhưng nhìn chung,

để đọc một đối tượng thì cần phải kết nối với hai nút: nút chứa bản sao chính và nút chứa

bản sao được đọc.

− Phân tán hoàn toàn (Fully distributed). Các yêu cầu phong toả và giải phóng

một bản sao được lưu trữ ở một nút được điều khiển bởi trình quản trị phong toả tại mỗi nút

mà bản sao đang được lưu trữ. Cách này loại bỏ được tất cả các vấn đề trên. Nhưng khi ghi

các thay đổi, phong toả phải được thiết đặt tại tất cả các nút chứa các bản sao được sửa đổi,

161

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

trong khi chỉ cần thiết đặt phong toả ở một nút duy nhất ở hai cách trên.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

VI.5.3 Các bế tắc phân tán

Vấn đề chính là các khả năng bế tắc phân tán có thể xuất hiện giữa các giao tác

phân tán được thực thi song song, và làm thế nào để phát hiện các bế tắc khi quản trị các

phong toả theo cách bản sao chính hoặc là phân tán hoàn toàn. Bế tắc giữa các giao tác

thành viên của một giao tác phân tán không bao giờ xảy ra, bởi vì tất cả các giao tác thành

viên đều có một từ chỉ danh chung của giao tác phân tán và không xung đột với nhau. Có

bốn thuật toán xác định các bế tắc phân tán.

Mỗi một nút duy trì một đồ thị chờ (wait-for graph), và một vòng lặp trong một

đồ thị chờ biểu thị một bế tắc. Mặc dù vậy, có thể tồn tại một bế tắc thậm chí khi đồ thị

không chứa vòng lặp nào.

Thuật toán thứ nhất là tập trung hoá. Bao hàm việc gửi tất cả các đồ thị chờ cục

bộ đến nút chịu trách nhiệm phát hiện các bế tắc toàn cục. Ở nút đó, một đồ thị chờ toàn cục

được tạo ra bằng cách kết hợp tất cả các đồ thị cục bộ.

Thuật toán thứ hai có tính thứ bậc. Các nút được nhóm lại theo thứ bậc. Ví dụ, các

nút có thể được nhóm theo tỉnh thành, sau đó theo nước, theo châu lục và cuối cùng là một

nhóm toàn cục bao quát tất cả các nút. Mỗi nút ở cấp độ thấp nhất kiến thiết một đồ thị chờ

và có thể phát hiện các bết tắt ở trên nút đó. Sau đó, các nút gửi các đồ thị chờ cục bộ đến

nút chịu trách nhiệm phát hiện các bết tắc ở cấp độ đó. Nút đó dò tìm và tháo gỡ các bế tắc ở

cấp độ của mình, sau đó lại gửi đồ thị chờ cấp độ mình lên nút chịu trách nhiệm ở cấp độ

cao hơn. Quá trình lặp lại cho đến khi tạo được đồ thị toàn cục. Nút “toàn cục” chịu trách

nhiệm dò tìm và tháo gỡ các bế tắc toàn cục.

Thuật toán thứ ba đơn giản nhất. Nếu một giao tác đợi một đối tượng nào đó được

giải phóng quá một khoảng thời gian nhất định thì nó tự động rollback và bắt đầu lại từ đầu.

Mặc dù vậy, nó cũng có nhiều nhược điểm lớn, ví dụ nó đã thực thi một khối lượng lớn

công việc và phải dừng lại và chờ một đối tượng nào đó. Khi đó nó có thể bị rollback chỉ

trong một khoảng tích tắc trước khi đối tượng được giải phóng.

Một thuật toán phân tán vi phạm các yêu cầu tính tự quản (autonomy) của các nút,

nhưng có khả năng giảm thiểu các thông báo qua mạng và xử lý cần thiết của CPU, được áp

dụng để phát hiện các bế tắc phân tán đồng bộ.

Ý tưởng chính của thuật toán là, ở mỗi nút diễn ra một cách tuần hoàn việc phân

tích các đối tượng tồn tại bế tắc cùng với việc sử dụng các thông tin về liên kết giữa các giao

162

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

tác theo sự chờ đợi các đối tượng CSDL cục bộ ở nút hiện tại và nhận được từ các nút khác.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Khi thực thi quá trình phân tích đó, hoặc các vòng lặp trong việc chờ đợi, hoặc các vòng lặp

có khả năng xảy ra và cần phải được xác định chính xác tại các nút khác, sẽ được phát hiện.

Các vòng lặp có khả năng đó được biểu diễn dưới dạng các dòng. Một dòng thực tế là một

danh sách các giao tác. Tất cả các giao tác được sắp xếp tương ứng với giá trị của từ định

danh (“số của giao tác”) của mình. Dòng sẽ được chuyển đến nút kế tiếp (nút mà ở đó giao

tác đầu tiên trong dòng −danh sách được thực thi) để phân tích chỉ trong trường hợp số của

giao tác đầu tiên nhỏ hơn số của giao tác cuối cùng. Và điều đó là một sự tối ưu hoá, giảm

thiểu số thông báo được chuyển qua mạng. Quá trình đó được tiếp tục mãi cho đến khi phát

hiện bế tắc.

Nếu như phát hiện bế tắc đồng bộ, nó sẽ được giải quyết bằng cách rollback một

trong các giao tác tham gia vào vòng lặp. Cũng như trường hợp HQT CSDL tập trung, vật

hiến sinh là giao tác đã thực hiện được công việc ít nhất cho đến thời điểm đó. Thông tin đó

cũng được truyền trong mạng cùng với các dòng miêu tả liên kết của các giao tác theo sự

chờ đợi.

Chú ý rằng, vì trong quá trình dò tìm các bế tắc phân tán, việc phát tán các thông

tin cục bộ liên quan từ các nút cũng có một sự trì hoãn nhất định. Vì thế, các thuật toán dò

tìm bết tắc phân tán có thể tìm ra những bế tắc mà trên thực tế không tồn tại, gọi là các bế

163

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

tắc ảo (phantom deadlocks).

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Chương VI.6 Khởi động lại sau sự cố

VI.6.1 Khởi động lại hệ thống sau sự cố

Một giao tác chính thức được cố định tại thời điểm các bản ghi nhật ký (log) của

điều phối viên được ghi lên thiết bị lưu trữ lâu dài. Và các sự cố sau đó không ảnh hưởng

đến các kết quả của giao tác, và chúng không thể bị huỷ bỏ. Các bản ghi (log) của các nút

thành viên chứa các thông tin về thể loại bản ghi, từ chỉ danh của giao tác và cả danh tính

của điều phối viên. Các bản ghi (log) về sự cố định hoặc huỷ bỏ giao tác của điều phối viên

thì chứa danh tính của tất cả các thành viên.

Khi hệ thống khởi động lại sau sự cố thì quá trình khôi phục lại bằng cách đọc

nhật ký (log) và xử lý các giao tác đang được thực thi vào thời điểm xảy ra sự cố. Quản trị

viên giao tác tại một nút có thể đã là điều phối viên đối với một giao tác nào đó, mà cũng có

thể là thành viên trong các giao tác khác. Những việc cần thực thi trong quá trình khôi phục

sau sự cố:

− Nếu tồn tại bản ghi (log) về sự cố định hoặc huỷ bỏ cho giao tác T, thì trạng thái

của nó đã rõ ràng. Tương ứng, chỉ cần lặp lại hoặc là hoàn tác (redo) giao tác T. Nếu nút

hiện tại là điều phối viên trong giao tác đó, thì cần phải gửi một cách tuần hoàn một hiệu

lệnh về việc cố định hoặc huỷ bỏ giao tác cho đến khi nhận được câu trả lời từ tất cả các nút

thành viên, bởi vì có thể có sự cố đường truyền hoặc một nút nào đó khác cũng gặp sự cố.

Sau khi nhận được câu trả lời từ tất cả các nút thành viên, một bản ghi (log) kết thúc giao tác

cho giao tác T được ghi lại.

− Nếu có một bản ghi (log) “chuẩn bị” chứ không phải là “cố định” hoặc “huỷ

bỏ”, thì rõ ràng nút này là một thành viên, và khi đó điều phối viên có thể được xác định

trên cơ sở bản ghi “chuẩn bị”. Sau đó cần phải liên tục lặp lại việc gửi thông điệp đến điều

phối viên, để xác định trạng thái của giao tác T. Khi điều phối viên trả lời bằng thông báo

“cố định” hoặc “huỷ bỏ”, thì cần phải ghi một bản ghi (log), sau đó lặp lại hoặc hoàn tác

giao tác, và sau cùng ghi bản ghi kết thúc giao tác cho T.

− Nếu không có bản ghi (log) nào thuộc các loại “chuẩn bị”, “cố định” và

“rollback” cho giao tác T, thì tất nhiên giao tác T không nằm trong quá trình cố định trước

khi sự cố xảy ra, và như thế nút hiện tại có thể đơn phương rollback giao tác T và ghi một

bản ghi (log) kết thúc giao tác cho T. Nhưng nếu nút hiện tại là điều phối viên, nó có thể đã

164

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

gửi thông báo “chuẩn bị” đến các nút thành viên trước sự cố. Và khi đó, các nút thành viên

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

có thể đã trả lời “Sẵn sàng”. Nếu các nút thành viên như vậy liên lạc, thì nút hiện tại có thể

biết được rằng nó là điều phối viên. Nhưng vì không có bản ghi (log) “cố định” hay

“rollback” nào cả bởi vì điều phối viên đã sẵn sàng nhưng chưa kịp ghi (log) lên thiết bị lưu

trữ lâu dài khi sự cố xảy ra, nên các nút thành viên trong trường hợp như thế sẽ được lệnh

rollback giao tác T.

Nếu điều phối viên của giao tác T gặp sự cố, thì những giao tác thành viên một

khi đã trả lời “sẵn sàng” không thể quyết định cố định hay là rollback giao tác T cho đến khi

nút điều phối viên được khôi phục. Khi đó T được cho là bị phong toả. Về nguyên tắc các

nút thành viên có thể liên lạc với nhau thông qua các thông tin về giao tác T, và nếu phát

hiện thấy có một nút nào đó chứa bản ghi (log) “cố định” hay “rollback” cho giao tác T, thì

trạng thái đó sẽ trở thành trạng thái toàn cục, và các nút thành viên khác chỉ việc thực hiện

hành động tương ứng.

VI.6.2 Giao thức cố định 3 pha (3PC – Three Phases Commit Protocol)

2PC vẫn ẩn chứa nguy cơ trong trường hợp điều phối viên gặp sự cố trong quá

trình khôi phục, bởi vì thậm chí nếu tất cả các giao tác thành viên đã trả lời “sẵn sàng”, điều

phối viên vẫn có thể quyết định rollback T, và quyết định này không được xác định cho đến

khi điều phối viên khôi phục. Và sau đây là một số điều bình luận về giao thức cố định hai

pha:

1. Thông điệp “nhận biết” trong giao thức cố định hai pha được dùng để xác định

khi nào điều phối viên (hoặc là quá trình khôi phục sau sự cố tại điều phối viên) có thể

“quên” giao tác T. Khi điều phối viên chưa biết, rằng tất cả các nút thành viên đã nhận quyết

định cố định hay rollback T, thì tất cả các thông tin về T phải được giữ trong bảng giao tác.

2. Nếu điều phối viên gặp sự cố sau khi gửi đi thông điệp “chuẩn bị” nhưng

không kịp ghi một bản ghi (log) cố định hoặc rollback, thì khi nó được khởi động lại và khôi

phục, nó không có thông tin gì về trạng thái của giao tác T cho đến khi gặp sự cố. Như vậy,

nó hoàn toàn có thể đơn phương rollback giao tác. Nếu một nút nào khác hỏi về trạng thái

của giao tác, thì quá trình khôi phục tại điều phối viên trả lời bằng thông điệp “rollback”. Vì

thế, khi thiếu thông tin, giao tác bị lạm dụng rollback (presumed to have aborted?).

3. Nếu một giao tác thành viên không thực hiện sửa đổi dữ liệu nào, thì nó không

có thay đổi nào trong quá trình lặp lại hoặc hoàn tác. Và vì thế, trạng thái cố định hay

rollback đối với nó là không quan trọng. Suy ra, nó có thể không cần phải trả lời “OK” hoặc

165

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

“KHÔNG” đối với thông điệp “chuẩn bị” của điều phối viên, thay vào đó có thể là thông

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

điệp “chỉ đọc” và không ghi bản ghi (log) nào cả. Và khi điều phối viên nhận được thông

điệp “chỉ đọc”, nó rollback hoặc cố định giao tác mà không cần gửi thông điệp nào thêm

nữa.

Từ ba bình luận đầu tiên có thể đưa ra những nhận xét sâu sắc hơn về những vấn

đề tồn tại trong giao thức cố định hai pha (2PC):

− Khi điều phối viên huỷ bỏ giao tác T, nó có thể rollback giao tác T và xoá T từ

bảng giao tác. Sau đó, khi các nút thành viên yêu cầu, nó sẽ không tìm ra thông tin và trạng

thái của T sẽ là “không thông tin”, và câu trả lời mặc định cho các nút thành viên là huỷ bỏ

giao tác.

− Nếu nút thành viên nhận được thông báo rollback, nó không cần phải gửi thông

điệp “nhận biết”, bởi vì điều phối viên không chờ thông điệp “nhận biết” từ các nút thành

viên. Nếu vì lý do nào đó, nút dưới nhận được lệnh “chuẩn bị”, và nó trả lời “sẵn sàng”

nhưng lại không nhận được thông báo cố định hoặc rollback. Nó sẽ chờ một khoảng thời

gian nào đó, rồi lại truy vấn điều phối viên. Và rõ ràng, nó sẽ nhận được lệnh “rollback”

trong mọi trường hợp.

− Bởi vì điều phối viên không đợi để nhận thông điệp từ các nút thành viên sau

khi nó quyết định huỷ bỏ giao tác, nên tên các nút thành viên không cần phải có trong bản

ghi (log) “rollback” của điều phối viên.

− Tất cả các bản ghi (log) của cả điều phối viên và các nút thành viên có thể được

nối vào cuối của log, thay vì được ghi đè lên. Sau đó, nếu chúng không được ghi lên thiết bị

lưu trữ lâu dài trước khi xảy ra sự cố, thì quyết định mặc định là rollback giao tác.

Một giao thức được gọi là giao thức cố định giao tác ba pha (3PC, Three-Phases

Commit Protocol) có thể giải quyết vấn đề “giao tác bị phong toả” đã nêu của giao thức cố

định giao tác hai pha. Ý tưởng chính của nó là, khi điều phối viên gửi đi lệnh “chuẩn bị” và

nhận được thông điệp “OK” từ tất cả các nút thành viên, thay vì lệnh “cố định” nó gửi đi

thông điệp “tiền cố định” (chuẩn bị cố định, prepared-commit, pre-commit). Khi nó nhận

được thông điệp “nhận biết” từ tất cả các nút cấp đưới, trừ những nút bị sự cố đã được xác

định, nó sẽ ghi bản ghi (log) cố định và gửi lệnh “cố định” đến tất cả các nút thành viên.

Trong giao thức này, điều phối viên trì hoãn quyết định cố định cho đến khi nó

biết tất cả các nút biết về quyết định cố định. Và nếu sau đó nó bị sự cố, các nút thành viên

166

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

có thể liên lạc với nhau để xác định giao tác phải được cố định hoặc rollback nếu không có

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

nút nào nhận được thông điệp “tiền cố định” mà không cần phải chờ đợi điều phối viên khôi

phục lại.

Giao thức 2PC có thể được minh hoạ như trên hình vẽ VI.3.

167

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

Hình VI.4 Giao thức cố định 3 pha - 3PC

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Chương VI.7 Các hệ thống tích hợp (hay liêng bang) và đa CSDL

Hướng phát triển các hệ thống tích hợp (integrated, federative) các CSDL không

đồng nhất và đa CSDL (multi-databases) xuất hiện trong mối quan hệ với việc cần thiết phải

kết nối các hệ CSDL được tạo ra trên nền tảng các mô hình dữ liệu khác nhau và được quản

trị bởi các HQT CSDL khác nhau.

Nhiệm vụ chính của việc liên kết các CSDL không đồng nhất đó là cung cấp cho

người dùng các hệ thống có sơ đồ (schema) CSDL toàn cục, được biểu diễn trên một mô

hình dữ liệu nào đó, và tự động chuyển đổi các lệnh (operator) thao tác CSDL cấp độ toàn

cục sang các lệnh, mà các HQT CSDL cục bộ tương ứng có thể hiểu được. Trên cơ sở lý

thuyết, các vấn đề chuyển đổi đã được giải quyết và đã được triển khai (ví dụ???).

Khi liên kết một cách nghiêm ngặt các CSDL không đồng nhất, tính tự quản của

các hệ thống CSDL cục bộ bị đánh mất. Sau khi được cài vào một CSDL cục bộ vào hệ

thống liên kết, tất cả các hành động với nó sẽ được thực hiện trên cấp độ toàn cục, kể cả

công tác quản trị (administrative). Hướng phát triển đa CSDL xuất hiện bởi vì thường người

dùng không muốn đánh mất tính tự quản cục bộ với mong muốn làm việc với tất cả các

CSDL cục bộ trên một ngôn ngữ và thực thi các truy vấn đồng thời trên cùng nhiều CSDL

cục bộ. Trong các hệ thống đa CSDL không hỗ trợ sơ đồ toàn cục liên kết các CSDL và các

phương pháp đặt tên đặc biệt được sử dụng để truy cập đến các đối tượng CSDL cục bộ. Về

nguyên tắc, trên cấp độ toàn cục, trong các hệ thống như thế chỉ cho phép thực hiện truy vấn

select.

Liên kết các CSDL không đồng nhất phân bố ở các nút khác nhau trong mạng

thường rất phức tạp. Bởi vì ngoài các vấn đề liên kết, còn phải giải quyết tất cả các vấn đề

khác của HQT CSDL PT như quản trị các giao tác phân tán, tối ưu hoá truy vấn,… Vì vậy,

rất khó đạt được hiệu quả cao.

Để biểu diễn bên ngoài các CSDL liên kết và đa CSDL, người ta thường sử dụng

mô hình dữ liệu quan hệ hoặc là một phiên bản mở rộng nào đó của nó. Trong thời gian cuối

có những đề nghị sử dụng mô hình dữ liệu hướng đối tượng, nhưng thực tế nền tảng của

những mô hình đề nghị đó vẫn là mô hình dữ liệu quan hệ. Vì thế, liên kết một HQT CSDL

quan hệ cục bộ vào một hệ thống liên kết đơn giản hơn và cho hiệu quả cao hơn liên kết các

168

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

HQT CSDL đã được tạo ra trên các mô hình dữ liệu khác.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Phần VII Các hướng nghiên cứu và phát triển hiện đại

Nếu không nghĩ đến sự hấp dẫn lôi cuốn của chúng, các HQT CSDL quan hệ cổ

điển còn rất nhiều hạn chế. Chúng thích hợp cho các ứng dụng truyền thống, như các hệ

thống đặt vé hay chỗ trong khách sạn, các hệ thống ngân hàng. Nhưng việc sử dụng chúng

trong các hệ thống tự động hoá thiết kế, các hệ thống dạy học thông minh,…trên nền tảng tri

thức thường rất khó khăn. Nguyên nhân đầu tiên đó là tính thô thiển (đơn giản) các cấu trúc

dữ liệu trong nền tảng của mô hình dữ liệu quan hệ. Các quan hệ phẳng được chuẩn hoá là

đa năng và trên lý thuyết là đủ để biểu diễn dữ liệu của bất cứ lĩnh vực ứng dụng nào. Tuy

nhiên, trong các ứng dụng phi truyền thống trong CSDL xuất hiện hàng trăm, thậm chí hàng

ngàn bảng, và trên các bảng đó thường xuyên được thực thi các thao tác “đắt giá” (như phép

nối) cần thiết để tái tạo các cấu trúc dữ liệu phức tạp vốn có của lĩnh vực ứng dụng.

Một hạn chế quan trọng nữa của các hệ thống trên mô hình dữ liệu quan hệ đó là

những khả năng tương đối yếu trong việc biểu diễn mạng ngữ nghĩa của ứng dụng. Những

gì lớn nhất mà các HQT CSDL quan hệ đảm bảo đó là khả năng khai báo và hỗ trợ các ràng

buộc tính nhất quán của dữ liệu. Như đã nhận xét trong phần 6 (L 6?), sau khi thiết kế

CSDL quan hệ nhiều kiến thức vẫn còn lại trên trên giấy, bởi vì thiếu các công cụ biểu diễn

tương ứng trong hệ thống.

Nhận biết các hạn chế và khiếm khuyết của các hệ thống quan hệ, các nhà nghiên

cứu trong lĩnh vực CSDL thực hiện rất nhiều dự án dựa trên ý tưởng vượt ra ngoài các giới

hạn của mô hình dữ liệu quan hệ. Có thể một trong số đó sẽ trở thành nền tảng cho các hệ

thống CSDL trong tương lai. Chủ đề các nghiên cứu hiện đại liên quan đến CSDL đặc biệt

rộng. Chúng ta sẽ chỉ xem qua những hướng quan trọng nhất.

Chương VII.1 Các HQT CSDL thế hệ mới

Trong phần này chúng ta sẽ xem qua những hướng cơ bản của các nghiên cứu và

phát triển trong lĩnh vực được gọi là các hệ thống “hậu” quan hệ (post-relational) thuộc về

thế hệ tiếp theo (mặc dù thuật ngữ next-generation HQT CSDL được dự trữ cho phân lớp

các hệ thống hiện đại nào đó khác).

Mặc dù việc đưa một HQT CSDL vào một lớp nào đó trong thời điểm hiện tại có

thể chỉ mang tính tương đối, ví dụ, đôi khi HQT CSDL hướng đối tượng (OO – Object-

169

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

Oriented) được đưa vào nhóm các hệ thống thế hệ tiếp theo, nhưng có thể phân ra ba hướng

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

chính trong lĩnh vực HQT CSDL thế hệ tiếp theo. Để không đặt tên cho chúng, chúng ta sẽ

ký hiệu chúng bằng tên của các HQT CSDL đặc trưng nhất.

1. Hướng Postgres. Đặc tính chính của hướng này là thừa hưởng (thừa kế) tối đa

các nguyên tắc tổ chức HQT CSDL đã biết, ngoài hệ thống quản lý bộ nhớ ngoài.

2. Hướng Exodus/Genesis. Đặc tính chính của hướng này là không phải xây dựng

chính hệ thống, mà là một máy phát (tạo) ra các hệ thống thoả mãn nhất các yêu cầu tương

ứng của ứng dụng. Giải pháp đạt được bằng cách xây dựng tổ hợp các mô-đun có giao diện

được chuẩn hoá, và ý tưởng đó xuyên suốt đến cả các lớp căn bản nhất của hệ thống.

3. Hướng Starburst. Đặc tính chính của hướng này là đạt được tính mở rộng của

hệ thống và tính thích ứng cao (приспосабливаемости?) với các nhu cầu của các ứng dụng

cụ thể bằng cách ứng dụng cơ chế chuẩn để điều khiển các quy luật (rules). Thực chất vấn

đề nằm ở chỗ, hệ thống thể hiện mình là một biên dịch viên nào đó của hệ thống các quy

luật và tổ hợp các mô-đun-hành động được gọi tên tương ứng với các quy luật đó. Có thể

thay đổi các tổ hợp các quy luật (tồn tại ngôn ngữ đặt biệt để tạo ra các quy luật) hoặc là

thay đổi các hành động bằng cách thay các mô-đun khác có cùng giao diện.

Tổng thể có thể nói rằng, các HQT CSDL thế hệ tiếp theo là những thừa kế trực

tiếp của các hệ thống quan hệ. Ngoài ra, các hướng khác nhau của các hệ thống thế hệ thứ

ba đáng giá để xem xét riêng lẽ, bởi vì chúng sở hữu những đặc tính khác nhau.

VII.1.1 Theo hướng mở rộng mô hình quan hệ

Một trong những nền tảng chính của mô hình dữ liệu quan hệ đó là đòi hỏi chuẩn

hoá các quan hệ: các trường của các bản ghi chỉ có thể chứa các giá trị nguyên tố. Đối với

các ứng dụng truyền thống của các HQT CSDL quan hệ, ví dụ như các hệ thống ngân hàng,

các hệ thống đặt chỗ,…, thì đó không phải là những hạn chế, mà thậm chí là ưu thế cho

phép thiết kế các CSDL với dung lượng bộ nhớ thấp với cấu trúc ở giới hạn có thể hiểu

được. Các truy vấn có phép nối trong các hệ thống đó tương đối hiếm, các công cụ SQL

tương ứng được sử dụng để duy trì tính toàn vẹn của dữ liệu một cách linh động.

Tuy nhiên, cùng với sự xuất hiện các HQT CSDL quan hệ có hiệu quả cao, chúng

được thử nghiệm trong các hệ thống ứng dụng ít tính truyền thống hơn, ví dụ các hệ thống

thiết kế tự động (SAPR), trong các hệ thống trí tuệ nhân tạo,… Các hệ thống như vậy

thường xử lý những đối tượng được cấu trúc phức tạp. Việc tái cấu trúc chúng từ các bảng

phẳng của các CSDL quan hệ dẫn đến việc thực thi các truy vấn mà hầu như bao giờ cũng

170

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

đòi hỏi nối các quan hệ với nhau. Tương ứng với các yêu cầu của các nhà phát triển các ứng

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

dụng phi truyền thống, xuất hiện hướng nghiên cứu các CSDL các đối tượng phức tạp. Ý

tưởng chính của hướng này là đảm bảo cho các nhà phát triển có những công cụ đủ mạnh và

đủ mềm dẽo để cấu trúc dữ liệu, giống như những gì đã hiện hữu trong các hệ thống CSDL

phân tầng (hierarchic) và CSDL mạng.

Sự khác biệt quan trọng đó là trong các hệ thống CSDL hỗ trợ các đối t ượng phức

tạp, tồn tại giới hạn giữa biểu diễn luận lý và vật lý các đối tượng đó. Cụ thể, đối với mỗi

đối tượng có độ phức tạp bất kỳ đều phải đảm bảo khả năng di chuyển hoặc là sao nó giống

như một thể nguyên từ một phần của CSDL đến một phần khác của CSDL hoặc thậm chí

vào một CSDL khác. Đó là một lĩnh vực nghiên cứu rất rộng lớn bao gồm các vấn đề như

các mô hình dữ liệu, các cấu trúc dữ liệu, các ngôn ngữ truy vấn, quản trị các giao tác, nhật

ký, v.v. Phần lớn lĩnh vực này tiệm cận với lĩnh vực CSDL hướng đối tượng.

Một hướng gần đó trên nền tảng các nguyên tắc khác được đại diện bởi các hệ

thống CSDL trên nền tảng mô hình quan hệ, mà trong đó không nhất thiết phải đảm bảo

1NF (dạng chuẩn một) của các quan hệ. Ghi nhớ rằng, yêu cầu tính nguyên tử của các giá

trị, có thể được lưu giữ trong các thành phần của các bản ghi các quan hệ, là yêu cầu cơ bản

của mô hình dữ liệu quan hệ truyền thống. Chuyển đổi biểu diễn lĩnh vực ứng dụng dạng

bảng ban đầu vào dạng “phẳng” là bước đầu tiên trong quá trình thiết kế các CSDL quan hệ

trên cơ sở các nguyên tắc chuẩn hoá. Mặt khác, hoàn toàn dễ thấy, rằng dù việc “làm phẳng”

các bảng là điều kiện cần để có được sơ đồ CSDL quan hệ “đúng” và không thừa dữ liệu,

nhưng trong tương lai sẽ dẫn đến việc thực hiện phép nối với số lượng lớn, và sự có mặt của

chúng tiêu huỷ tất cả những ưu thế của một sơ đồ CSDL “tốt”.

Như vậy, trong các mô hình dữ liệu quan hệ không được chuẩn hoá cho phép lưu

trữ trên tính chất một phần tử của bản ghi các bản ghi, các mảng, các quan hệ,… Trong khi

đó tính chất lồng nhau như vậy có thể là không bắt buộc. Nếu suy nghĩ cẩn thận các ý tưởng

đó, thì sẽ thấy được, rằng chúng dẫn đến các khả năng mô hình dữ liệu phân tầng biệt lập về

mặt luận lý (từ các biểu diễn vật lý). Nhưng điều đó không ít, nếu tính đến việc tại thời điểm

hiện tại nền tảng của CSDL quan hệ từ chối chuẩn hoá thực tế đã được soạn thảo. Nhưng

chắc chắn, trong lý thuyết đó vẫn còn nhiều điểm tối (và thậm chí chúng hiện hữu trong cả

lý thuyết quan hệ truyền thống), nhưng ít ra phần lớn các kết quả lý thuyết được biết của lý

thuyết quan hệ đã lan truyền đến mô hình không chuẩn hoá, và thậm chí những nhà nghiên

cứu mô hình quan hệ thuần tuý, như Date, cũng đề nghị khả năng sử dụng mô hình quan hệ

171

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

được hạn chế và kiểm soát SQL-3.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

VII.1.2

Các kiểu dữ liệu trừu tượng

Một trong những HQT CSDL thế hệ thứ ba được biết đó là hệ thống Postgres –

tinh thần của cả hướng nghiên cứu. Trong Postgres nhiều công cụ có tính năng hay đã được

đã được triển khai: hỗ trợ mô hình lưu trữ và truy cập tạm thời đến dữ liệu. Và liên quan đến

vấn đề đó, cơ chế ghi nhật ký các thay đổi, các rollback giao tác và khôi phục CSDL sau sự

cố cũng được xem lại. Hỗ trợ cơ chế ràng buộc tính toàn vẹn dữ liệu rất mạnh. Hỗ trợ công

việc với các bảng không được chuẩn hoá. Mặc dù vậy, trong đó hỗ trợ cả phương pháp mà

trong một trường của quan hệ có thể lưu trữ truy vấn thực thi động (dynamic) đến CSDL.

Một tính chất của hệ thống Postgres kéo nó lại gần với các tính chất của HQT

CSDL HĐT, đó là nó cho phép lưu trữ trong các trường của các quan hệ các dữ liệu trừu

tượng của các kiểu dữ liệu được định nghĩa bởi người dùng. Điều đó cho phép đưa vào

CSDL những khía cạnh hành vi của đối tượng, nghĩa là, giải quyết được bài toán giống như

CSDL HĐT, dù các khả năng thể hiện mạng ngữ nghĩa của mô hình dữ liệu Postgres yếu

hơn so với các mô hình dữ liệu HĐT. Sự khác biệt căn bản đó là các hệ thống thuộc lớp

Postgres không đề nghị sự tồn tại của ngôn ngữ lập trình, được hiểu ngang bằng với việc sử

dụng một hệ thống lập trình bên ngoài. Và cũng vậy với HQT CSDL. Nếu sử dụng hệ thống

lập trình như thế để định nghĩa các kiểu dữ liệu được lưu trữ trong CSDL, thì HQT CSDL

có thể sẽ không sẵn sàng để kiểm soát sự an toàn cho các định nghĩa đó. Nghĩa là, sẽ không

đảm bảo, rằng chính CSDL không bị phá huỷ trong quá trình thực thi các thủ tục của các

kiểu dữ liệu trừu tượng.

Vào năm 1995 tập đoàn Sun Microsystems công bố về việc cho ra đời sản phẩm

mới và là rất phổ dụng ngày nay – ngôn ngữ và họ trình biên dịch có tên Java. Ngôn ngữ

Java là tập hợp con mở rộng của ngôn ngữ C++. Những thay đổi cơ bản liên quan đến việc

ngôn ngữ Java là trình thông dịch theo từng lệnh, còn chương trình được viết trên Java được

đảm bảo không bị nguy hiểm. Cụ thể, khi thực thi bất kỳ chương trình nào trình biên dịch

cũng không bị ảnh hưởng. Để đạt được điều đó, các phép toán đại số trên các con trỏ được

xoá bỏ từ ngôn ngữ. Nhưng Java vẫn là ngôn ngữ hướng đối tượng mạnh bao gồm các công

cụ hiện đại để định nghĩa các kiểu dữ liệu trừu tượng. Tập đoàn Sun phát triển Java với mục

đích mở rộng các khả năng của dịch vụ WWW, với ý tưởng chính là từ máy chủ WWW các

máy khách nhận được không phải dữ liệu, mà là các đối tượng. Và các hàm (thủ tục) của

chúng đã được lập trình trên ngôn ngữ Java, và chúng được biên dịch trên phía máy khách.

172

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

Cách tiếp cận này giải quyết vấn đề biểu diễn các thông tin đa phương tiện không được

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

chuẩn hoá. Tuy nhiên, một số chuyên gia cho rằng, ngôn ngữ biên dịch và an toàn kiểu Java

có thể được vận dụng thành công cả trong các hệ thống CSDL cho phép lưu trữ dữ liệu với

các kiểu dữ liệu được định nghĩa bởi người dùng.

VII.1.3 Tạo ra các hệ CSDL theo hướng trình ứng dụng

Ý tưởng rất đơn giản: không bao giờ có thể tạo ra một HQT CSDL đa dụng, vừa

là đủ và vừa là không dư thừa để áp dụng vào bất kỳ ứng dụng nào. Ví dụ, nếu quan sát việc

sử dụng các HQT CSDL thương mại đa năng như Oracle, Informix, DB2,… sẽ rất đơn giản

để thấy được rằng ít nhất 90% các trường hợp ứng dụng không quá 30% khả năng của hệ

thống. Hơn nữa, ứng dụng phải mang tất cả những gì cần để duy trì công việc với HQT

CSDL được tính toán để làm việc trong các trường hợp chung nhất.

Vì thế, khá hấp dẫn để phát triển các HQT CSDL đa năng không hoàn thiện, mà

là một cái gì đó giống như là trình biên dịch trình các biên dịch (compiler compiler) cho

phép tập hợp các hệ thống CSDL hướng đến một ứng dụng cụ thể nào đó hoặc là lớp ứng

dụng nào đó. Hãy xem các ví dụ sau:

Trong các hệ thống đặt chỗ các truy vấn thường rất đơn giản (ví dụ, “cho xem ghế

tiếp theo trên chuyến bay VN251”), vì thế không cần thiết phải thực hiện tối ưu hoá các truy

vấn trên diện rộng. Mặt khác, thông tin được lưu trữ trong CSDL có tính chất quyết định

đến công việc bình thường của hệ thống, ví dụ, vấn đề bán nhiều vé cho một chỗ trên máy

bay. Vì vậy, việc đảm bảo đồng bộ các cập nhật của CSDL và khôi phục nó sau sự cố là rất

quan trọng.

Mặt khác, trong các hệ thống thống kê, các truy vấn có thể phức tạp đến một mức

độ bất kỳ. Ví dụ, “cho xem tổng số những người nam độc thân sống ở Nga và có không quá

3 con đã đăng ký”. Những truy vấn như vậy đòi hỏi sự cần thiết những công cụ tối ưu hoá

truy vấn phát triển (tiên tiến). Nhưng về mặt khác, bởi vì truy vấn liên quan đến những con

số thống kê và thường không đòi hỏi kết quả phải chính xác đến đơn vị nhỏ nhất có thể, nên

duy trì tính cô lập các giao tác một cách tuyệt đối và khôi phục CSDL sau sự cố một cách

chính xác là không cần thiết.

Vì thế, tốt hơn nên biết tạo ra hệ CSDL có tính năng và những chi phí phụ cho nó

trong một chừng mực nào đó tương ứng với những nhu cầu của ứng dụng. Hiện tại trên thị

trường không có những hệ thống “nguyên phát” (generational). Ví dụ, khi chọn HQT CSDL

173

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

Oracle chúng ta không thể yêu cầu hay từ chối những thành phần nào đó để bỏ bớt hoặc

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

thêm những tính chất, tính năng của hệ thống. Tuy nhiên vẫn tồn tại hai kiểu mẫu thử

nghiệm – Genesis và Exodus.

Cả hai hệ thống “nguyên phát” đều dựa trên nền tảng các nguyên tắc theo mô-đun

và tuân thủ chính xác các giao diện đã đặt ra. Thực chất, các hệ thống được cấu tạo từ một

nhân tối thiểu và cơ chế lập trình công nghệ các mô-đun bổ sung. Trong dự án Exodus cơ

chế đó có nền tảng là hệ lập trình E. E là sự mở rộng đơn giản của C++, hổ trợ lưu trữ dữ

liệu lâu dài (stable) trong bộ nhớ ngoài. Thay vì một HQT CSDL đã chuẩn bị sẵn, người

dùng có thể chọn một tập hợp các “bán thành phẩm” với một giao diện thống nhất. Và từ

các phần đó có thể tạo ra một hệ thống phù hợp nhất với các yêu cầu của ứng dụng.

VII.1.4 Tối ưu các truy vấn được điều khiển bởi các quy luật

Trình tối ưu hoá các truy vấn là phần tử lớn nhất, phức tạp nhất và cũng mang

tính quyết định nhất của HQT CSDL. Tất cả các nhà phát triển HQT CSDL đồng ý, rằng

không được tiết kiệm chi phí cho việc tối ưu hoá các truy vấn. Số lượng các phương án thực

thi truy vấn được phân tích càng lớn và việc đánh giá trị giá một kế hoạch thực thi truy vấn

càng chính xác được áp dụng, thì xác suất truy vấn được thực thi hiệu quả càng lớn.

Một điều khó hiểu liên quan đến các trình tối ưu hoá truy vấn đó là không có một

công nghệ chung để lập trình chúng. Thường thì trình tối ưu hoá là một tổ hợp không định

hình các thủ tục tương đối độc lập. Chúng gắn kết chặt chẽ với các phần tử khác của trình

biên dịch. Vì lý do đó, rất khó để thay đổi chiến lược tối ưu hoá hay là mở rộng chúng về

mặt chất. Việc thay đổi hay mở rộng này đã là cần thiết, bởi vì tối ưu hoá nói chung và tối

ưu hoá truy vấn thường là học thuyết theo kinh nghiệm, và về nguyên tắc các thuật toán theo

kinh nghiệm tốt chỉ xuất hiện theo thời gian.

Vậy làm thế nào để giải quyết vấn đề đó? Có một số các giải quyết có tính thoả

hiệp và không vượt ra ngoài ranh giới của công nghệ truyền thống trong sản xuất các trình

biên dịch. Về cơ bản, chúng gắn bó với việc ứng dụng những công cụ đảm bảo tối ưu việc

xây dựng các trình biên dịch. Hai trong chúng đáng chú ý đó là họ trình biên dịch gcc và gói

phần mềm Cocktail. Ưu điểm chính của gcc đó là ứng dụng một ngôn ngữ biểu diễn chương

trình bên duy nhất. Gói Cocktail hỗ trợ tổ hợp các thủ tục đa đụng để chuyển đổi các biểu

diễn bên trong của chương trình. Trong một ý nghĩa nào đó có thể xem cocktail là một ngôn

ngữ chuyên dụng để viết các trình biên dịch của bất kỳ ngôn ngữ nào, kể cả các ngôn ngữ

lập trình thủ tục và cả ngôn ngữ khai báo CSDL. Cocktail cho phép nâng cao hiệu quả công

174

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

việc của các nhà phát triển trình biên dịch lên 2-3 lần.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Tuy nhiên, cách tiếp cận có tính cách mạng nhất được ứng dụng trong hệ thống

hậu quan hệ (post-realtional) thử nghiệm Starburst của IBM. Hệ thống Starburst có nền tảng

là ứng dụng hệ thống sản xuất (productional system?). Đó là một máy ảo, trong đó tất cả các

phần tử của HQT CSDL được thực hiện, từ trình biên dịch ngôn ngữ CSDL (là phiên bản

mở rộng của ngôn ngữ SQL) đến phân hệ trực tiếp thực thi các truy vấn. Chính bản thân

HQT CSDL là một tổ hợp các quy luật productional(?). Mỗi trong số đó sẽ được gọi bởi hệ

thống productional khi xuất hiện một sự kiện tương ứng và thực thi những thao tác nào đó.

Và chính nó đến phiên mình lại có thể sẽ dẫn đến sự xuất hiện một sự kiện kích hoạt một

quy luật khác. Các quy luật được biểu diễn trên một ngôn ngữ đặc biệt. Một tổ hợp các quy

luật đã được định nghĩa trước cấp thấp được duy trì. Các quy luật cấp thấp đó đảm bảo giao

diện với phân hệ quản lý bộ nhớ ngoài. Tất nhiên, để nâng cao hiệu quả, phân hệ đó được

viết trên một ngôn ngữ khác chứ không phải ngôn ngữ productional.

Rõ ràng, cách tổ chức hệ thống như thế đảm bảo sự mềm dẻo, linh hoạt tối đa. Ví

dụ, để đưa vào sử dụng trong máy tối ưu hoá truy vấn một chiến lược thực thi mới, thì chỉ

cần viết thêm một hoặc vài quy luật mới liên kết với sự kiện yêu cầu chiến lược thực thi mới

đó.

VII.1.5 Hỗ trợ các thông tin lịch sử và các truy vấn biểu thị thời gian

Các CSDL thông thường lưu trữ các bản chụp (snapshot) tức thời ở thời điểm t

của mô hình lĩnh vực ứng dụng. Bất kỳ thay đổi nào ở thời điểm t của một đối tượng nào đó

dẫn đến việc không thể truy cập đến trạng thái của đối t ượng đó ở thời điểm kế trước. Rất lý

thú là thực tế trong phần lớn các HQT CSDL tiên tiến, trạng thái ở thời điểm kế trước của

đối tượng được lưu trữ trong nhật ký thay đổi, nhưng không có khả năng truy cập từ phía

người dùng.

Tất nhiên, có thể đưa một thuộc tính thời gian một cách rõ ràng vào các quan hệ

được lưu trữ và duy trì các giá trị của nó ở cấp độ ứng dụng. Không phải đơn giản mà trong

chuẩn SQL xuất hiện những kiểu dữ liệu đặc biệt date và time. Nhưng trong cách tiếp cận

này có những khiếm khuyết: HQT CSDL không nhận thấy những mạng ngữ nghĩa của

trường thời gian của quan hệ và không thể kiểm soát tính đúng đắn của các giá trị của nó;

Xuất hiện sự dư thừa dữ liệu phụ trong việc lưu trữ (trạng thái kế trước của đối tượng dữ

liệu được lưu trữ cả trong CSDl chính và cả trong nhật ký thay đổi); Các ngôn ngữ truy vấn

175

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

của các HQT CSDL quan hệ không thích ứng với công việc với thời gian.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Tồn tại một hướng riêng biệt nghiên cứu và phát triển trong lĩnh vực CSDL tạm

thời (temporal). Trong lĩnh vực đó các vấn đề mô hình hoá dữ liệu, các ngôn ngữ truy vấn,

tổ chức dữ liệu trong bộ nhớ ngoài, v.v. được nghiên cứu. Luận điểm chính của các hệ thống

tạm thời là cho bất kỳ đối tượng dữ liệu nào được tạo ra trong thời điểm t1 và bị huỷ diệt ở

thời điểm t2, tất cả các trạng thái của nó trong khoản thời gian [t1, t2] được lưu trữ trong

CSDL và người dùng có thể truy cập.

Nghiên cứu và xây dựng các kiểu mẫu các HQT CSDL tạm thời thường được

thực hiện trên cơ sở một HQT CSDL quan hệ nào đó. Cũng giống như trường hợp CSDL

suy diễn (?), HQT CSDL tạm thời – đó là những cấu hình trên các hệ thống quan hệ. Tất

nhiên, đó không phải là cách triển khai tốt nhất trên quan điểm hiệu quả, nhưng nó đơn giản

và cho phép tiến hành các nghiên cứu đủ sâu.

Một ví dụ hệ thống tạm thời đó là Postgres. Những đặc tính căn bản của hệ thống

quản lý bộ nhớ của Postgres đó là: − Trong đó không tiến hành ghi nhật ký thông thường

các thay đổi CSDL, và đảm bảo một cách tức thời một trạng thái đúng đắn của CSDL sau

khi gọi lại hệ thống với trạng thái đã cũ của bộ nhớ tạm thời; − Hệ thống quản lý bộ nhớ duy

trì các dữ liệu “lịch sử” (historical). Các truy vấn có thể chứa các đặc tính thời gian của các

đối tượng quan tâm.

Giải quyết cơ bản đó là khi sửa đổi một bản ghi các thay đổi không diễn ra không

phải ở chỗ lưu trữ của nó, mà một bản ghi mới được thêm vào. Ngoài việc chứa dữ liệu, bản

ghi đó còn đặc trưng giao tác đã thực hiện các thay đổi (kể cả thời điểm nó được hoàn tất),

và được đính vào danh sách cho bản ghi được sửa đổi. Trong hệ thống một từ định danh

giao tác độc nhất được duy trì và có một bảng giao tác đặc biệt được lưu trữ trong bộ nhớ

lâu dài. Như vậy, sau các sự cố đơn giản chỉ cần không quan tâm đến các bản ghi phần sau

thuộc về các giao tác chưa được hoàn tất của danh sách. Việc đồng bộ hoá được hỗ trợ trên

cơ sở giao tác phong toả hai pha thông thường.

Một phần tử riêng biệt của hệ thống thực hiện lưu trữ (archive) các đối tượng của

CSDL. Nó thực hiện việc thu thập các danh sách quá khổ các bản ghi đã được sửa đổi và ghi

chúng vào vùng lưu trữ (архивного хранения?). Có thể chỉ các truy vấn đến vùng này

nhưng chỉ được phép đọc thông tin.

Hệ thống thiên về việc sử dụng các đĩa quang ghi một lần và các bộ nhớ lâu dài

linh động (стабильной оперативной памяти?). Khi có các công cụ kỹ thuật như thế nó sẽ

176

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

cho hiệu quả cao thậm chí trong công việc trong chế độ truyền thống khi so sánh với sơ đồ

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

ghi nhật ký. Tuy nhiên cũng có thể làm như thế trong trường hợp thiết bị truyền thống,

nhưng khi đó hiệu quả của hệ thống sẽ bị kém hơn một tí so với các sơ đồ truyền thống.

Các khả năng công việc với các dữ liệu lịch sử tương ứng được đưa vào trong

ngôn ngữ Postquel. Có thể chọn (selection) những thông tin đã được lưu trữ trong CSDL ở

một thời điểm độc nhất, ở trong một giai đoạn thời gian,… Ngoài ra, có thể tạo ra các phiên

bản của các quan hệ và cho phép thực hiện sửa đổi sau đó cùng với các thay đổi các phiên

177

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

bản chính.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Chương VII.2 Các HQT CSDL hướng đối tượng

Hướng phát triển CSDL HĐT (OODB – Object-Oriented DataBase) xuất hiện đã

tương đối lâu. Những công bố đầu tiên đã có vào những năm 1980. Tuy nhiên hướng này

phát triển năng động chỉ trong những năm gần đây. Sự xuất hiện của hướng CSDL HĐT

được xác định bởi những yêu cầu thực tiễn: sự cần thiết phát triển các hệ thống thông tin

ứng dụng phức tạp, mà những công nghệ hệ CSDL trước đó, ví dụ CSDL quan hệ, không

đáp ứng được.

Tất nhiên, CSDL HĐT được bắt đầu không phải từ con số không. Nó dựa trên nền

tảng là những công trình trước đó trong lĩnh vực CSDL, các hướng phát triển ngôn ngữ lập

trình với những kiểu dữ liệu trừu tượng và cả các ngôn ngữ lập trình HĐT.

Có thể nói, trong những nghiên cứu trước đó ảnh hưởng đến hướng phát triển

CSDL HĐT đó là các nghiên cứu trên HQT CSDL quan hệ, và sau đó là họ những CSDL có

hỗ trợ các đối tượng phức tạp. Cách tiếp cận mô hình hoá dữ liệu theo mạng ngữ nghĩa có

ảnh hưởng lớn đến ý tưởng và các khái niệm CSDL HĐT. Ngoài ra, các hướng phát triển

song song với CSDL HĐT là CSDL suy diễn (deductive) và CSDL năng động (active).

Ngôn ngữ Smalltalk ảnh hưởng nhiều nhất đến CSDL HĐT trong số các ngôn

ngữ và hệ thống lập trình. Bản thân ngôn ngữ này không phải là tiên phong, mặc dù trong

nó được đưa vào nhiều thuật ngữ mới mà cho đến bây giờ vẫn là phổ biến nhất trong lập

trình hướng đối tượng.

Tuy nhiên, trong hướng CSDL HĐT cũng tồn tại những vấn đề như trong CSDL

quan hệ trong những năm 1970. Mặc dù số lượng dự án cả thương mại và thử nghiệm lớn,

nhưng giữa chúng không có một mô hình dữ liệu được chấp nhận chung. Vấn đề không phải

là chưa có mô hình dữ liệu chung nào được phát triển, mà vấn đề là thiếu sự đồng thuận về

việc ứng dụng một mô hình nào đó. Trên thực tế tồn tại những vấn đề cụ thể liên quan đến

việc phát triển các ngôn ngữ khai báo truy vấn, liên quan đến thực thi và tối ưu hoá truy vấn,

trình bày và duy trì các ràng buộc toàn vẹn dữ liệu, đồng bộ hoá truy cập và quản lý giao

178

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

tác, v.v.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

VII.2.1

Mối liên hệ giữa HQT CSDL hướng đối tượng với khái niệm chung về

cách tiếp cận hướng đối tượng Trong cách đặt vấn đề chung nhất và cổ điển cách tiếp cận HĐT có nền tảng là những

khái niệm của:

− Đối tượng và từ định danh của đối tượng.

− Các thuộc tính và các phương thức (method = hàm, thủ tục).

− Các lớp.

− Phân tầng và thừa kế của các lớp.

Bất kỳ một thực thể nào của thế giới thực trong các ngôn ngữ và hệ thống HĐT đều

được mô hình hoá dưới dạng các đối tượng. Khi được tạo ra, bất kỳ đối tượng nào cũng

nhận được một từ định danh độc nhất do hệ thống phát sinh ra. Từ định danh và đối tượng

tồn tại cùng với đối tượng trong suốt thời gian tồn tại của đối tượng và không thay đổi khi

trạng thái (instance) của đối tượng được thay đổi.

Mỗi đối tượng có trạng thái và hành vi riêng. Trạng thái của đối tượng là tổ hợp các

giá trị của các thuộc tính của nó. Hành vi của đối tượng – đó là tổ hợp các phương thức

(method) thực hiện các thao tác trên trạng thái của đối tượng. Giá trị của thuộc tính đối

tượng cũng là một đối tượng nào đó hoặc là tập hợp các đối tượng. Trạng thái và hành vi

của đối tượng được đóng gói (dung nạp, incapsulated) vào đối tượng. Sự tương tác qua lại

của các đối tượng diễn ra trên cơ sở truyền tải các thông điệp và thực thi các phương thức

tương ứng.

Tập hợp các đối tượng có cùng tổ hợp các thuộc tính và phương thức tạo thành một

lớp – thừa kế. Trong trường hợp đó, một lớp mới được gọi là lớp con của lớp hiện tại (siêu

lớp) thừa hưởng tất cả các thuộc tính và phương thức của siêu lớp. Ngoài ra, trong các lớp

con còn có thể được định nghĩa các thuộc tính và phương thức bổ sung. Phân biệt hai trường

hợp thừa kế đơn (simple) và đa thừa kế (multi, set). Trong trường hợp đầu tiên, lớp con có

thể được định nghĩa trên nền tảng chỉ một siêu lớp. Trong trường hợp thứ hai các siêu lớp có

thể là số nhiều. Nếu như trong ngôn ngữ hoặc là hệ thống hỗ trợ thừa kế duy nhất

(единичное наследование?) các lớp, thì tổ hợp các lớp tạo thành một cấu trúc phân tầng

hình cây. Khi hỗ trợ đa thừa kế các lớp được gắn bó với nhau trong một đồ thị có hướng

(oriented graph) có gốc được gọi là lưới (решеткой?, ví dụ trong các ngôn ngữ lập trình

HĐT có Object) của các lớp. Đối tượng của lớp con được cho là thuộc về bất kỳ siêu lớp

179

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

nào của lớp đó.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Rõ ràng, với tổ hợp các khái niệm cơ bản đó, nếu không chú ý đến những khả năng

thừa kế của các lớp và các vấn đề tương ứng, cách tiếp cận HĐT rất gần với cách tiếp cận

của các ngôn ngữ lập trình với các kiểu dữ liệu trừu tượng hoặc tuỳ ý.

Mặt khác, nếu trừu tượng hoá khía cạnh hành vi của các đối tượng, thì cách tiếp cận

HĐT gần với cách tiếp cận mô hình hoá dữ liệu theo mạng ngữ nghĩa. Các sự trừu tượng

hoá nền tảng của các mô hình mạng ngữ nghĩa được ứng dụng một cách không rõ ràng trong

cách tiếp cận HĐT. Việc xây dựng các đối tượng phức tạp, mà giá trị của nó có thể là các

đối tượng khác, dựa trên nền tảng sự trừu tượng một hợp thể (aggregation). Trừu tượng hoá

nhóm là nền tảng của việc hình thành nên các lớp các đối tượng. Việc xây dựng cấu trúc

phân tầng và lưới lớp dựa trên cơ sở trừu tượng hoá một đặc trưng chuyên biệt hoặc khái

quát.

Rõ ràng, tính chất mới quan trọng nhất của CSDL HĐT đó là khía cạnh hành vi của

đối tượng. Tính chất đó cho phép đạt được cách tiếp cận hướng đối tượng. Trong các hệ

thống thông tin ứng dụng có nền tảng là các CSDL với cách tổ chức truyền thống đến các hệ

thống trên nền tảng các mô hình dữ liệu dựa trên mạng ngữ nghĩa, tồn tại một khoảng lớn

giữa các phần cấu trúc và hành vi. Phần cấu trúc của hệ thống được duy trì bởi tất cả các

phương tiện của CSDL. Nó có thể được mô hình hoá, kiểm tra, v.v. Còn phần hành vi được

tạo ra một cách cô lập. Cụ thể, còn thiếu một phương tiện chuẩn (formal) và hệ thống hỗ trợ

đồng thời mô hình hoá và đảm bảo tính nhất quán giữa phần cấu trúc (tĩnh) và phần hành vi

(động). Trong môi trường CSDL HĐT, khâu thiết kế, phát triển và triển khai một hệ thống

ứng dụng trở thành một quá trình, mà trong đó tích hợp cả khía cạnh cấu trúc và hành vi. Tất

nhiên, cần phải có các ngôn ngữ đặc biệt cho phép định nghĩa các đối tượng và xây dựng

các hệ thống ứng dụng trên cơ sở cấu trúc và hành vi đó.

Đặc thù của việc ứng dụng hướng tiếp cận hướng đối tượng để tổ chức và quản trị

CSDL đã yêu cầu giải thích chi tiết hơn các khái niệm truyền thống và một vài khái niệm

mở rộng của chúng. Điều đó được xác định bởi các yêu cầu lưu trữ lâu dài các đối tượng

trong bộ nhớ ngoài, truy cập kết hợp đến các đối tượng, đảm bảo trạng thái nhất quán CSDL

HĐT trong các điều kiện đa truy cập và các khả năng tương tự tạo nên tính chất của CSDL.

Bao gồm ba khía cạnh không tồn tại trong hình thái truyền thống nhưng được yêu cầu trong

CSDL HĐT.

Khía cạnh đầu tiên liên quan đến yêu cầu trong các công cụ phân loại tri thức trong

180

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

khi định nghĩa các lớp (các ràng buộc tính toàn vẹn, các quy luật suy diễn,…). Khía cạnh

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

thứ hai đó là yêu cầu trong cơ chế xác định các thành phần khác nhau của các liên kết mạng

ngữ nghĩa giữa các đối tượng của các lớp khác nhau. Thực tế điều đó có nghĩa đòi hỏi sự lan

toả hoàn toàn các công cụ mô hình hoá dữ liệu theo mạng ngữ nghĩa trên CSDL HĐT. Yêu

cầu trong ứng dụng sự trừu tượng kết hợp được chú ý cả trong mối liên kết với việc sử dụng

CSDL HĐT trong môi trường thiết kế và kỹ thuật (engineering) tự động hoá. Khía cạnh thứ

ba liên quan đến việc xem lại khái niệm lớp. Trong ngữ cảnh CSDL HĐT, sẽ tiện lợi hơn

nếu xem lớp như là một tập hợp các đối tượng của một kiểu, nghĩa là, đồng thời duy trì cả

khái niệm kiểu và cả khái niệm lớp các đối tượng.

Trong cộng đồng các nhà nghiên cứu CSDL HĐT và các nhà phát triển hệ thống

không có dự đồng thuận hoàn toàn, nhưng một phiên bản mở rộng của cách tiếp cận HĐT

được sử dụng trong phần lớn các công trình thực tiễn.

VII.2.2 Các mô hình dữ liệu hướng đối tượng

Mô hình dữ liệu được hình thức (chuẩn) hoá và được sử dụng chung đầu tiên đó là

mô hình quan hệ của Codd. Trong mô hình đó, ba khía cạnh được phân ra: cấu trúc, tính

toàn vẹn và thao tác (manipulation). Các cấu trúc dữ liệu trong mô hình quan hệ có nền tảng

là những quan hệ được chuẩn hoá phẳng, các ràng buộc được biểu diễn bằng các công cụ

luận lý bậc một (first-order logic), và thao tác dữ liệu được thực hiện trên cơ sở đại số quan

hệ hoặc là các phép toán quan hệ tương đương. Nhiều nhà nghiên cứu đã nhận xét rằng,

thành công của mô hình dữ liệu quan hệ dựa trên phương tiện toán học chặt chẽ của lý

thuyết tập hợp (set), lý thuyết quan hệ và các luận lý bậc một. Các nhà phát triển một hệ

thống quan hệ cụ thể nào cũng nhận trách nhiệm chứng minh sự tương quan mô hình dữ liệu

cụ thể của mình với mô hình dữ liệu quan hệ chung. Mô hình dữ liệu quan hệ chung đó

mang tính “quan hệ” của hệ thống.

Những khó khăn chính của việc mô hình hoá dữ liệu theo HĐT có nguồn gốc từ việc

không tồn tại một phương tiện toán học phát triển để làm nền tảng cho mô hình dữ liệu

HĐT. Có lẽ chủ yếu vì thế mà cho đến bây giờ vẫn chưa có một mô hình HĐT chung. Mặt

khác, vài tác giả khẳng định, rằng mô hình dữ liệu HĐT chung không thể được định nghĩa

trong ý nghĩa truyền thống, bởi lý do khái niệm mô hình dữ liệu truyền thống không hữu

dụng đối với hình thái HĐT.

Một trong những nhà lý thuyết nổi tiếng trong lĩnh vực mô hình dữ liệu, Beery, tiến

181

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

cử nền tảng CSDL HĐT. Mặc dù nó vẫn chưa hoàn toàn đủ và không phải là mô hình dữ

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

liệu trong ý nghĩa truyền thống, nhưng ít nhất nó cho phép các nhà nghiên cứu và phát triển

hệ thống CSDL HĐT có thể nói trên cùng một ngôn ngữ.

Đầu tiên, suy ra từ thực tiễn các CSDL HĐT, đề nghị phân ra hai mức độ mô hình

hoá các đối tượng: mức thấp (cấu trúc) và mức cao (hành vi). Ở mức độ cấu trúc hỗ trợ các

đối tượng phức tạp, việc định danh chúng và các loại hình liên kết “isa”. CSDL – đó là tổ

hợp các phần tử dữ liệu liên quan với nhau bở mối quan hệ “thuộc lớp” hoặc là “là thuộc

tính của”. Như vậy, CSDL có thể được xem như là một đồ thị có hướng (oriented). Điểm

quan trọng là bên cạnh khái niệm đối tượng các khái niệm giá trị được hỗ trợ.

Điểm quan trọng là phân biệt rõ ràng giữa sơ đồ giữ liệu và chính CSDL. Các kiểu và

lớp là những khái niệm chính (đầu tiên) của mức lược đồ của CSDL HĐT. Chú ý rằng,

trong tất cả các hệ thống sử dụng chỉ một khái niệm hoặc kiểu hoặc lớp, khái niệm đó không

tránh khỏi bị đè (override). Kiểu đề nghị sự có mặt của một tập hợp nào đó các giá trị. Tập

hợp được định nghĩa bởi cấu trúc dữ liệu của kiểu đó. Lớp cũng đề nghị sự có mặt của tập

hợp các đối tượng, nhưng tập hợp đó được định nghĩa bởi người dùng. Như vậy, kiểu và lớp

có những vai trò khác nhau, và để đảm bảo tính chặt chẽ và tránh tính đa nghĩa (hai nghĩa),

đòi hỏi hỗ trợ cả hai khái niêm kiểu và lớp.

Beery không biểu diễn mô hình ở mức độ cấu trúc CSDL HĐT đầy đủ chính thức,

nhưng tỏ ra tin tưởng, rằng mức độ hiểu biết hiện tại là đủ để hình thức hoá mô hình như

thế. Liên quan đến mức hành vi, một cách tiếp cận chung cho phương tiện luận lý cần có

được đưa ra, bởi vì luận lý bậc một không đủ.

Quan trọng là, dù không đủ nhưng “hai mức độ truyền thống – sơ đồ và dữ liệu để

cho CSDL HĐT là không đủ” là dự kiến xác đáng của Beery. Để định nghĩa chính xác

CSDL HĐT cần có mức (siêu lược đồ) meta-schema. Meta-schema cần phải đóng vai trò

cho CSDL HĐT giống như vai trò của phần cấu trúc của mô hình dữ liệu quan hệ đối với

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

Để mô tả hiện trạng công việc trong lĩnh vực CSDL HĐT chúng ta sơ lược những

tính năng của mô hình dữ liệu cụ thể được áp dụng trong HQT CSDL HĐT O2.

Trong O2 hỗ trợ cả các đối tượng và các giá trị. Đối tượng – đó là một cặp từ định

danh và giá trị. Trong khi đó các đối tượng được đóng gói, nghĩa là, các giá trị của chúng

chỉ có thể truy cập thông qua các phương thức là những thủ tục được gắn liền với các đối

tượng. Các giá trị có thể là cơ bản hoặc là những cấu trúc. Các giá trị có cấu trúc được tạo

182

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

thành từ các giá trị hoặc là các đối tượng được biểu diễn bởi các từ định danh của mình với

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

sự giúp đỡ của các hàm khởi tạo (constructor) các tổ hợp, các bản ghi v à các danh sách. Các

phần tử của các giá trị có cấu trúc có thể được truy cập thông qua các phương thức

(operation) được định nghĩa trước (primitives).

Có hai kiểu tổ chức dữ liệu: các lớp mà các bản sao của chúng là những đối tượng

bao gồm các dữ liệu và hành vi, và các kiểu mà các bản sao của chúng là các giá trị. Mỗi

một lớp tương quan với một kiểu miêu tả cấu trúc các bản sao của lớp. Các kiểu được định

nghĩa một cách đệ quy trên cơ sở các kiểu căn bản (nguyên tố, atomicity) và các kiểu hoặc

các lớp đã được định nghĩa trước đó cùng với việc sử dụng các hàm khởi tạo. Phần hành vi

của một lớp được định nghĩa bằng tổ hợp các phương thức.

Các đối tượng và các giá trị có thể được đặt tên. Tính lâu bền (persistency) của việc

lưu trữ liên quan đến việc đặt tên cho các đối tượng hoặc các giá trị: Bất kỳ các đối tượng

hoặc giá trị nào được đặt tên đều là lâu bền, bất kỳ đối tượng hoặc giá trị nào là một phần

của một đối tượng hoặc giá trị khác được đặt tên cũng là lâu bền.

Bằng sự giúp đỡ của việc chỉ định đặt biệt trong quá trình định nghĩa một lớp có thể

đạt được tính lâu bền của việc lưu trữ bất kỳ đối tượng nào của lớp đó. Trong trường hợp

này hệ thống tự động phát sinh một giá trị - tập hợp có tên trùng với tên của lớp. Trong tập

hợp đó đảm bảo có chứa tất cả các đối tượng của lớp đó.

Phương thức (method) là một mã chương trình được gắn kết với một lớp cụ thể và

được áp dụng cho các đối tượng của lớp đó. Việc định nghĩa một phương thức trong O2

diễn ra theo hai bước. Đầu tiên dấu hiệu (signalture) của phương thức được khai báo, nghĩa

là, tên của nó, lớp, các kiểu hoặc các lớp tham số và kiểu hoặc là lớp của kết quả. Các

phương thức có thể là public (có thể truy cập từ các đối tượng của lớp khác) hoặc là private

(chỉ có thể truy cập từ bên trong của lớp hiện tại). Trong bước thứ hai việc triển khai một

lớp được định nghĩa trên một trong những ngôn ngữ lập trình của O2.

Trong mô hình O2 hỗ trợ đa thừa kế các lớp trên cơ sở quan hệ siêu kiểu/kiểu con

(super type/subtype). Trong các lớp con (subclass) cho phép thêm và/hoặc định nghĩa lại các

thuộc tính và các phương thức. Cho phép hiện hữu tính đa nghĩa trong quá trình đa thừa kế

bằng cách đặt tên lại, hoặc bằng cách chỉ rõ thừa kế từ đâu. Đối tượng của lớp con là một

đối tượng của mỗi siêu lớp mà trên cơ sở siêu lớp đó một lớp con mới được sinh ra.

Lớp được định nghĩa trước “Object” được hỗ trợ. “Object” là gốc của lưới lớp. Bất

kỳ một lớp nào khác cũng đều thừa hưởng lớp Object một cách không rõ ràng và thừa

183

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

hưởng các phương thức được định nghĩa trước (is_name, is_value_equal, v.v.).

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Đặc trưng đặc thù (riêng biệt) của mô hình O2 là khả năng khai báo các thuộc tính bổ

sung và các phương thức cho các đối tượng được đặt tên. Điều đó có nghĩa là, một đối

tượng—đại diện được đặt tên cụ thể của một lớp có thể sở hữu kiểu là kiểu con của một kiểu

của lớp. Tất nhiên, các phương thức chuẩn (thông thường) của lớp không làm việc với các

thuộc tính như thế, nhưng đặt biệt cho đối tượng được đặt tên các phương thức bổ sung có

thể được định nghĩa hoặc là định nghĩa lại các phương thức chuẩn. Và các phương thức bổ

sung đó có thể truy cập đến các thuộc tính bổ sung. Chú ý rằng, các thuộc tính bổ sung và

các phương thức bổ sung được gắn kết không phải đến một đối tượng cụ thể, mà là đến tên,

mà đăng sau nó trong các thời điểm khác nhau có thể là các đối tượng khác nhau. Đặc biệt

đòi hỏi phát triển các kỹ thuật liên kết muộn (техники позднего связывания?) để triển khai

các thuộc tính và các phương thức.

VII.2.3 Các ngôn ngữ lập trình các CSDL HĐT

Các ngôn ngữ lập trình luôn gắn bó mật thiết với mô hình dữ liệu. Nhiều nhà nghiên

cứu và phát triển cho rằng hệ CSDL HĐT thể hiện mình là sự liên kết của hệ thống lập trình

và HQT CSDL. HQT CSDL HĐT là HQT CSDL có nền tảng là mô hình dữ liệu HĐT.

VII.2.3.1 Sự đánh mất mối tương quan giữa các ngôn ngữ lập trình và các ngôn ngữ truy vấn trong HQT CSDL quan hệ

Sự cần thiết thực tiễn chính trong CSDL HĐT liên quan đến các yêu cầu trong một

môi trường xây dựng tích hợp nào đó của các hệ thống thông tin phức tạp. Trong môi

trường đó đòi hỏi phải không có các mâu thuẫn giữa phần cấu trúc và phần hành vi của dự

án và phải hỗ trợ quản trị hiệu quả các cấu trúc dữ liệu phức tạp trong bộ nhớ ngoài. Trong

các hệ thống quan hệ, khi xây dựng một ứng dụng đồng thời phải sử dụng ngôn ngữ lập

trình thủ tục hướng công việc với các giá trị vô hướng và ngôn ngữ truy vấn kiểu khai báo

hướng công việc với các tập hợp. Điều đó thường được gọi là sự đánh mất tương quan

(impedance mismatch). Môi trường ngôn ngữ CSDL HĐT là hệ thống lập trình hướng đối

tượng, mà tất nhiên bao gồm cả các công cụ để làm việc với các đối tượng bền vững. “Tính

tất nhiên” của việc đưa các công cụ làm việc với CSDL vào ngôn ngữ lập trình có nghĩa

rằng, làm việc với các đối tượng lâu bền (được lưu trữ trong CSDL bên ngoài) cần phải diễn

ra trên cơ sở chính các việc xây dựng cú pháp đó và cùng chính mạng ngữ nghĩa đó, như là

184

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

công việc với các đối tượng tạm thời chỉ tồn tại trong thời gian làm việc của chương trình.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Mặt này của CSDL HĐT gần nhất với hướng các ngôn ngữ lập trình CSDL. Các

ngôn ngữ lập trình CSDL HĐT và CSDL trong nhiều điểm của mình chỉ khác biệt ở mặt

thuật ngữ; sự khác biệt chủ yếu chỉ là sự hỗ trợ cách tiếp cận với sự thừa hưởng của các lớp

trong các ngôn ngữ bậc một (first-order language). Ngoài ra, các ngôn ngữ cấp hai tiên tiến

hơn cả về mặt hệ thống các kiểu, và ở mặt các cấu trúc quản trị.

Một khía cạnh khác của môi trường ngôn ngữ CSDL HĐT nữa là sự yêu cầu trong

các ngôn ngữ truy vấn có thể được sử dụng trong chế độ tương tác qua lại (on-line,

interactive). Nếu việc truy cập đến các đối tượng của CSDL bên ngoài trong các ngôn ngữ

lập trình CSDL HĐT chủ yếu mang tính dẫn đường (навигационный?), thì dùng kiểu khai

báo sẽ thuận tiện hơn cho các ngôn ngữ truy vấn. Các ngôn ngữ truy vấn kiểu khai báo đến

các CSDL HĐT không tiên tiến bằng các ngôn ngữ lập trình CSDL HĐT, và trong quá trình

triển khai chúng xuất hiện nhiều vấn đề lớn.

VII.2.3.2 Các ngôn ngữ lập trình CSDL HĐT như là các ngôn ngữ HĐT hỗ trợ các đối tượng bền vững (persistent)

Đến thời điểm này vẫn chưa có một ngôn ngữ lập trình CSDL HĐT nào được thiết kế

bắt đầu từ con số không. Con đường tự nhiên để xây dựng một ngôn ngữ như thế là sử dụng

và mở rộng những phần cần thiết một ngôn ngữ hướng đối tượng đã có nào đó. Bắt đầu sự

bùng nổ của hướng CSDL HĐT trùng hợp với cao điểm của sự phổ dụng của ngôn ngữ

Smalltalk-80. Ngôn ngữ này ảnh hưởng rất lớn đến việc phát triển các hệ thống CSDL HĐT

đầu tiên. Và, cụ thể, nó được sử dụng với tư cách là ngôn ngữ lập trình. Phần lớn nó dựa

trên ngôn ngữ Smalltalk và một hệ thống thương mại khác là Gemstone.

Các khó khăn trong việc triển khai hiệu quả trong thực tiễn của ngôn ngữ Smalltalk

đã đánh thức các nhà phát triển các hệ thống CSDL HĐT, và thúc đẩy họ trong việc tìm

kiếm những ngôn ngữ cơ sở khác. Sự tương đồng rõ ràng giữa các cách tiếp cận hướng đối

tượng và cách tiếp cận theo chức năng trong lập trình cho phép dựa vào các ngôn ngữ lập

trình chức năng tối đa trong việc phát triển các ngôn ngữ CSDL HĐT. Cụ thể, ngôn ngữ

Common Lisp là nền tảng của dự án ORION. Trong dự án đó Lisp vừa l à ngôn ngữ công cụ,

vừa là nền tảng của ngôn ngữ lập trình hướng đối tượng trong môi trường ORION.

Các yêu cầu triển khai hiệu quả hơn buộc phải sử dụng các ngôn ngữ ở cấp độ thấp

hơn trên tính chất là nền tảng của ngôn ngữ HĐT. Ví dụ, trong hệ thống VBASE bên cạnh

ngôn ngữ được phát triển đặc biệt để định nghĩa các kiểu TDL (Type Defination Language),

185

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

bản mở rộng của ngôn ngữ hướng đối tượng C – COP (C Object Processor) được sử dụng.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Trong dự án O2, bên cạnh ngôn ngữ lập trình hướng đối tượng chức năng (?), hai bản mở

rộng của các ngôn ngữ lập trình Basic và C được sử dụng. Trong khi đó, phổ biến rộng rãi

nhất là ngôn ngữ CO2 – một phiên bản mở rộng của ngôn ngữ C. Điều đó có thể liên quan

đến sự phổ biến rộng rãi của ngôn ngữ C và hậu duệ của nó là C++. Nhưng lý do cũng có

thể sâu xa hơn, chẳng hạn như, các ngôn ngữ lập trình cấp độ cao thường rất hạn chế đối với

các lập trình viên chuyên nghiệp,… Hơn nữa, xu thế hiện đại là như vậy, và cũng có ý nghĩa

khi mô tả sơ lược các đặc trưng cơ bản của ngôn ngữ CO2.

VII.2.3.3 Các ví dụ ngôn ngữ lập trình CSDL HĐT

Rõ ràng ngôn ngữ CO2 không phải là một ngôn ngữ độc lập. Nó là một phần của môi

trường đa ngôn ngữ O2 và được dùng để lập trình các phương thức của các lớp đã được

được định nghĩa trước. Các lớp, các dấu hiệu (signature) của các phương thức (thực tế là các

mẫu, prototype, của các hàm trong C) và các tên của các giá trị được lưu giữ lâu dài và các

đối tượng được định nghĩa với sự giúp đỡ của một ngôn ngữ riêng biệt dùng để định nghĩa

lược đồ của CSDL.

Tên của một đối tượng bất kỳ là một con trỏ chỉ đến giá trị của đối tượng đó; cùng

với một toán tử C thông thường ‘*’. Chỉ các phương thức của lớp mới có thể truy cập đến

giá trị của đối tượng, nếu khi kê khai các phương thức toán tử ‘*’ không được khai báo

public một cách rõ ràng.

Thao tác tạo ra một đối tượng mới của một lớp được hỗ trợ. Khác biệt với C++, trong

CO2 không thể kết hợp việc tạo ra một đối tượng mới cùng với việc khởi tạo (initialization)

nó bởi vì khái niệm phương thức khởi tạo (constructor) cùng với các giá trị ban đầu của đối

tượng không được hỗ trợ trong CO2. Để cho các giá trị ban đầu cần phải hoặc là gọi một

cách rõ ràng các phương thức tương ứng của lớp cùng với con trỏ chỉ đến đối tượng được

tạo ra, hoặc là sử dụng toán tử ‘*’ và gán các giá trị mới, nếu như ‘*’ là một toán tử public

cho lớp đó.

CO2 bao gồm cả các công cụ kiến tạo các giá trị-bản ghi, các tập hợp và các danh

sách. Khái niệm giá trị-bản ghi thực tế tương đương với khái niệm giá trị-cấu trúc của ngôn

ngữ C thông thường, với sự khác biệt là các phần tử của bản ghi có thể là các đối tượng, các

tập hợp và các danh sách. Các thao tác thêm, bớt cũng như xem các phần tử cũng như tổ hợp

các thao tác trên tập hợp, nối các danh sách cũng được hỗ trợ.

Công cụ “lặp lại” (iteration) mở rộng so với ngôn ngữ C là căn bản của việc thao tác

186

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

các đối tượng được lưu giữ trong CSDL. “Máy lặp (iterator)” được áp dụng cho các giá trị-

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

tập hợp hoặc giá trị-danh sách. Thực tế máy lặp là một sự ứng dụng liên tiếp toán tử-thân

của vòng lặp với tất cả các phần tử của tập hợp hoặc danh sách. Máy lặp của ngôn ngữ CO2

đảm bảo việc chạy qua (navigation) trong các lớp của các đối tượng. Điểm còn lại duy nhất

từ các ngôn ngữ truy vấn quen thuộc với người dùng HQT CSDL đó là khả năng hạn chế

của việc chỉ ra các đặc điểm của các đối tượng cần thiết trong vòng lặp, bằng cách sử dụng

toán tử ‘*’ và chỉ ra một cách tường minh các điều kiện cho các thuộc tính; tất nhiên, toán tử

‘*’ phải được khai báo public trong lớp đó.

Các nhà phát triển ngôn ngữ CO2 nhấn mạnh rằng, họ cố ý tạo ra CO2 với các tính

năng nghèo nàn hơn so với, chẳng hạn, C++, bởi vì nhiều thứ trong phần điều khiển các đối

tượng đã được thực hiện bởi quản trị viên (manager) các đối tượng chung của hệ thống.

VII.2.4 Các ngôn ngữ truy vấn CSDL HĐT

Hiện nay, các nhà phát triển nhận thấy yêu cầu trong việc hỗ trợ trong các HQT

CSDL HĐT không chỉ ngôn ngữ hoặc họ các ngôn ngữ lập trình CSDL HĐT, mà còn các

ngôn ngữ truy vấn phát triển (tiên tiến). Hệ thống cần phải hỗ trợ một giao diện dễ hiểu và

người dùng cuối cùng có thể truy cập thẳng trong chế độ trực tiếp.

VII.2.4.1 Điều hướng (navigation) tường minh như là một công cụ vượt qua sự mất mát tính tương ứng

Phổ biến nhất là cách tiếp cận tổ chức các giao diện tương tác với các hệ thống

CSDL HĐT trên nền tảng của việc ứng dụng các “tuần tra viên”. Trong trường hợp này

thường giao diện cuối cùng là giao diện đồ hoạ. Lược đồ của CSDL HĐT được thể hiện trên

màn hình, và người sử dụng có thể truy cập đến các đối tượng theo kiểu điều hướng. Vài

nghiên cứu cho rằng, trong trường hợp đó thông minh hơn thì nên bỏ qua tính đóng gói của

các đối tượng và biểu diễn cho người dùng thế giới bên trong của các đối tượng. Trong phần

lớn các hệ CSDL HĐT hiện tại tồn tại một giao diện tương tự, nhưng tất cả hiểu rằng, ngôn

ngữ truy vấn điều hướng, trong một ý tưởng nào đó, có thể được cho là tụt hậu một bước so

với các ngôn ngữ truy vấn khác, thậm chí trong các hệ thống quan hệ.

VII.2.4.2 Các ngôn ngữ truy vấn không-điều hướng (non-navigation)

Bery ghi nhận sự tồn tại của ba cách tiếp cận. Cách thứ nhất - các ngôn ngữ là sự mở

rộng theo hướng hướng đối tượng của các ngôn ngữ truy vấn của các hệ thống quan hệ. Phổ

biến nhất là các ngôn ngữ có cú pháp gần với ngôn ngữ SQL. Điều đó liên quan đến sự công

187

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

nhận chung và phổ biến rộng rãi của ngôn ngữ SQL.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Cách thứ hai có nền tảng trên việc xây dựng các tính toán hướng đối tượng luận lý

toàn diện. Có nhiều công trình lý thuyết liên quan đến việc xây dựng một tính toán như thế,

nhưng một ngôn ngữ truy vấn hoàn thiện và được triển khai thực tiễn thì chưa được thấy. Có

thể nhận thấy rằng, các công trình trên nền tảng lý thuyết đại số của các phạm trù (category)

cũng theo hướng các ngôn ngữ truy vấn được miêu tả toán học chặt chẽ.

Cách thứ ba dựa trên nền tảng ứng dụng cách tiếp cận suy diễn. Nó chủ yếu thể hiện

việc các nhà phát triển cố gắng làm xích lại gần các hướng CSDL suy diễn và CSDL HĐT.

Một cách độc lập với ngôn ngữ truy vấn được sử dụng để phát triển hướng tiếp cận,

trước mặt các nhà phát triển tồn tại một vấn đề mang tính khái quát. Việc giải quyết vấn đề

đó không được đưa vào dòng chảy (chiều hướng?) truyền thống của cách tiếp cận hướng đối

tượng. Rõ ràng, lớp đại diện cho một tập hợp các đối tượng cùng kiểu trong CSDL, và là cơ

sở để hình thức hoá một truy vấn. Nhưng kết quả một truy vấn có thể là gì? Tổ hợp các khái

niệm cơ bản của cách tiếp cận hướng đối tượng không chứa một khái niệm có thể chấp nhận

trong tình huống này. Thường thì có thể thoát khỏi tình thế bằng cách mở rộng tổ hợp cơ

bản các khái niệm tập hợp các đối tượng, và giả sử rằng, kết quả của một truy vấn là là một

tập hợp con nào đó của các đối tượng-bản sao của một lớp. Nhưng cách tiếp cận đó khá hạn

chế, bởi vì tự động nó đã loại bỏ khả năng tồn tại trong ngôn ngữ truy vấn các công cụ

tương tự như phép nối các quan hệ trong ngôn ngữ CSDL quan hệ. Chúng ta sẽ xem qua các

đặc tính của vài ngôn ngữ truy vấn kiểu khai báo đến các CSDL HĐT.

Trong ngôn ngữ truy vấn của HQT CSDL HĐT ORION, nguyên tắc đóng gói của

các đối tượng được duy trì hoàn toàn. Các truy vấn chỉ có thể trên cơ sở một lớp trong phiên

bản đã được triển khai của ngôn ngữ này. Cách tiếp cận để định nghĩa một truy vấn trên cơ

sở nhiều lớp dưới dạng mở rộng mạng ngữ nghĩa của phép nối quan hệ cũng được đề nghị.

Cú pháp của ngôn ngữ theo định hướng SQL. Tổ hợp các cú pháp chọn lựa (select) rất phát

triển. Có thể chỉ ra tên của người dùng đang quan tâm của lớp con cho các thuộc tính, nếu

miền giá trị của nó là một siêu lớp.

Ngôn ngữ truy vấn Iris mang sự ảnh hưởng rất lớn của hình thái quan hệ. Thậm chí

tên gọi của nó là OSQL thể hiện mối quan hệ mật thiết của nó với ngôn ngữ quan hệ SQL.

Thực chất OSQL là một ngôn ngữ quan hệ được tạo ra để làm việc với các quan hệ chưa

được chuẩn hoá. Rõ ràng, với cách tiếp cận này trong ngôn ngữ OSQL tính đóng gói của các

188

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

đối tượng bị phá huỷ.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Có thể nói thú vị nhất là ngôn ngữ khai báo truy vấn của hệ thống O2 RELOOP. Nó

là ngôn ngữ có cú pháp hướng SQL, và có nền tảng là đại số của các đối tượng và giá trị

được phát triển đặt biệt cho hô hình O2. Truy vấn bao giờ cũng được đưa ra trên giá trị-tập

hợp hoặc giá trị-danh sách. Trong khi đó, các phần tử của các giá trị-tập hợp có thể là các

đối tượng (chọn đơn giản), hoặc giá trị-bản ghi với các phần tử là các đối tượng của nhiều

lớp khác nhau. Trong tổng thể, các tính năng đó của ngôn ngữ cho phép định hình các truy

vấn trên nhiều lớp, và các truy vấn lồng cũng được hỗ trợ.

VII.2.4.3 Các vấn đề tối ưu hoá truy vấn

Thông thường, mục đích chính của quá trình tối ưu hoá các truy vấn trong hệ thống

CSDL HĐT là việc xây dựng một kế hoạch thực thi tối ưu các truy vấn sử dụng các công cụ

truy cập đến bộ nhớ ngoài của CSDL HĐT.

Tối ưu hoá truy vấn đã được nghiên cứu và phát triển rất tốt trong bối cảnh các

CSDL quan hệ. Các phương pháp tối ưu hoá theo cú pháp và ngữ nghĩa trên cấp độ biểu

diễn phi thủ tục (non-procedure) các truy vấn, các thuật toán thực thi các toán tử quan hệ cơ

bản và các phương pháp ước lượng trị giá thực thi các kế hoạch thực thi truy vấn đã được

biết đến rộng rãi.

Tất nhiên, các đối tượng có thể có cấu trúc phức tạp h ơn nhiều so với các bản ghi của

các quan hệ “phẳng”, nhưng sự khác biệt đó không phải là quan trọng nhất. Sự phức tạp

chính của việc tối ưu hoá các truy vấn đến các CSDL HĐT là ở điểm, các điều kiện của

phép chọn được hình thức hoá trong các thuật ngữ của các thuộc tính “bên ngoài” của các

đối tượng (các phương thức), còn cho việc tối ưu hoá thực tiễn (nghĩa là tạo ra kế hoạch tối

ưu) thì yêu cầu các điều kiện phải được xác định trên các thuộc tính “bên trong”.

Thực chất tình huống tương tự cũng gặp phải cả trong các HQT CSDL quan hệ

(RDBMS) trong quá trình tối ưu hoá các truy vấn trên khung nhìn của CSDL. Trong trường

hợp đó các điều kiện lựa chọn cũng được hình thức trên các thuật ngữ của các thuộc tính

bên ngoài (các thuộc tính của khung nhìn), và trong mục đích của việc tối ưu hoá truy vấn

các điều kiện đó phải được biến đổi thành các điều kiện được xác định trên các thuộc tính

của các quan hệ đang được lưu trữ. Một phương pháp “tối ưu hoá trước” (pre-optimization)

được biết đến rộng rãi đó là thay thế các khung nhìn. Phương pháp này thường cho phép

đảm bảo các biến đổi cần thiết. Một phương pháp thực thi truy vấn trên các khung nhìn khác

189

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

đó là “thực hoá” (materialization) các khung nhìn. Và đôi khi, nó là cách duy nhất.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Trong các hệ CSDL HĐT tình hình phức tạp hơn bởi hai tình tiết. Đầu tiên, các

phương thức thường được lập trình trên một ngôn ngữ lập trình hình thức (procedure) nào

đó và có thể có nhiều tham số. Nghĩa là, trong trường hợp chung, thân của các phương thức

không chỉ là một biểu thức đại số như trong trường hợp định nghĩa các thuộc tính của các

khung nhìn, mà là một chương trình có tham số bao gồm cả sự phân nhánh, gọi các hàm và

các thuộc tính của các đối tượng khác. Sự phức tạp thứ hai liên quan đến tính liên kết

(linking) muộn là một khả năng và cũng rất phổ biến: Trong thời gian biên dịch truy vấn sự

triển khai và thậm chí cấu trúc đối tượng chính xác có thể không được biết đến.

Một trong những cách giản lược vấn đề đó là mở ra tính “nhìn thấy” của những thuộc

tính bên trong nào đó của đối tượng quan trọng nhất cho quá trình tối ưu hoá. Trong bối

cảnh đó, chỉ cần mở ra tính nhìn thấy cho trình biên dịch truy vấn có thể là đủ, nghĩa là, thực

tế không cho phép định nghĩa lại những biến như vậy trong các lớp con. Dưới cái nhìn của

người dùng, các thuộc tính như vậy được nhìn nhận như là các phương thức không tham số

và trả lại giá trị có kiểu tương ứng. Có thể thấy rằng, sẽ tốt hơn nếu vẫn duy trì tính đóng gói

nghiêm ngặt của các đối tượng (nhằm mục đích đưa các ứng dụng thoát khỏi sự phụ thuộc

mang tính sống còn đến việc triển khai) và đảm bảo các tính năng thiết kế lược đồ CSDL

HĐT có tính đến các yêu cầu tối ưu các truy vấn.

Cách tiếp cận chung cho việc tiền tối ưu hoá (pre-optimzation) các điều kiện lựa chọn

(được hình thức hoá bằng việc sử dụng các mệnh đề luận lý bậc một không có các phép

lượng hoá (quantifier, kvantor), và trong các mệnh đề đó, các phương thức của lớp tương

ứng, các hằng số và các toán tử so sánh có thể được sử dụng) cho một (siêu) lớp của các đối

tượng có thể như sau:

Bước 1. Biến đổi biểu thức luận lý của điều kiện vào dạng hội chuẩn (CNF –

conjunctive normal form). Chúng ta không nghiên cứu sâu cách thức chọn một CNF cụ thể,

nhưng hiển nhiên, phải chọn một CNF “tốt”, ví dụ, CNF chứa các hội (conjunction) nguyên

tố lớn nhất có thể.

Bước 2. Đối với mỗi hội bao gồm các phương thức có phần thân đã biết trước trong

thời gian biên dịch thì thay các lần gọi (call) chúng bằng thân của chúng cùng với các tham

số đã được “lắp đặt sẵn” (thay tham số bằng giá trị). Để đơn giản, chúng ta giả thuyết rằng,

các tham số không chứa các cuộc gọi các hàm hoặc là phương thức của các đối tượng khác.

Bước 3. Cho mỗi hội như thế, thực thi tất cả các việc đơn giản hoá có thể, nghĩa là,

190

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

tính toán tất cả những gì có thể tính trong phần tĩnh. Mặc dù ở dạng chung, công việc này

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

rất phức tạp. Trong quá trình thiết kế CSDL HĐT một cách thông minh, các phương thức

bao gồm cả những phương thức có triển khai đơn giản nhất để việc đưa ra các điều kiện cho

các phương thức đó sẽ là rất tự nhiên. Những điều kiện như thế sẽ được giản lược một cách

rất hiệu quả.

Bước 4. Nếu xuất hiện các hội thể hiện mình là các mệnh đề đơn giản trên cơ sở các

biến trạng thái và hằng số, thì sử dụng các hội để phát triển một kế hoạch thực thi truy vấn

tối ưu. Nếu như không thể thu được những hội như vậy, thì cách duy nhất để “lọc” (siêu)

lớp các đối tượng, đó là xét qua theo thứ tự cùng với việc tính toán một cách đầy đủ các biểu

thức luận lý cho mỗi đối tượng.

Hiểu rằng, các khả năng tối ưu hoá sẽ phụ thuộc vào các đặc tính của ngôn ngữ lập

trình sẽ được áp dụng để lập trình các phương thức, phụ thuộc vào các tính năng của ngôn

ngữ truy vấn cụ thể, và phụ thuộc vào việc đã đầu tư suy nghĩ bao nhiêu trong quá trình thiết

kế lược đồ CSDL HĐT. Cụ thể, tốt nhất ngôn ngữ lập trình được sử dụng thao tác tối đa

phong cách lập trình các phương thức của các đối tượng. Ngôn ngữ truy vấn phải hạn chế

đến mức có thể các khả năng của người dùng, cụ thể, trong mối quan hệ của các tham số của

các phương thức tham gia vào các điều kiện của các truy vấn. Cuối cùng, trong các lớp của

lược đồ CSLD HĐT cần phải có các phương thức đơn giản. Các phương thức đó không

được định nghĩa lại trong các lớp con, và có nền tảng là các biến trạng thái là cơ sở để tổ

chức các phương thức truy cập.

Chú ý rằng, những ràng buộc đã được nêu trên không liên quan đến (vlekut) sự phụ

thuộc của các trình ứng dụng vào các đặc tính triển khai của CSDL HĐT, bởi vì các đối

tượng vẫn được đóng gói hoàn toàn. Việc sử dụng các phương thức trong các điều kiện của

các truy vấn cần phải được thao tác không phải bởi các yêu cầu của việc triển khai, mà là

mạng ngữ nghĩa của các đối tượng.

VII.2.5 Các ví dụ HQT CSDL HĐT

Trong thời gian gần đây, rất nhiều công trình cả thử nghiệm và công nghiệp trong

lĩnh vực HQT CSDL HĐT đã và đang được triển khai. Nhiều hơn cả là các công trình chủ

yếu mang tính chất nghiên cứu của các trường đại học. Nhưng nhiều năm trước đã đánh dấu

sự xuất hiện của hàng chục sản phẩm thương mại. Trong đó có những HQT CSDL HĐT đã

191

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

được nhắc tới ở trên là O2, ORION mà chúng ta sẽ xem xét kỹ hơn sau đây.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

VII.2.5.1

Dự án ORION

Dự án ORION của công ty MCC tồn tại từ năm 1985 đến 1989. ORION là một bộ

của 3 HQT CSDL HĐT ORION-1 – hệ thống một người dùng, ORION-1SX – chuyên dụng

để sử dụng với tính chất là máy chủ trong mạng cục bộ, và ORION-2 – HQT CSDL HĐT

phân tán hoàn toàn. Việc triển khai của cả ba hệ thống diễn ra hoàn toàn trên ngôn ngữ

Common Lisp trong môi trường hệ điều hành Unix.

Các thành phần chức năng chính của hệ thống bao gồm các phân hệ quản lý bộ

nhớ, quản lý các đối tượng và quản lý các giao tác. Trong ORION-1, tất cả các thành phần

phân bố trên một trạm làm việc; trong ORION-1SX, chúng được phân bố dàn trải trên nhiều

trạm làm việc khác nhau, riêng việc quản lý các đối tượng được diễn ra trên máy trạm của

người dùng. Ứng dụng cơ chế gọi hàm từ xa (RPC) trong ORION-1SX cho việc tương tác

giữa máy chủ và máy trạm cho phép sử dụng trong hệ thống đó nhiều mô-đun ORION-1,

mà hầu hết không cần phải chỉnh sửa lại nhiều. Các tương tác qua mạng trong hệ thống

được xây dựng trên cơ sở các công cụ chuẩn của các hệ điều hành.

Trong số các chức năng của phân hệ quản lý bộ nhớ có chức năng phân bổ bộ nhớ

ngoài, dịch chuyển các trang từ bộ nhớ đệm của RAM vào bộ nhớ ngoài và ngược lại, tìm

và xếp đặt các đối tượng trong các bộ nhớ đệm của RAM. Trong các hệ thống HĐT có hai

dạng biểu diễn các đối tượng được hổ trợ, đó là dạng đĩa và dạng trong RAM. Khi dịch

chuyển một đối tượng từ bộ đệm của các trang ra bộ nhớ ngoài và ngược lại thì biểu diễn

của nó cũng được thay đổi. Ngoài ra, phân hệ đó còn chịu trách nhiệm làm việc với các cấu

trúc chỉ mục bổ trợ. Các cấu trúc này giúp nâng cao tốc độ thực thi các truy vấn.

Phân hệ quản lý các đối tượng bao gồm các thành phần xử lý truy vấn, quản lý

các lược đồ và các phiên bản của các đối tượng. Các phiên bản được duy trì chỉ cho các đối

tượng, nếu trong quá trình tạo ra các đối tượng đó yêu cầu này đã được nêu rõ. Các phiên

bản không được duy trì cho các lược đồ CSDL. Khi lược đồ bị thay đổi sẽ diễn ra quá trình

kiểm tra xem sự thay đổi đó có ảnh hưởng đến các thành phần khác của lược đồ đó và các

đối tượng khác đang tồn tại hay không. Kỹ thuật tối ưu hoá tương tự như trong các HQT

CSDL quan hệ được sử dụng trong quá trình xử lý các truy vấn, nghĩa là, xây dựng tổ hợp

các kế hoạch thực thi truy vấn có thể, sau đó đánh giá và chọn một kế hoạch để chi phí thực

thi rẻ nhất.

Phân hệ quản lý các giao tác đảm bảo tính tuần tự (serialization) truyền thống của

192

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

các giao tác, và cũng chính nó đảm bảo việc hỗ trợ các công cụ để nhật ký hoá các thay đổi

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

và khôi phục CSDL sau khi xảy ra sự cố. Nhiều phiên bản khác nhau của giao thức chiếm

lĩnh đồng bộ 2PL cùng với các mức độ phân hạt khác nhau được sử dụng để tuần tự hoá các

giao tác. Tất nhiên, trong quá trình đồng bộ các tính chất đặc chủng của CSDL HĐT được

xem xét, ví dụ, sự có mặt của sự phân tầng của các lớp. Nhật ký các thay đổi đảm bảo

rollback các giao tác khác nhau riêng biệt và khôi phục CSDL sau các sự cố mềm. Khả năng

lưu trữ các bản copy lưu trữ CSDL để khôi phục sau sự cố ổ cứng không được hỗ trợ.

VII.2.5.2 Project O2

Dự án O2 được thực hiện bởi một công ty Pháp là Altair đặc biệt với mục đích

thiết kế và triển khai các HQT CSDL HĐT. Dự án được bắt đầu tháng 9 năm 1986 và dự

kiến hoàn thành trong 5 năm: 3 năm tạo bản thử nghiệm và 2 năm để phát triển bản công

nghiệp. Sau khi hoàn thành dự án, một công ty hoàn toàn thương mại mang tên O2 được

hình thành để duy trì hệ thống và phục vụ việc phát triển về sau của nó.

Bản mẫu của hệ thống làm việc trong chế độ khách/chủ trong mạng cục bộ của

các trạm làm việc SUN cùng với sự chia sẽ chức năng tương ứng giữa máy chủ và các máy

khách.

Các thành phần cơ bản của hệ thống (không tính đến tổ hợp các công cụ giao diện

khá tiên tiến) là trình thông dịch (interpretator) các truy vấn và các phân hệ quản lý lược đồ,

quản lý các đối tượng và quản lý các ổ đĩa. Quản lý các ổ đĩa nghĩa là duy trì một môi

trường nền tảng cho việc lưu trữ lâu dài được đảm bảo bởi hệ thống WiSS. Hệ thống này

được các nhà phát triển O2 chuyển sang môi trường hệ điều hành UNIX.

Phân hệ quản lý các đối tượng chịu tải trọng về chức năng cao nhất. Sau đây là

những chức năng tiêu biểu của phân hệ đó:

- Quản lý các đối tượng phức tạp, bao gồm tạo ra và huỷ bỏ các đối tượng, chọn các

đối tượng theo tên, duy trì các phương thức đã được định nghĩa trước, hỗ trợ các đối tượng

với cấu trúc bên trong như tập hợp, danh sách và bản ghi.

- Quản lý việc chuyển tải các thông điệp giữa các đối tượng.

- Quản lý các giao tác.

- Quản lý môi trường truyền thông trên cơ sở các giao thức TCP/IP trong LAN.

- Theo dõi các đối tượng được lưu trữ lâu dài.

- Quản lý các bộ nhớ đệm trong RAM. Biểu diễn của đối tượng trong RAM và trên

đĩa khác nhau, tương tự như trong ORION.

193

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

- Quản lý liên cung (clusterring ?) các đối tượng trong bộ nhớ ngoài.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

- Quản lý các chỉ mục.

Trong việc quản lý các giao tác có phân biệt hai chế độ. Một là cho phép thực thi

song song các giao tác thay đổi lược đồ của CSDL, và hai, chỉ cho phép thực thi song song

các giao tác có thể thay đổi thế giới bên trong (nội dung) của CSDL. Chế độ thứ nhất

thường được sử dụng trong giai đoạn phát triển, thiết kế CSDL. Chế độ thứ hai – trong giai

đoạn thực thi các ứng dụng. Các công cụ phục hồi CSDL sau sự cố và rollback các giao tác

có thể gài vào (bật) và có thể tháo gỡ (tắt). Ngoài ra, còn tồn tại một chế độ, mà khi đó tất cả

các đối tượng được lưu trữ lâu dài được tải lên RAM trong quá trình thực thi giao tác để

tăng tốc độ xử lý và tốc độ công việc của hệ thống ứng dụng.

Thành phần quản lý lược đồ CSDL được triển khai trên cơ sở phân hệ quản lý các đối

tượng: Trong hệ thống, vài lớp ẩn đối với lập trình viên như Class, Method được duy trì, và

phiên bản sao của chúng là những đối tượng định nghĩa các lớp và các đối tượng định nghĩa

các phương thức. Tình huống này gợi nhớ đến các hệ thống CSDL quan hệ, trong đó cũng

có nhiều quan hệ danh mục phụ trợ nhằm mục đích miêu tả lược đồ CSDL. Trong O2,

không cho phép xoá một lớp không phải là lá của cây phân tầng các lớp hoặc là lớp đó đang

được sử dụng trong một lớp khác hoặc là trong một phương thức nào đó.

Dù ngắn gọn, nhưng việc mô tả những tính năng tiêu biểu của hai HQT CSDL HĐT

trên đây cũng thể hiện hiện tính thực tiễn của cách tiếp cận hiện đại trong việc tổ chức các

hệ thống như thế. Các nhà phát triển các hệ thống đó không hướng đến việc tuân thủ hoàn

toàn cách tiếp cận HĐT và áp dụng những cách giải quyết vấn đề đơn giản nhất. Hiện tại

trong cộng đồng phát triển các HQT CSDL HĐT chưa xuất hiện một công trình nào đó có

thể đóng một vai trò trong hướng đó, như là vai trò của System R theo hướng các hệ thống

quan hệ. Và sự thật, các vấn đề của CSDL HĐT phức tạp hơn nhiều so với các vấn đề được

194

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

giải quyết trong các hệ thống quan hệ.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Chương VII.3 Các hệ CSDL trên nền tảng các quy luật

Rõ ràng, quy luật được sử dụng cho các mục đích khác nhau trong tất cả các HQT

CSDL tiên tiến. Trong các HQT CSDL trên nền tảng các quy luật, các quy luật đóng một

vai trò quan trọng hơn nhiều so với trong các hệ thống quan hệ truyền thống.

VII.3.1 Phần mở rộng và phần tăng cường của CSDL

Nếu như xem xét kỹ những gì thực tế được lưu trữ trong các CSDL, thì có thể

nhận thấy sự tồn tại của 3 loại hình khác nhau của thông tin. Loại thứ nhất, đó là những

thông tin đặc tả các cấu trúc dữ liệu của người dùng, như miêu tả phần cấu trúc của lược đồ

CSDL. Thông tin này trong trường hợp CSDL quan hệ được lưu trữ trong các quan hệ-danh

mục và chứa chủ yếu tên của các quan hệ gốc, tên và các kiểu dữ liệu và các thuộc tính của

chúng. Loại thứ hai, đó là chính những tổ hợp các bản ghi dữ liệu của người dùng được lưu

trữ trong các quan hệ đã được người dùng định nghĩa. Và loại thứ ba, đó là các quy luật xác

định các ràng buộc tính toàn vẹn của CSDL, các bẫy sự kiện của CSDL và các quan hệ ảo

(khung nhìn). Trong các hệ thống quan hệ, các quy luật cũng được lưu trữ trong các quan

hệ-danh mục hệ thống, mặc dù các bảng phẳng không phải là lý tưởng để để hướng tới mục

đích đó.

Thông tin các loại thứ nhất và thứ hai trong tổng thể mô tả các đối tượng (thực

thể) của thế giới thực được mô hình hoá trong CSDL. Nói cách khác, đó là hững sự kiện rõ

ràng được biểu diễn bởi người dùng để lưu trữ trong CSDL. Phần này của CSDL được gọi

thống nhất chung là phần mở rộng (extensional).

Thông tin thuộc loại thứ ba phục vụ để điều khiển CSDL trong quá trình thực thi

các thao tác thuộc các thể loại khác nhau do người dùng yêu cầu. Các ràng buộc tính toàn

vẹn có thể phong toả việc thực thi các thao tác cập nhật CSDL. Các bẫy sự kiện kéo theo

quá trình thực thi tự động các hành động đặc trách khi xuất hiện các điều kiện đã được đặc

tả. Các định nghĩa các khung nhìn thực thi quá trình “thực hoá” (materialization) các khung

nhìn một cách trực tiếp hoặc là gián tiếp khi chúng được sử dụng. Phần này của CSDL được

thống nhất chung gọi là phần tăng cường (intensional). Nó không chứa các sự kiện trực tiếp,

nhưng chứa các thông tin đặc tả mạng ngữ nghĩa của lĩnh vực ứng dụng.

Như đã thấy, trong các CSDL quan hệ phần mở rộng có ý nghĩa quan trọng hơn,

còn phần tăng cường chủ yếu đóng vai trò phụ trợ. Trong các hệ CSDL trên nền tảng quy

195

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

luật, hai phần đó đóng vai trò (tối thiểu) là như nhau.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

VII.3.2

Các CSDL năng động (chủ động – active DB)

Theo định nghĩa, một CSDL được gọi là năng động nếu HQT CSDL quản trị

CSDL đó thực thi không chỉ các thao tác do người dùng yêu cầu trực tiếp, mà còn thực hiện

các hành động bổ trợ tương ứng với các quy luật đã được cài đặt sẵn trong chính CSDL.

Dễ thấy rằng, nền tảng của ý tưởng đó có trong ngôn ngữ SQL thời System R.

Vậy thực tế, định nghĩa các bẫy sự kiện hay là các hành động theo điều kiện mà tương ứng

với chúng HQT CSDL cần phải thực hiện các hành động bổ sung là gì? Cách đây không lâu,

kể cả trong hệ thống System R, các bẫy sự kiện không được triển khai một cách hoàn toàn

trong bất kỳ một HQT CSDL nào, bởi vì triển khai một công cụ như thế trong HQT CSDL

là quá khó, chồng chéo và không hoàn toàn rõ ràng về mặt toán học. Ngày nay trong các

HQT CSDL thương mại như Oracle, MS SLQ Server, DB2,… và trong một số HQT CSDL

mã nguồn mở như PostgreSQL,… các công cụ bẫy sự kiện và quy luật được triển khai đến

một mức có thể đáp ứng nhu cầu của người dùng.

Trong việc triển khai và ứng dụng các bẫy sự kiện cũng như quy luật vẫn tồn tại

nhiều vấn đề đến nay vẫn chưa có câu trả lời. Định nghĩa tổ hợp các hành động bổ sung

được thực thi theo các hành động trực tiếp của người dùng như thế nào cho hiệu quả? Bằng

cách nào để nhận biết các vòng lặp trong một chuỗi “hành động-điều kiện-hành động-…” và

cần phải làm gì khi xuất hiện những vòng lặp như thế? Trong khuôn khổ giao tác nào các

hành động bổ sung theo điều kiện được thực thi? Và những chi phí để thực hiện chúng thuộc

về một người dùng nào đó hay là chung cho cả hệ thống?

Rất nhiều vấn đề chưa được giải quyết thậm chí cho trường hợp đơn giản trong

việc triển khai các bẫy sự kiện của SQL, và phạm vi của các các bài toán đã được đặt ra

rộng hơn. Thực tế, trong thành phần HQT CSDL cần phải có một hệ thống productional (?)

chung nhất. Các điều kiện và hành động của hệ thống đó không bị ràng buộc bởi nội dung

trong CSDL hoặc các hành động trực tiếp trên CSDL từ phía người dùng. Ví dụ, trong điều

kiện có thể có sự tham gia của thời gian, còn hành động có thể ở bên ngoài, như là hiển thị

thông tin lên màn hình của người dùng (operator). Thực tiễn tất cả các công trình hiện đại

theo CSDL năng động đều liên quan đến vấn đề triển khai hiệu quả một hệ thống

productional như vậy.

Trong chuẩn SQL3 có tính đến các công cụ ngôn ngữ nhằm định nghĩa các tương

tác theo điều kiện. Việc triển khai chúng thực tiễn là bước đầu tiên tiến đến các CSDL năng

196

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

động.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

(Them: hiện tại sql 3 đã được triển khai trong các HQT CSDL như thế nào?)

VII.3.3 CSDL suy diễn

Theo định nghĩa, CSDL suy diễn được cấu thành từ hai phần: phần mở rộng chứa

các sự kiện, và phần tăng cường (extentional và intensional) chứa các quy luật cho việc đưa

ra có tính luận lý các sự kiện mới trên cơ sở phần mở rộng và truy vấn của người dùng.

Dễ thấy rằng, với định nghĩa chung chung như vậy, HQT CSDL quan hệ hướng

SQL có thể được đưa vào danh sách các hệ thống suy diễn. Rõ ràng, các khung nhìn được

định nghĩa trong lược đồ của CSDL quan hệ là gì nếu chúng không thuộc phần mở rộng của

CSDL? Thực tế, không quan trọng cơ chế cụ thể nào được sử dụng để đưa ra các sự kiện

mới trên cơ sở các sự kiện đã có. Trong trường hợp SQL, phần tử chủ đạo để định nghĩa một

khung nhìn là câu lệnh chọn (select) của ngôn ngữ SQL. Chừng đó cũng đủ hiển nhiên, vì

kết quả thực thi câu lệnh chọn là một bảng phát sinh. Kể cả sự mở rộng cần thiết cũng được

đảm bảo, vì các khung nhìn có thể được định nghĩa không những trên các bảng gốc mà còn

trên các khung nhìn.

Sự khác nhau chủ yếu giữa một HQT CSDL suy diễn thực tế v à HQT CSDL quan

hệ ở chỗ các quy luật của phần tăng cường của CSDL, và các truy vấn của người dùng có

thể chứa đệ quy. Có thể nói đệ quy không phải bao giờ cũng tốt. Tuy nhiên khả năng định

nghĩa các quy luật đệ quy và các truy vấn cho phép giải quyết một các đơn giản các vấn đề

trong CSDL suy diễn. Mà trong CSDL quan hệ, đó là những vấn đề rất lớn (ví dụ?). Mặt

khác, chính tính năng đệ quy làm cho việc triển khai các HQT CSDL suy diễn rất phức tạp

và trong nhiều trường hợp giải quyết vấn đề không mấy hiệu quả.

Thường thì các ngôn ngữ truy vấn và định nghĩa phần tăng cường của CSDL có

tính luận lý, và vì thế các CSDL suy diễn rất hay được gọi là CSDL luận lý. Tồn tại mối

quan hệ trực tiếp của các CSDL suy diễn và các kho tri thức (knowledge bases). Phần tăng

cường của CSDL có thể xem như là một kho tri thức. Ngoài ra, rất khó đưa ra các ranh giới

giữa hai thực thể đó, và thực tiễn ý kiến chung nhất cho vấn đề đó vẫn chưa từng tồn tại.

Vậy mối quan hệ nào giữa các CSDL suy diễn và quan hệ, ngoài việc CSDL quan

hệ là trường hợp riêng phát sinh của CSDL suy diễn? Chủ yếu, đó là vì để triển khai một

CSDL suy diễn, một hệ thống quan hệ thường được sử dụng. Một hệ thống như thế thường

tham gia với tư cách là người lưu trữ các sự kiện và là người thực thi các truy vấn xuất hiện

trên cấp độ HQT CSDL suy diễn. Trong hoàn cảnh như thế, việc sử dụng các HQT CSDL

197

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

quan hệ có tác động rất lớn đến yêu cầu thực tiễn bài toán tối ưu toàn cục các truy vấn.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Trong chế độ sử dụng HQT CSDL quan hệ thông thường, các truy vấn thường

xuất hiện để xử lý theo từng truy vấn một, vì thế không có động cơ để tối ưu hoá chúng một

cách toàn cục (tối ưu hoá giữa các truy vấn). Trong quá trình thực thi một truy vấn của

người dùng, trong trường hợp chung HQT CSDL suy diễn phát sinh ra gói các truy vấn đến

HQT CSDL quan hệ, và các truy vấn đó có thể được tối ưu hoá cùng nhau.

Tất nhiên, trong trường hợp tổ hợp các quy luật của CSDL suy diễn trở nên quá

lớn, và không thể chứa nó trong RAM, xuất hiện vấn đề quản trị việc lưu trữ và truy cập

chúng trong bộ nhớ ngoài. Ở đây có thể áp dụng hệ thống quan hệ, nhưng không được hiệu

quả. Yêu cầu về các cấu trúc phức tạp hơn và các điều kiện khác của phép chọn được đưa

198

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

ra.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Phần VIII Phụ lục

A. MS SQL Server

SQL Server là một trong những giải pháp liên kết và tổng thể, đảm bảo cho người

dùng được làm việc an toàn, tin cậy và năng suất cao trong xử lý thông tin. SQL SERVER

cung cấp các công cụ quen thuộc và mạnh cho các chuyên gia công nghệ thông tin, cũng

như các nhân viên thông tin. SQL SERVER đơn giản hoá sự phức tạp trong xây dựng, phát

triển, quản trị và sử dụng dữ liệu. Ngoài ra, SQL SERVER còn cung cấp các công cụng

phân tích trên các nền (platform) khác nhau, từ các thiết bị di động cho đến các hệ thống

thông tin doanh nghiệp. Dựa trên tổ hợp lớn các công cụ, khả năng tương tác với các hệ

thống đã có và khả năng tự động hoá trong nhiều công việc điển hình, SQL SERVER 2005

cung cấp giải pháp hoàn chỉnh trong lĩnh vực lưu trữ dữ liệu cho doanh nghiệp ở mọi quy

mô.

SQL SERVER bao gồm các công cụ sau:

- Nhân SQL SERVER quản trị cơ sở dữ liệu quan hệ (Relational Databases

Engine – RDB Engine): Thành phần quan trọng nhất, chịu trách nhiệm lưu trữ và đảm bảo

an toàn dữ liệu, cũng như đảm bảo các thao tác dữ liệu. Có tính chất: an toàn, tin cậy, co

giản, năng suất cao và hỗ trợ cả dữ liệu có cấu trúc và phi cấu trúc (XML). SQL SERVER

2005 làm việc với dữ liệu được lưu trữ trong format XML ở cấp độ CSDL, có nghĩa là

người dùng có thể tạo CSDL, bảng,… XML. Dữ liệu trong format XML cũng có thể được

tổ chức chỉ mục để truy cập nhanh. Có thể dùng ngôn ngữ Xquery để truy vấn dữ liệu trực

tiếp trên XML, thậm chí trực qua trình duyệt internet.

- Dịch vụ sao lưu nhân bản (Replication Services): Công nghệ cho phép phân bổ

dữ liệu và các đối tượng tại các nút khác nhau, và tất nhiên, cho hỗ trợ đồng bộ dữ liệu. Sao

lưu nhân bản dữ liệu cho các ứng dụng phân tán v à di động xử lý dữ liệu, khả năng làm việc

song song co giản với các kho dữ liệu thứ phát cho các giải pháp báo cáo, và khả năng liên

kết với các hệ thống không đồng nhất (chẳng hạn với Oracle).

- Dịch vụ thông báo (Notification Services): Một cơ chế cho phép tổ chức

chuyển tải các thông báo bất kể loại nào cho những người dùng đã (được) đăng ký trên tất

cả các thể loại sự kiện. Các tính năng thông báo phát triển cho sự phát triển v à ứng dụng các

ứng dụng có khả năng cung ứng các cập nhật thông tin cá nhân hoá và kịp thời cho tập hợp

199

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

các thiết bị đang kết nối và thiết bị di động.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

- Dịch vụ liên kết (Integration Services): Các khả năng thu nhận, chuyển đổi và

tải cho các kho dữ liệu và các liên kết dữ liệu (trong quy mô doanh nghiệp). Thành phần này

cho phép xây dựng các giải pháp nhằm mục đích xuất (export) và nhập (import) dữ liệu giữa

các nguồn khác nhau. (Tìm hiểu: có thể làm việc trực tiếp với các DBMS khác như Oracle,

DB2, PostgreSQL,… hay không?). Dịch vụ này thay thế DTS (Data Transformation

Services) trước đây.

- Các dịch vụ phân tích (Analysis Services): Cho phép làm việc với các CSDL

OLAP. Xử lý phân tích trong thời gian thực (OLAP) cho các phân tích nhanh chóng và phức

tạp các tổ hợp dữ liệu lớn và hỗn hợp. Thường được sử dụng trong các lưu trữ đa chiều(?).

Công cụ Business Intelligence Development Studio cho phép tạo các giải pháp OLAP.

- Các dịch vụ báo cáo (Reporting Services): Giải pháp cho việc xây dựng, quản

trị và cung ứng như các báo biểu trên giấy truyền thống, cũng như các báo biểu tương tác

trên nền tảng công nghệ WWW trực tiếp cho người dùng. Trong SQL SERVER 2000, dịch

vụ này ra đời sau bản cuối cùng, nên người dùng phải cài đặt riêng sau khi cài SQL

SERVER 2000. Lập trình viên có thể nhúng dịch vụ này trực tiếp vào ứng dụng của mình.

- Tìm kiếm theo nội dung (Full-Text search): Cho phép tổ chức các chỉ mục tốc

độ cao nhằm mục đích tìm kiếm nhanh chóng trong các trường chứa văn bản.

- Dịch vụ WEB HTTP: Thành phần này cho phép tương tác với SQL SERVER

trực tiếp qua HTTP của nó chứ không cần phải có một HTTP server riêng. Cũng qua thành

phần này, người dùng có thể tạo các dịch vụ WEB khác nhau để làm việc trực tiếp với dữ

liệu trong format XML.

- SQL Service Broker: cho phép phát triển các ứng dụng phân tán trên nền tảng

trao đổi không đồng bộ các thông điệp. Số lượng máy khách lớn và số lượng truy vấn cũng

lớn, ngoài ra, trong giờ làm việc hành chính không phải ứng dụng khách nào cũng có đủ

thời gian chờ đợi cũng như có đủ năng lực để xử lý,… SQL Service Broker cho phép phát

triển dễ dàng các ứng dụng có chức kiểu như có thể đảm nhận các công việc đó như xử lý

thay cho ứng dụng khách vào những khoảng thời giản tải thấp. SQL Service Broker có thể

giúp đỡ như vậy là nhờ khả năng trao đổi thông điệp không dồng bộ giữa các ứng dụng phân

tán. Tất nhiên, khi đó nó đảm bảo sự tin cậy và đúng thứ tự trong việc trao đổi thông điệp.

- Các công cụ quản trị: SQL SERVER gồm cả các công cụ quản trị và cấu hình

CSDL, trong đó có MS Operation Manager (MOM) và MS Systems Management Server

200

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

(SMS). Các giao thức truy cập chuẩn đến dữ liệu giảm đáng kể thời gian cần thiết để liên

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

kết dữ liệu SQL SERVER với các hệ thống đã có. Ngoài ra, hỗ trợ dịch vụ Web được lồng

vào nhằm đảm bảo khả năng tương tác với các ứng dụng và nền khác. Enterprise Manager,

Query Analyzer. SQL Server Management Studio chứa tất cả các công cụ trên.

- Các công cụ phát triển: SQL SERVER đưa ra các công cụ phát triển liên kết

cho nhân của CSDL, thu nhận dữ liệu, truyền tải v à tải dữ liệu, thu nhận thông tin, OLAP và

báo cáo. Những công cụ phát triển này được liên kết mật thiết với MS Visual Std nhằm

cung ứng các khả năng xuyên suốt cho phát triển ứng dụng. Mỗi một phân hệ chính của

SQL SERVER cung ứng một mô hình đối tượng (COM?) và tổ hợp các API để mở rộng hệ

thống dữ liệu về mọi hướng theo nhu cầu của người dùng. Bây giờ các thủ tục, hàm, bẫy sự

kiện, kiểu dữ liệu,... có thể trược viết trực tiếp trên các ngôn ngữ C# hoặc VB.NET.

Nền SQL SERVER cung cấp cho các tổ chức ở mọi quy mô các ưu thế sau:

- Sử dụng các phần tử dữ liệu tích cực: ngoài khả năng làm việc an toàn và tin

cậy với CSDL cho các lĩnh vực công nghiệp và ứng dụng phân tích, SQL SERVER 2005

còn cho phép người dùng nhận được lợi ích lớn từ dữ liệu của họ bằng cách lồng vào các

chức năng như báo cáo thống kê, phân tích và thu nhận thông tin.

- Nâng cao năng suất: các chức năng và công cụ lồng bên trong cho phép cung

cấp những dữ liệu tích cực cho những nhân viên nào đó thuộc tất cả các cấp độ tổ chức để

họ có thể đưa ra những quyết định tốt nhất.

- Giảm độ phức tạp của CNTT: SQL SERVER 2005 đơn giản hoá việc phát

triển, ứng dụng và quản trị các lĩnh vực công nghiệp và ứng dụng phân tích bằng cách cung

ứng cho các lập trình viên một môi trường phát triển mềm dẻo và các công cụ liên kết, tự

động hoá quản trị cho các quản trị viên CSDL.

- Giảm trị giá chung cho việc sở hữu hệ thống (!!!).

A.1 Kiến trúc của SQL Server

Trong hình vẽ dưới đây là sơ đồ kiến trúc của SQL Server 2000. Dù các phân hệ,

mô-đun được phân bố khá khác so với mô hình truyền thống mà chúng ta đã xem xét trong

phần I. Nhưng nhìn chung, SQL Server 2000 vẫn có kiến trúc giống như mô hình truyền

thống với các phân hệ chính: phân hệ hỗ trợ ngôn ngữ CSDL quan hệ (Relational Engine),

phân hệ CSDL quan hệ và quản trị lưu trữ (Storage Engine). Phân hệ hỗ trợ ngôn ngữ CSDL

quan hệ cũng bao gồm các mô-đun chính có chức năng như trong kiến trúc truyền thống:

201

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

Parser (trình phân tích cú pháp), Optimizer (máy tối ưu hoá), Compilier (trình biên dịch).

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Phân hệ quản trị lưu trữ bao gồm các mô-đun thực hiện các chức năng của nhiều phân hệ

trong kiến trúc truyền thống: quản trị dữ liệu trong bộ nhớ ngoài (mô-đun File/Device

Manager, Page Manager/Text Manager), quản trị các bộ nhớ đệm RAM (Buffer Manager),

quản trị các giao tác (Transaction Manager, Lock Manager), ghi nhật ký và khôi phục CSDL

Hình VIII.1 Các thành phần chính của kiến trúc SQL Server

sau sự cố (Log/Recovery, Log Manager và Utilities).

- Net-Lib (hay còn gọi là Net-Library) trừu tượng một lớp (tầng) cho phép SQL

SERVER đọc và viết dữ liệu đến những giao thức mạng khác nhau, và mỗi giao thức như

thế có thể có một trình điều khiển (driver) chuyên biệt. Lớp Net-Lib tương đối dễ dàng hỗ

trợ nhiều giao thức mạng khác nhau không cần phải thay đổi mã nhân sever.

SQL Server dùng lớp Net-Lib trên cả máy chủ và máy khách. Điều đó cho phép

nó làm việc đồng thời với nhiều máy khách khác nhau trên các mạng khác nhau. MS

Windows NT/2000 và Windows 98 hỗ trợ các tiến trình sử dụng đồng thời nhiều giao thức

(multiple-protocols). Net-Lib làm việc theo cặp, nghĩa là mỗi cặp máy chủ và máy khách

phải sử dụng cùng một giao thức để làm việc với nhau. Ví dụ, máy khách dùng Named

Pipes để liên lạc, thì máy chủ phải “nghe” (listening, đợi chờ kết nối) trên Named Pipes Net-

Lib. Có thể dùng công cụ Client Network Utility ở phía máy khách hoặc lập tr ình viên quyết

định khi viết ứng dụng, và Server Network Utility để chọn thư viện cho kết nối giữa chủ và

202

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

khách.

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

SQL SERVER 2000 có hai Net-Lib chính (primary): Super Socket và Shared

Memory. TCP/IP, Named Pipes, IPX/SPX,… được cho là các Net-Lib thứ cấp (secondary).

OLE DB Provider for SQL Server, SQL Server ODBC driver, DB-Library và phân hệ

CSDL (DB Engine) liên lạc trực tiếp trên hai thư viện chính. Kết nối giữa các máy tính

được thực hiện trên Socket Net-Lib. Kết nối cục bộ trên cùng một máy tính giữa khách và

chủ được thực hiện trên thư viện Shared Memory Net-Library nếu nó được cho phép.

Super Socket Net-Library gồm hai thành phần chính:

+ Đường truyền (Communication path). Nếu máy khách được cấu hình để liên lạc

trên TCP/IP sockets hoặc NWLink IPX/SPX, thì Super Socket Net-Library sẽ gọi trực tiếp

Windows Socket 2 API để liên lạc giữa ứng dụng khách và SQL SERVER. Nếu máy khách

được cấu hình để liên lạc trên Named Pipes, Multiprotocol, AppleTalk, hoặc Banyan

VINES, thì Super Socket Net-Library sẽ gọi một Net-Lib tương ứng và hướng tất cả mọi

cuộc gọi Net-Lib đến thư viện đó.

+ Lớp mã hoá (Encription layer). Secure Socket Layer (SSL) được dùng để triển

khai mã hoá. Độ mạnh (level) mã hoá có thể là 40-bit hoặc 128-bit,… còn tuỳ thuộc vào

phiên bản của hệ điều hành trên máy chủ và máy khách. Mã hoá làm cho tốc độ xử lý và

truyền tải qua mạng chậm, nhưng trong thời buổi bùng nổ về vấn đề an ninh mạng thì điều

đó là cần thiết.

Các liên lạc Shared Memory Net-Library không dùng mã hoá, bởi vì vùng bộ

nhớ dùng chung để liên lạc ngoài SQL Server và ứng dụng khách, không có ứng dụng nào

có thể truy cập.

- Open Data Services

Open Data Service (ODS) có chức năng như là quản trị viên các khách cho SQL

SERVER trên nền tảng giao diện giữa Net-Lib của phần chủ và các ứng dụng máy chủ, bao

gồm cả SQL Server. ODS quản trị mạng: nghe các kết nối mới, xoá các kết nối bị hỏng, huỷ

bỏ các lệnh, định vị các dịch vụ phân luồng (threading) đến SQL Server, và trả các tập hợp

kết quả, các thông điệp và các giá trị trạng thái ngược lại cho khách.

- Relational Engine and the Storage Engine

Đây là hai phân hệ chính của SQL Server và tách biệt rõ ràng. Cách thức liên lạc

chính giữa chúng là qua OLE DB. Realtional Engine bao gồm những thành phần cần thiết

để phân tích từ loại và cú pháp (parser) cũng như máy tối ưu hoá các truy vấn (optimizer).

203

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

Relational Engine cũng quản trị việc thực thi các truy vấn bằng các yêu cầu dữ liệu từ

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

storage engine và xử lý các tập hợp bản ghi kết quả thu nhận được. Storage engine bao gồm

các thành phần cần thiết để truy cập và thao tác dữ liệu trên đĩa cũng như bộ nhớ trong

(RAM).

Parser (Phân tích cú pháp). Parser phải nắm rõ ngôn ngữ CSDL để phân tích từ

vựng và cú pháp các truy vấn cũng như lệnh của người dùng. Nó nắm bắt các sự kiện ngôn

ngữ được tạo ra (raise) bởi ODS. Nó kiểm tra cú pháp câu lệnh theo ngôn ngữ CSDL và

dịch câu lệnh TSQL vào một dạng biểu diễn bên trong để nó có thể thao tác trên đó. Dạng

biểu diễn bên trong này thường được gọi là cây truy vấn. Nếu nó không thể nhận biết được

lệnh T-SQL, thì nó sẽ thông báo về lỗi và xác định vị trí gặp lỗi.

Optimizer (Máy tối ưu hoá). Máy tối ưu hoá tiếp nhận cây truy vấn từ parser và

chuẩn bị cây truy vấn để thực thi. Mô-đun này biên dịch khối lệnh (batch), tối ưu truy vấn

và kiểm tra bảo mật.

SQL manager (Quản trị viên SQL). SQL manager chịu trách nhiệm với tất cả

những gì cần phải làm với các thủ tục lưu trữ (stored procedures) và các kế hoạch của

chúng. SQL manager xác định khi nào cần phải biên dịch lại một thủ tục lưu trữ trên cơ sở

những thay đổi trong lược đồ các đối tượng liên quan, và nó cũng quản trị việc cache kế

hoạch của các thủ tục để các tiến trình khác có thể sử dụng lại chúng.

Expression manager (Quản trị viên biểu thức). Thực hiện các tính toán biểu

thức, so sánh và chuyển đổi dữ liệu.

Query executor (Thực thi truy vấn). Query executor chạy kế hoạch thực thi mà

máy tối ưu hoá tạo ra, xử sự như là một điều vận viên tất cả các lệnh có trong kế hoạch thực

thi. Mô-đun này lặp lại mỗi bước lệnh của kế hoạch thực thi cho tới khi nào khối lệnh đó

hoàn thành. Rất nhiều lệnh đòi hỏi tương tác với engine lưu trữ để sửa đổi hoặc thêm mới,

thu nhận dữ liệu, cũng như quản trị các giao tác và phong toả các đối tượng.

Transaction Manager (Quản trị viên giao tác). Một trong những tính năng hạt

nhân của SQL Server là khả năng đảm bảo các giao tác tuân thủ các tính chất ACID

(Atomy, Consistency, Isolation, Durability) của chúng. ACID đảm bảo cho dữ liệu được

toàn vẹn lâu dài trong bộ nhớ ngoài, nhiều người dùng làm việc đồng thời trong hệ thống,…

Quản trị viên giao tác điều phối công việc của ghi nhật ký, khôi phục sau sự cố

và quản trị bộ đệm trong RAM. Quản trị viên giao tác phác hoạ các ranh giới để nhóm các

204

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

thao tác khác nhau thành một thao tác duy nhất. Trong trường hợp giao tác phân tán, nó phối

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

hợp với MS Distributed Transaction Service (DTS) bằng các cuộc gọi h àm từ xa của hệ điều

hành.

Ngoài ra, quản trị viên giao tác còn điều phối quản trị viên phong toả (lock

manager) khi các phong toả các đối tượng được thiết đặt và giải phóng, tuỳ thuộc vào cấp

độ cô lập đang có hiệu lực trong hệ thống. Trong SQL Server cũng sử dụng bốn cấp độ cô

lập theo chuẩn SQL là: Uncommitted Read (còn gọi là "dirty read"), Committed Read,

Repeatable Read, and Serializable. Có thể nói, các hành vi của quản trị viên giao tác phụ

thuộc vào cấp độ cô lập đang có hiệu lực trong SQL Server.

Lock manager (Quản trị viên các phong toả). Phong toả các đối tượng là chức

năng cốt yếu của một HQT CSDL nhiều người dùng như SQL Server. Quản trị viên phong

toả quản trị đồng thời nhiều (giao tác của nhiều) ng ười dùng khác nhau và đảm bảo các giao

tác tuân thủ các tính chất của cấp độ cô lập đang có hiệu lực trong hệ thống.

Quản trị viên phong toả có hai hệ thống phong toả riêng biệt. Hệ thống thứ nhất

cho phép phong toả các bản ghi, trang dữ liệu, trang lá của hệ thống chỉ mục, và các bảng.

Hệ thống thứ hai được dùng bên trong cho các dữ liệu hạn chế cho hệ thống; nó bảo vệ trang

gốc và các trang nhánh của hệ thống chỉ mục khi các chỉ mục được sử dụng. SQL SERVER

phân biệt hai hệ thống nhằm nâng cao năng suất của hệ thống.

Các quản trị viên khác. SQL Server bao gồm cả các quản trị viên kiểm soát các

tiện ích khác như bulk load (tải khối lượng lớn), các lệnh DBCC (Database Console

Commands), các thao tác backup và restore, và Virtual Device Interface (VDI – cho phép

ISVs ghi các sao lưu và khôi phục, cũng như truy cập cấu trúc dữ liệu trực tiếp, không qua

relational engine). Ngoài ra còn có các quản trị viên kiểm soát các thao tác sắp xếp, kiểm

soát các lưu trữ vật lý,…

A.2 Cài đặt và khôi phục trong SQL Server

B. Oracle

B.1. Kiến trúc của Oracle

205

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

B.2. Cài đặt và khôi phục trong Oracle

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

C. Các hình vẽ Hình II.1 Cấu trúc của trang dữ liệu ..................................................................................... 20

Hình II.2 Cấu trúc điển hình của trang bộ nhớ ..................................................................... 23

Hình II.3 Cấu trúc điển hình của trang (lá) bộ nhớ ............................................................... 23

Hình II.4 Vấn đề mất kết quả cập nhật dữ liệu ..................................................................... 66

Hình II.5 Vấn đề phụ thuộc chưa cố định ............................................................................. 67

Hình II.6 Đọc không lặp lại .................................................................................................. 68

Hình II.7 Các phần tử ảo ....................................................................................................... 69

Hình II.8 Phân tích xung khắc thực chất ............................................................................... 70

Hình II.9 Vấn đề mất kết quả cập nhật ................................................................................. 77

Hình II.10 Vấn đề phụ thuộc không được ghi lại ................................................................. 78

Hình II.11 Phân tích xung khắc - Đọc không lặp lại ............................................................ 79

Hình II.12 Xung khắc trong phân tích - Các phần tử ảo ....................................................... 80

Hình II.13 Xung khắc trong phân tích - Xung khắc thực chất trong phân tích .................... 81

Hình II.14 Ví dụ tình huống bế tắc ....................................................................................... 82

Hình II.15 Biểu đồ độ mạnh của các phong toả .................................................................... 86

Hình II.16 Phong toả đặc biệt có chủ định ............................................................................ 88

Hình II.17 Cơ chế tách phiên bản dữ liệu ............................................................................. 91

Hình II.18 Ý tưởng chung của cơ chế nền .......................................................................... 102

Hình IV.1 Nguyên tắc ứng dụng KNT ................................................................................ 120

Hình VI.1 Phân mảnh ngang và phân mảnh dọc ................................................................ 144

Hình VI.2 Giao thức cố định hai pha - Two-Phases Commit Protocol .............................. 160

Hình VI.3 Các phiên bản của giao thức 2PC ...................................................................... 161

Hình VI.4 Giao thức cố định 3 pha - 3PC ........................................................................... 167

206

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

Hình VIII.1 Các thành phần chính của kiến trúc SQL Server ............................................ 202

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

D. Các bảng

Bảng II.1 Các thuộc tính của hàng hoá .................................................................................. 48

Bảng II.2 Ma trận tương dung của S- và X-phong toả .......................................................... 76

Bảng II.3 Bảng tính tương dung mở rộng của các phong toả ................................................ 85

207

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

Bảng II.4 Các mức độ cô lập của chuẩn SQL ........................................................................ 93

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – Bản Nháp 30-08-08

Tài liệu tham khảo

1. Marcilina S.G., etc. Microsoft SQL Server 2000 Administrator’s Companion. 2. Ramakrishnan Raghu, Gehrke Johannes - Database Management Systems, 2nd ed. 3. Thomas M. Connolly, Carolyn E. Begg. Databases systems. A Practical Approach to Design, Implementation, and Management. 3ed.

4. Kevin Hoffman, Lonny Kruger. Microsoft Visual C# .NET 2003 Unleashed. 5. Kalen Delaney. Inside Microsoft SQL Server 2000.

6. Kyte T. - Expert Oracle Database Architecture[c] 9i and 10g Programming Techniques and Solutions. 2005.

7. Kyte Thomas. Expert one-on-one Oracle 8. Oracle 10g manual. 9. MS SQL Server 2005 manual. 10. С.Д. Кузнецов. Основы современных баз данных. 11. Шнитман В. З. Серверы корпоративных баз данных. 12. Пушников А.Ю. Введение в системы управления базами данных. 13. Грабер М. Справочное руководство по SQL. - М.: Лори, 1997. - 291 с. 14. Eswaran K.P., Gray J.N., Lorie R.A., Traiger I.L. The Notions of Consistency and Predicate Locks in a Data Base System //CACM. - 1976. - V.19, p11. 15. Mullin J.K. Optimal Semijoins for Distributed Database Systems. Electrical and Computer Engineering, May 1990 (Vol. 16, No. 5), pp. 558-560.

208

http://elearning.due.edu.vn/course/view.php?id=7 Nguyễn Trần Quốc Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn}

16. Combining semijoins and hash-semijoins in a distributed queryprocessing strategy. Morrissey, J.M.; Ogunbadejo, O. Electrical and Computer Engineering, 1999 IEEE Canadian Conference on Vol. 1, Issue , 1999 pp. 122 – 126.