VỀ MỘT SỐ GIẢI THUẬT
Cấu trúc dữ liệu được dùng trong giải thuật định nghĩa một bộ 5 Op : 〈Type = {BT;R;W;A;C};
arg : Data item; val : Value; tid : Định danh giao dịch ; res : Result〉.
Ý nghĩa : với một thao tác o:Op,
o.Type∈ {BT;R;W;A;C} đặc tả kiểu, ở đây BT = Begin transaction, R = Read, W = Write, A
= Abort, and C = Commit,
arg hạng mục dữ liệu mà thao tác truy nhập (reads / writes; với các thao tác khác thì null)
val đc dùng trong trường hợp Read/Write đặc tả giá trị đọc hoặc ghi cho arg, khác thì null
tid : định danh giao dịch
res : chỉ thị mã đầy đủ của thao tác yêu cầu của DP, có thể chưa cần khảo sát.
1- GIẢI THUẬT 2 PL TẬP TRUNG
Hình 1- .Cấu trúc truyền thông của khóa 2 pha tập trung
Site phát giao dịch=bộ điều phối
Bộ quản trị khóa=site trung tâm
Bộ xử lý dữ liệu=các site thành viên
Giải thuật 1.1: Quản trị khóa 2 pha tập trung (C2PL-TM)
Input: msg : một thông điệp
begin
repeat
Chờ một msg ;
switch msg do
case các thao tác giao dịch
cho op là thao tác ;
if op.Type = BT then DP(op) {gọi DP với thao tác }
else C2PL-LM(op) {gọi LM với thao tác}
case trả lời của Lock Manager (LM) {khóa yêu cầu được gán hay được giải phóng }
if yêu cầu khóa then
Tìm site lưu hạng mục dữ liệu được yêu cầu ;
DPSi(op) {gọi DP ở site Si với thao tác}
else {phải là thông điệp giải phóng khóa }
Thông báo cho người dùng về việc kết thúc giao dịch
case Trả lời của Data Processor {thông điệp hoàn tất thao tác }
switch transaction operation do
cho op là thao tác ;
case R
trả về op:val (giá trị hạng mục dữ liệu) đến ứng dụng
case W
thông báo ứng dụng việc ghi đã xong
case C
if thông điệp commit đã được nhận từ mọi thành viên
then
thông báo ứng dụng việc thành công của giao dịch;
C2PL-LM(op) {cần giải phóng các khóa }
else {chờ cho tới khi các thông điệp commit đến từ mọi thành
viên }
ghi lại việc đến của thông điệp commit
case A
thông báo ứng dụng việc thoát hoàn tất ;
C2PL-LM(op) {cần giải phóng các khóa }
until 1==1;
end
Giải thuật 1.2: Quản trị khóa 2 pha tập trung (C2PL-LM)
Input: op : Op
begin
switch op.Type do
case R or W {yêu cầu khóa; xem liệu nó có thể được gán không }
tìm đơn vị khóa lu sao cho op:arg ⊆ lu ;
if lu đã được khóa hoặc chế độ khóa của lu tương thích với op:Type
then
thiết lập khóa trên lu trong chế độ tương ứng thừa lệnh của giao dịch
op:tid ;
gửi “ Khóa được gán” đến điều phối TM của giao dịch
else
đặt op vào hàng đợi cho lu
case C or A
{các khóa cần đươc giải phóng }
foreach lu được giao dịch giữ do
giải phóng khóa trên lu được giao dịch ;
if có các thao tác chờ trên hàng đợi cho lu
then
tìm thao tác O đầu tiên trên hàng đơi ;
thiết lập khóa trên lu thừa lệnh của O ;
gửi “Khóa được gán “ đến điều phối TM của giao dịch O:tid
gửi “Khóa được giải phóng” đến điều phối TM của giao dịch
end
Giải thuật 1.3: Bộ xử lý dữ liệu- Data Processor (DP)
Input: op : Op
begin
switch op.Type do {Kiểm tra kiểu thao tác }
case BT {chưa đi sâu vào chi tiết } do kiểm soát
case R
op:res READ(op:arg) ; {thao tác đọc CSDL }
op:res “Đã đọc xong”
case W {ghi val vào hạng mục dữ liệu arg }
WRITE(op:arg;op:val) ;
op:res “Đã ghi xong”
case C
COMMIT ; {vận hành COMMIT }
op:res “Đã chuyển giao”
case A
ABORT ; {vận hành ABORT }
op:res“Đã thoát”
return op
end
2- GIẢI THUẬT 2 PL PHÂN TÁN
Hình 2 -. Cấu trúc truyền thông của khóa 2 pha phân tán
Giải thuật 2.1 : Quản trị giao dich 2 pha phân tán (C2PL-TM)
Input: msg : một thông điệp
begin
repeat
chờ một msg ;
switch msg do
case transaction operation
PS-LM(op) {gọi Quản trị khóa lịch biểu thành viên với thao tác }
case Data Processor response {Thông điệp hoàn tất tháo tác}
switch transaction operation do
op là thao tác ;
case R
return op:val (data item value) đến ứng dụng
case W
thông báo ứng dụng việc hoàn tất thao tác ghi.
case C
if commit msg đã nhận được từ mọi thành viên
then
thông báo ứng dụng về việc hoàn tất giao dịch;
PS-LM(op) {cần giải phóng khóa }
else {chờ tới khi thông điệp commit đến từ mọi thành viên }
ghi lại việc tới của các thông điệp commit
case A
Thông báo ứng dụng về việc hoàn tất abort ;
PS-LM(op) {cần giải phóng các khóa }
until 1==1 ;
end
Giải thuật 2.2: Quản trị khóa pha phân tán (PS-LM) (Participal Scheduler)
Input: op : Op
begin
switch op.Type do
case BT : DP(op) {Gọi DP với thao tác }
case R hay W {yêu cầu khóa; xét xem liệu có được gán không }
tìm đơn vị khóa lu sao cho op:arg ⊆ lu ;
if lu được khóa hoặc chế độ khóa của lu tương thích với op:Type
then
thiết lập khóa lu trong chế độ tương ứng với giao dịch op:tid ;
gửi “khóa được gán-Lock granted” đến DP của giao dịch
else
đặt op vào hang đợi cho lu
case C or A
{các khóa cần được giải phóng}
foreach lu được giữ bởi giao dịch do
giải phóng khóa trên lu được giao dịch giữ;
if có một thao tác chờ trong hàng đợi lu
then
Tìm thao tác O đầu tiên trên hàng đợi;
Thiết lập một khóa trên lu thừa lệnh của O;
Gửi “Khóa đã được gán-Lock granted” đến DP của giao dịch O:tid
Gửi “ Các khóa được giải phóng-Locks released” đến DP của giao dịch
end
Giải thuật 2.3: Giải thuật bộ xử lý dữ liệu phân tán (DP)
Input: op : Op
begin
switch op.Type do {kiểm tra kiểu thao tác}
case BT {các chi tiết chưa khảo sát sâu} do kiểm soát thủ tục
case R
op:res READ(op:arg) ; {thao tác đọc CSDL- READ}
op:res “Đã đọc”
case W {ghi val của hạng mục dữ liệu vào arg của CSDL }
WRITE(op:arg;op:val) ;
op:res “Đã ghi”
case C
COMMIT ; {vận hành COMMIT }
op:res “Đã chuyển giao ”
case A
ABORT ; {vận hành ABORT }
op:res“Đã thoát”
return op
end