Professional Documents
Culture Documents
3 Chuong3 Giaotac
3 Chuong3 Giaotac
2
Giao tác
3
Giới thiệu giao tác (transaction)
• Hai yêu cầu cơ bản của ứng dụng khai thác CSDL trong thực tế:
• Cho phép nhiều người dùng đồng thời khai thác CSDL nhưng phải giải quyết
được các tranh chấp.
• Khi có sự cố phải giải quyết được vấn đề về nhất quán dữ liệu.
• Một số ví dụ:
• Hệ thống giao dịch ở ngân hàng
• Hệ thống đặt vé máy bay
• Hệ thống quản lý học sinh
• …
4
Ví dụ 1
• Hệ thống đặt vé máy bay
• Hàng trăm hoạt động mỗi giây có thể được thực hiện trong cơ sở dữ liệu
• Hoạt động đặt vé đến từ nhiều nguồn
• Các máy giao dịch tự động
• Các máy tính bàn của đại lý
• Nhân viên hàng không
• Khách hàng
• Hai hoạt động đặt vé nào đó có thể tác động lên cùng chuyến bay và chồng
chéo về thời gian.
5
Ví dụ 1
• Hệ thống đặt vé máy bay
Khách hàng 1 Khách hàng 2
6
Ví dụ 1
• Điều gì xảy ra nếu dữ liệu không được ràng buộc?
• Hai thao tác có thể được thực hiện thành công
• Nhưng kết quả toàn cục sẽ không chính xác
• Cả hai khách hàng tin rằng họ đã đặt ghế thành công
• DBMS là một hệ thống đa người dùng
• Có nhiều thao tác truy cập đến cùng một đơn vị dữ liệu tại một thời điểm
• Nhiều thao tác được thực hiện đồng thời Đảm bảo ràng buộc
• Để giải quyết vấn đề: tuần tự (serialize) thực hiện hai giao dịch
Đợi nhau -> Không gặp vấn đề dữ liệu -> Vấn đề chọn, xếp hàng -> tốn thời gian , không sử dụng hết băng
thông
7
Tính khả tuần tự (Serializability)
• Việc thực hiện các hành động trên cùng một cơ sở dữ liệu là tuần tự
(serial)
• Nếu một hoạt động phải kết thúc hoàn toàn trước khi một hoạt động khác được
bắt đầu.
• Việc thực thi là khả tuần tự (serializable)
• Nếu các hành động thực hiện như thể chúng được chạy nối tiếp mặc dù có sự
chồng lấp về mặt thời gian.
VD: Chưa xong 1 cái mà đã thực hiện cái tiếp theo, mong muốn kết quả vẫn như thực hiện tuần tự -> Khả tuần tự
8
Thảo luận
• Nếu hai hành động được thực hiện tuần tự
• Yêu cầu của một khách hàng xảy ra trước
• Khách hàng này thấy một ghế trống và đặt chỗ cho ghế này
• Yêu cầu của khách hàng khác bắt đầu, và nhìn thấy ghế đã được đặt
• Điều quan trọng
• Khách hàng: người có được chỗ
• Cơ sở dữ liệu: một ghế chỉ được đặt một lần
9
Ví dụ 2
10
Thảo luận
• Giải pháp: thao tác ở bước thứ 3 và 4 trong giao dịch trên không thể
tách rời
• Hoặc cả hai thao tác được thực hiện và hoàn tất
• Hoặc không thao tác nào được thực hiện
• Nếu thao tác ở bước 3 đã xong và thao tác ở 1. Đọc số dư của tài khoản A
bước 4 bị lỗi thì thao tác ở bước 3 phải hủy bỏ
• Sự kết hợp ở bước thứ 3 và 4 cần phải 2. Kiểm tra (số dư của A >= số tiền cần rút)
đảm bảo được tính nguyên tố (atomic) 3. Cộng tiền vào tài khoản B
11
Tính nguyên tố
Các thao tác phải được thực hiện thành công hết hoặc thất bại hết
Atomic 12
Thảo luận
• Làm thế nào để giải quyết vấn đề về tuần tự hóa (serialization) và tính
nguyên tố (atomicity)?
• Giải pháp
• Gom nhóm những hành động (operation) vào trong các giao tác (transaction)
13
Giao tác (transaction)
14
Định nghĩa
không phân chia nhỏ được nữa
• Giao tác: là một đơn vị xử lý nguyên tố gồm một chuỗi các hành
động tương tác lên cơ sở dữ liệu
• Nguyên tố: không thể phân chia được nữa. Các hành động trong một giao tác
hoặc là thực hiện được tất cả hoặc là không thực hiện được bất cứ hành động
nào.
15
Các thao tác của giao tác
• Buffer manager
• Input & Output
• Transaction
• Read & Write Read(X,t)
Đưa dữ liệu từ ổ đĩa vào buffer
Input(X)
t X
Write(X,t) X
Output(X)
Ghi vào ổ đĩa
Buffer
16
Ví dụ
• Giả sử cơ sở dữ liệu có 2 đơn vị dữ liệu A và B với ràng buộc A=B
(trong mọi trường hợp)
• Giao tác T muốn thực hiện
• A = A*2
• B = B*2
• T được biểu diễn như sau:
• Read(A,t); t=t*2; Write(A,t)
• Read(B,t); t=t*2; Write(B,t)
17
Ví dụ (tt)
Đưa vào mem A, xong gán t = 8
Read(A,t) 8 8 8 8
t=t*2 16 8 8 8
Write(A,t) 16 16 8 8
Read(B,t) 8 16 8 8 8
t=t*2 16 16 8 8 8
Write(B,t) 16 16 16 8 8
Output(A) 16 16 16 16 8
Output(B) 16 16 16 16 16
18
Tính chất ACID của giao tác
• Nguyên tố (Atomicity)
• Nhất quán (Consistency)
• Cô lập (Isolation)
• Bền vững (Durability)
19
Tính chất ACID của giao tác
• Nguyên tố (Atomicity) T: Read(A,t); Chuyển khoản từ A sang B
• Hoặc là toàn bộ hoạt động t:=t-50;
của giao tác được phản ánh Write(A,t);
Read(B,t);
đúng đắn trong CSDL t:=t+50;
• Hoặc không có hoạt động nào cả Write(B,t);
• Nếu T không bao giờ bắt đầu thực hiện hoặc T được đảm
bảo phải hoàn tất thì trạng thái không nhất quán sẽ không
xuất hiện
20
Tính chất ACID của giao tác
• Nguyên tố (Atomicity)
• Nhất quán (Consistency) T: Read(A,t);
t:=t-50;
• Một giao tác được thực hiện Write(A,t);
độc lập với các giao tác khác Read(B,t);
t:=t+50;
xử lý đồng thời với nó để bảo Write(B,t);
đảm tính nhất quán cho CSDL
• Tổng A+B là không đổi sau khi thực thi T
• Cô lập (Isolation) • Nếu CSDL nhất quán trước khi T được thực hiện thì sau
khi T hoàn tất CSDL vẫn còn nhất quán
• Bền vững (Durability)
Chuyển đổi từ tình trạng nhất quán này sang tình trạng nhất quán khác
21
Tính chất ACID của giao tác
• Nguyên tố (Atomicity)
• Nhất quán (Consistency) T: Read(A,t);
t:=t-50;
• Cô lập (Isolation) T' Write(A,t);
Read(B,t);
• Mỗi giao tác không biết về các t:=t+50;
giao tác khác đang thực hiện Write(B,t);
đồng thời trong hệ thống
• Giả sử có 1 giao tác T' thực hiện phép toán A+B và chen
• Bền vững (Durability) vào giữa thời gian thực hiện của T
• T' kết thúc: A+B=50+200=250
• T kết thúc: A+B=50+250=300
• Trạng thái của các giao tác thực thi đồng thời phải tương
đương với trạng thái của các giao tác thực hiện tuần tự
nào đó
Bộ trung gian điều tiết, không liên quan tới các giao tác khác
22
Tính chất ACID của giao tác
• Nguyên tố (Atomicity)
• Nhất quán (Consistency)
• Cô lập (Isolation)
• Bền vững (Durability)
• Sau khi một giao tác thực hiện thành công, những thay đổi mà giao tác này đã
thực hiện đối với cơ sở dữ liệu vẫn tồn tại, ngay cả khi có lỗi hệ thống xảy ra
Database bị lỗi -> Dữ liệu vẫn tồn tại
23
Trạng thái của giao tác
thực hiện xong mà vẫn chưa
commit mà bị lỗi thì vẫn bị hủy
bỏ
partially
committed
committed
active
24
Trạng thái của giao tác
Một giao tác phải thuộc một trong các trạng thái sau:
• Active
• Ngay khi bắt đầu thực hiện thao tác đọc/ghi
• Partially committed
• Sau khi lệnh cuối cùng của giao tác được thực hiện
• Failed
• Sau khi phát hiện giao tác không thể thực hiện tiếp
• Aborted
• Sau khi giao tác được quay lui và CSDL được phục hồi về trạng thái bắt đầu của giao
tác
• Bắt đầu lại giao tác (nếu có thể)
• Hủy giao tác
• Committed
• Hoàn tất thành công
25
Bộ lập lịch
26
Giới thiệu
• Thực hiện tuần tự (Serial)
• Các thao tác khi thực hiện mà không giao nhau về mặt thời gian
• Tại một thời điểm, một giao tác chỉ có thể bắt đầu khi giao tác trước nó hoàn
tất.
• Thực hiện đồng thời (Concurrence)
• Các giao tác thực hiện cùng lúc
• Các giao tác có thể truy xuất cùng một dữ liệu
27
Tại sao phải kiểm soát việc thực hiện đồng thời
• Tận dụng nguồn tài nguyên và thông lượng (throughput)
• Xử lý trên ổ đĩa và trên CPU có thể được thực hiện song song
• Trong lúc một giao tác thực hiện đọc/ghi trên ổ đĩa, các giao tác khác thực hiện
tính toán trên CPU
• Giảm thời gian chờ
• Giảm thiểu các giao tác ngắn phải chờ đợi các giao tác dài
• Khi các giao tác truy cập đến dữ liệu khác nhau chúng cần phải được thực hiện
đồng thời
28
Kiểm soát đồng thời (Concurrency control)
• Là quá trình đảm bảo rằng các giao tác duy trì tính nhất quán khi thực
hiện đồng thời
• Các giao tác
• Nhiều hành động (action) được gom lại trong một giao tác
• Tính chính xác của trạng thái cơ sở dữ liệu
• Chuyển từ trạng thái nhất quán này sang trạng thái nhất quán khác
29
Bộ lập lịch (Scheduler)
• Là một thành phần của DBMS có nhiệm vụ tạo một lịch thao tác để
thực hiện n giao tác xử lý đồng thời
• Chức năng
• Đọc/ghi những yêu cầu từ các giao tác
• Thực thi các yêu cầu ở buffer hoặc trì hoãn thực hiện các yêu cầu
30
Lịch thao tác (Schedule)
• Một lịch thao tác là một chuỗi các hành động được sắp xếp theo thời
gian của một hoặc nhiều giao tác
• Các hành động của một giao tác trong lịch phải giống như thứ tự mà chúng
xuất hiện trong chính giao tác đó
lịch tuần tự Kết quả tương đương với lịch tuần tự
1
a
2
b a
1 x 1
a x
2 2
y y
3
3 b b
z 4
x z
4
y 3
z 4 31
Lịch thao tác (Schedule)
• Các loại lịch thao tác:
• Lịch tuần tự (Serial)
• Lịch khả tuần tự (Serializable)
• Conflict-Serializability
• View-Serializability
32
Ví dụ
• Cho 2 giao tác T1 và T2 như sau:
T1 T2
Read(A,t) Read(A,s)
t:=t+100 s:=s*2
Write(A,t) Write(A,s)
Read(B,t) Read(B,s)
t:=t+100 s:=s*2
Write(B,t) Write(B,s)
33
Lịch tuần tự (Serial schedule)
• Một lịch S được gọi là tuần tự nếu các hành động của các giao tác
Ti được thực hiện liên tiếp nhau, không có sự giao nhau về mặt
thời gian.
S T1
T2
Thời gian T3
………
Tn
34
Ví dụ - Lịch tuần tự
S1 T1 T2 A B S2 T1 T2 A B
Read(A,t) 25 25 Read(A,s) 25 25
t:=t+100 s:=s*2
Write(A,t) 125 Write(A,s) 50
Read(B,t) Read(B,s)
t:=t+100 s:=s*2
Write(B,t) 125 Write(B,s) 50
Read(A,s) Read(A,t)
s:=s*2 t:=t+100
Write(A,s) 250 Write(A,t) 150
Read(B,s) Read(B,t)
s:=s*2 t:=t+100
Write(B,s) 250 Write(B,t) 150
Còn lịch nào khác cũng đảm bảo duy trì tính nhất quán không? 35
Lịch khả tuần tự (Serializable schedule)
• Một lịch S được lập từ n giao tác T1, T2, …, Tn xử lý đồng thời được
gọi là lịch khả tuần tự nếu nó cho cùng kết quả với 1 lịch tuần tự nào
đó được lập từ n giao tác này
T1
T2
T3
Thời gian
T4
36
Ví dụ
S3 T1 T2 A B
25 25
• Trước khi S3 thực hiện
Read(A,t)
• A=B=c
t:=t+100
Write(A,t) 125
• c là hằng số
Read(A,s) • Sau khi S3 hoàn tất
s:=s*2 • A=(c+100)*2
Write(A,s) 250 • B=(c+100)*2
Read(B,t)
t:=t+100
• CSDL ở trạng thái nhất quán
Write(B,t) 125 • S3 khả tuần tự
Read(B,s)
s:=s*2
Write(B,s) 250 37
Ví dụ
S4 T1 T2 A B
25 25
• Trước khi S4 thực hiện
Read(A,t)
• A=B=c
t:=t+100
Write(A,t) 125
• c là hằng số
Read(A,s) • Sau khi S4 hoàn tất
s:=s*2 • A=(c+100)*2
Write(A,s) 250 • B=(c*2)+100
Read(B,s)
s:=s*2
• CSDL ở trạng thái không nhất
Write(B,s) 50
quán
Read(B,t) • S4 không khả tuần tự
t:=t+100
Write(B,t) 150 38
Ví dụ
S5 T1 T2 A B
25 25
• Sau khi S5 hoàn tất
Read(A,t)
• A và B bằng nhau
t:=t+100
Write(A,t) 125 • CSDL ở trạng thái nhất quán
Read(A,s) • S5 khả tuần tự, do kết quả giống
s:=s*1 với lịch tuần tự (T1, T2) hoặc (T2,
Write(A,s) 125 T1)
Read(B,s)
s:=s*1 Không cần quan tâm *1 hay *2 (chi tiết thực hiện bên trong) , chỉ cần quan tâm
đọc ghi -> Không khả tuần tự
Write(B,s) 50
Read(B,t)
t:=t+100
39
Write(B,t) 125
Thảo luận
• Thật là phi thực tế khi
• Một bộ lập lịch phải quan tâm đến chi tiết tính toán được thực hiện bởi các
giao tác
• Nhưng
• Bộ lập lịch phải biết các thao tác đọc/ghi của giao tác
• Những đơn vị dữ liệu nào được giao tác đọc
• Những đơn vị dữ liệu nào có thể bị thay đổi
• Để đơn giản công việc cho bộ lập lịch
• Không cần xem xét chi tiết các hành động tính toán cục bộ
• Chỉ cần thể hiện đọc/ghi được thực hiện bởi giao tác
40
Ký hiệu
• Hành động đọc và ghi
• ri(X) hoặc wi(X)
• Giao tác Ti đọc hoặc ghi đơn vị dữ liệu X Không quan tâm đến đọc ghi giá trị gì
• Giao tác Ti
• Là một chuỗi các hành động có chỉ số i
• Bộ lập lịch S của tập giao tác T
• Là sự xen kẽ các hành động của giao tác Ti trong T sao cho
• Các hành động của Ti xuất hiện trong S phải có cùng thứ tự với các hành động ở trong Ti
41
Ví dụ
• T1: r1(A);w1(A);r1(B);w1(B);
• T2: r2(A);w2(A);r2(B);w2(B);
S T1 T2
r(A)
w(A)
r(A)
w(A) S: r1(A);w1(A);r2(A);w2(A);r1(B);w1(B);r2(B);w2(B);
r(B)
w(B)
r(B)
w(B)
42
Xung đột (conflict)-không xung đột (not conflict)
• Ý tưởng: xét hai hành động nối tiếp trong lịch giao tác (của hai giao
tác khác nhau). Khi hoán đổi (swap) vị trí của hai hành động đó dẫn
đến một trong hai hệ quả:
• Nếu hoạt động của cả hai giao tác T T'
43
Xung đột (conflict)-không xung đột (not conflict)
• Cho lịch S gồm 2 giao tác Ti và Tj ,i≠j. Xét các trường hợp
• ri(X) ; rj(Y)
• Không bao giờ có xung đột, ngay cả khi X=Y
• Hai hành động này không làm thay đổi giá trị của X và Y
• ri(X) ; wj(Y) read , write
• Không xung đột khi X#Y
Tj ghi Y không làm thay đổi dữ liệu Ti đọc X
Ti đọc X không ảnh hưởng đến giá trị Tj ghi Y
• Xung đột khi X=Y Cùng 1 block
• wi(X) ; rj(Y) write read
• Không xung đột khi X#Y, Xung đột khi X=Y
• wi(X) ; wj(Y) write write
45
Ví dụ
• Hoán đổi mà trên cùng đơn vị dữ liệu mà có write -> Xung đột
S T1 T2 T1 T2 S' T1 T2
Write(B) Write(A)
Write(B)
Read(B) Read(B) Read(B)
Write(B) Write(B)
Write(B) 46
Conflict-equivalence - Conflict-serializability
• Định nghĩa:
• S và S' được gọi là conflict-equivalent Bước hoán đổi mà không xung đột -> Được equivalent với cái trước đó.
• Nếu S và S' có thể được biến đổi qua lại bằng cách hoán đổi các hành động liền kề không
xung đột nhau.
• S được gọi là conflict-serializable
• Nếu S conflict-equivalent với một lịch tuần tự nào đó Qua từng bước biến đổi equivalent cho ra được lịch tuần tự
-> Lịch đó gọi là confliect serializable
• Chú ý:
• Conflict-serializability → serializability
• Conflict-serializability ↚ serializability
Write(B)
48
Ví dụ
• Lịch sau có conflict-serializable không?
Có hành động ghi -> sẽ có xung đột
S1 T1 T2 S2 T1 T2 S3 T1 T2
Read(A) Read(A) Read(A)
Read(A) Read(A) Read(A)
Read(A) Write(A) Write(B)
Write(A) Read(A) Write(B)
S1 khả tuần tự theo dạng conflict S3 khả tuần tự
Biến đổi ra được lịch tuần tự -> ser... T1 thực hiện xong mới tới T2 thực hiện -> Tuần tự
49
Ví dụ
• Cho 2 giao tác T1:Write(Y); Read(X);
Kiểm tra ghi cuối cùng và đọc cuối cùng
T2:Write(Y); Write(Y);
• Từ hai giao tác trên, có thể lập được 2 lịch S và S' như sau
S T1 T2 S’ T1 T2
Write(Y)y = 8 Write(Y)
KQ cuối cùng X dược đọc Kết quả cuối cùng tương
của T1 Read(X) Write(Y) tự S
y=7
Write(Y) Write(Y)
Write(Y) Kết quả cuối cùng là w(Y) của T2 Read(X)
y=6
Serial Serializable Khả tuần tự: Kết quả lịch này bằng kết
Tuần tự quả lịch tuần tự nào đó
nhưng không conflict-serializable
50
Ví dụ
• Cho 3 giao tác:
• T1: Write(Y); Write(X); T2: Write(Y); Write(X); T3: Write(X)
Từ 3 giao tác trên, có thể có 2 lịch S và S' như sau
S T1 T2 T3 S’ T1 T2 T3
Write(Y) Write(Y)
Write(X) Write(Y)
Write(Y) Write(X)
Write(X) Write(X)
Write(X) Write(X)
Serial
Serializable
nhưng không conflict-serializable
Conflict-serializability ↚ serializability 51
Kiểm tra Conflict Serializability
• Cho lịch S: hỏi S có conflict-serializable không?
• Ý tưởng
• Thứ tự các giao tác ở trong lịch S' phải giống thứ tự các hành động xung đột
trong lịch S
S T1 T2 S' T1 T2
Read(A) Read(A)
Write(A) T1-> T2 Write(A)
Read(A) Read(B)
Write(A) Write(B)
Read(B) Read(A)
Write(B) T1->T2 Write(A)
Read(B) Read(B)
Write(B) Write(B) 52
Thảo luận
• Thứ tự của các hành động xung đột trong S cũng chính là thứ tự của
các “giao tác thực hiện các hành động này” trong lịch tuần tự
• Các cặp hành động xung đột đặt ra các ràng buộc thứ tự giao tác
• Nếu các ràng buộc mâu thuẫn nhau không thể tìm được lịch tuần tự
conflict-equivalent
• Ngược lại tìm được
53
Kiểm tra Conflict Serializability
Cho lịch S có 2 giao tác T1 và T2: hành động A1 ∈ T1 , A2 ∈ T2
• T1 thực hiện trước T2 (T1 <S T2) nếu:
• A1 thực hiện trước A2 trong S (A1 và A2 không nhất thiết phải liên tiếp nhau)
• A1 và A2 là hai hành động xung đột
• (nghĩa là: A1 và A2 cùng thao tác lên một đơn vị dữ liệu và A1, A2 có ít nhất một hành động ghi
(write))
54
Đồ thị trình tự (Precedence Graph)
• Cho lịch S gồm các hành động T1,T2,…, Tn
• Đồ thị trình tự của S, ký hiệu là P(S) có:
• Đỉnh là các giao tác Ti của S. i
• Cung đi từ đỉnh i đến đỉnh j nếu Ti <STj i i
55
Đồ thị trình tự (Precedence Graph)
Ví dụ
• S: r2(A); r1(B); w2(A); r3(A); w1(B); w3(A); r2(B); w2(B);
• r2(A) trước w3(A) - hoặc w2(A) trước r3(A)…
• r1(B) trước w2(B) - hoặc w1(B) trước r2(B)… S T1 T2 T3
Read(A)
T1 <S T2 T2 <S T3 Read(B)
Write(A)
1 2 3
Read(A)
Write(B)
Write(A)
Read(B)
Write(B)
56
Đồ thị trình tự (Precedence Graph)
• Bổ đề
• Nếu S và S’ conflict-equivalent thì P(S)=P(S’)
• Chứng minh
• Giả sử P(S) # P(S’)
• ∃Ti sao cho Ti → Tj có trong S và không có trong S’
• ⇒ S = … pi (A)… qj (A)…
S’ = … qj (A)… pi (A)…
• pi (A) và qj (A) là xung đột
• ⇒ S, S’ không conflict-equivalent
57
Đồ thị trình tự (Precedence Graph)
• Định lý
• S conflict-serializable khi và chỉ khi P(S) không có chu trình
• Chứng minh: S conflict-serializable ⇒ P(S) không có chu trình
• S conflict-serializable
• ⇒ ∃S’ sao cho: S và S’ conflict-equivalent
• ⇒ P(S) = P(S’)
• S’ là lịch tuần tự ⇒ P(S’) không có chu trình
• ⇒ P(S) không có chu trình
58
Đồ thị trình tự (Precedence Graph)
• Định lý
• S conflict-serializable khi và chỉ khi P(S) không có chu trình
• Chứng minh: S conflict-serializable ⇐ P(S) không có chu trình
• P(S) không có chu trình
• Sắp xếp lại S như sau
• Chọn giao tác Ti không có cung nào đi đến giao tác này
• Di chuyển Ti lên đầu lịch S
S=(các hành động của Ti) (các hành động của n-1 giao tác còn lại)
• Xem xét phần đuôi của S
• P(đuôi của S) giống P(S) ngoại trừ đỉnh Ti và các cung đi ra từ giao tác Ti bị mất
• Mà P(S) không có chu trình ⇒ P(đuôi của S) không có chu trình
• Lặp lại quá trình này cho đến khi S biến thành một lịch tuần tự
• ⇒ S conflict-serializable
59
Ví dụ
Ví dụ
• S: r2(A); r1(B); w2(A); r3(A); w1(B); w3(A); r2(B); w2(B);
S T1 T2 T3
1 2 3
r2(A)
r1(B)
w3(A)
r2(B)
w2(B) 60
Ví dụ
• Ví dụ:
• S: r2(A); r1(B); w2(A); r2(B); r3(A); w1(B); w3(A); w2(B);
• r2(A) trước w3(A) – hoặc w2(A) trước r3(A) S T1 T2 T3
• r1(B) trước w2(B) – hoặc w1(B) trước w2(B) r2(A)
• r2(B) trước w1(B) r1(B)
w2(A)
r2(B)
r3(A)
T1 <S T2 T2 <S T3 w1(B)
1 2 3 w3(A)
w2(B)
P(S) có chu trình
T2 <S T1 S không conflict-serializable
61
Ví dụ
• Cho lịch S:
w1(A); r2(A); r3(A); w4 (A); T1 T2 T3 T4
S
Write1(A)
• Vẽ P(S) Read2(A)
Read3(A)
Write4(A)
62
Ví dụ
• Cho lịch S:
w1(A); r2(A); r3(A); w4 (A); T1 T2 T3 T4
S
Write1(A)
Read2(A)
Read3(A)
Write4(A)
1 2 3 4
63
Ví dụ
• Cho lịch S:
w3(A); w2(C); r1(A); w1(B); r1(C); w2(A); r4(A); w4(D);
T1 T2 T3 T4
• Vẽ P(S) S
Write(A)
• S có conflict-serializable không? Write(C)
Read(A)
Write(B)
Read(C)
Write(A)
Read(A)
Write(D)
64
Ví dụ
• Cho lịch S:
w3(A); w2(C); r1(A); w1(B); r1(C); w2(A); r4(A); w4(D);
S T1 T2 T3 T4
Write(A)
1 2 3 4 Write(C)
Read(A)
Write(B)
Read(C)
P(S) có chu trình Write(A)
S không conflict-serializable Read(A)
Write(D)
65
Bài tập
Cho các lịch giao tác:
a. r1(A); r2(A); r3(B); w1(A); r2(C); r2(B); w2(B); w1(C);
b. r1(A); w1(B); r2(B); w2(C); r3(C); w3(A);
c. w3(A); r1(A); w1(B); r2(B); w2(C); r3(C);
d. r1(A); r2(A); w1(B); w2(B); r1(B); r2(B); w2(C); w1(D);
e. r1(A); r2(A); r1(B); r2(B); r3(A); r4(B); w1(A); w2(B);
Với mỗi lịch:
• Vẽ P(S)
• S có conflict-serializable không? Nếu có, tìm tất cả các lịch tuần tự
ứng với S.
66
View-Serializability
• Xét lịch S
T1 T2 T3 1 2
S
Read(A)
Write(A)
Write(A)
Write(A)
3
2
S T1 T2 T3 S’ T1 T2 T3
Read(A) Read(A)
Write(A) Write(A)
Write(A) Write(A)
Write(A) Write(A)
Không conflict-serializable Serial
68
View-Serializability
• Ý tưởng: S V T U
S Tb T1 T2 T3 Tf S' Tb T1 T2 T3 Tf
w(A) w(A)
r(A) r(A)
view-equivalent
w(A) w(A)
r(A) w(A)
w(A) r(A)
w(A) w(A)
r(A) r(A)
71
View-Serializability
• Định nghĩa
• Một lịch thao tác S là view-serializable nếu S là view-equivalent với một lịch
thao tác tuần tự nào đó
S Tb T1 T2 T3 Tf S' Tb T1 T2 T3 Tf
w(A) w(A)
r(A) r(A)
view-equivalent
w(A) w(A)
r(A) w(A)
w(A) r(A)
w(A) w(A)
r(A) r(A)
view-serializable Serial
72
Kiểm tra View Serializability
• Cho lịch S
• Thêm một giao tác cuối Tf vào trong S sao cho Tf thực hiện việc đọc hết tất
cả các đơn vị dữ liệu ở trong S
• S = … w1(A)…w1(B)………w2(A); rf(A); rf(B);
• Thêm một giao tác đầu tiên Tb vào trong S sao cho Tb thực hiện việc ghi giá
trị ban đầu cho tất cả các đơn vị dữ liệu
• S = wb(A); wb(B)… r1(A)…r1(B)………w2(A)…
73
Kiểm tra View Serializability
• Vẽ đồ thị trình tự cho S, ký hiệu PL(S) - Polygraph
• Đỉnh là các giao tác Ti (bao gồm Tb và Tf)
• Cung
• 1. Nếu giá trị mà ri(X) đọc do wj(X) ghi (…wj(X) … ri(X)…) thì vẽ cung đi từ Tj đến Ti
X
j i
• 2. Với mỗi cung wj(X) … ri(X), xét wk(X) khác Tb sao cho Tk không chèn vào giữa Tj và
Ti
(2a) Nếu Tj ≠ Tb và Ti ≠ Tf thì vẽ cung Tk → Tj và Ti → Tk (sau đó chọn một cung sao
cho đồ thị không có chu trình
(2b) Nếu Tj = Tb thì vẽ cung Ti → Tk
(2c) Nếu Ti = Tf thì vẽ cung Tk → Tj
74
Ví dụ 1
S T1 T2 T3
S Tb T1 T2 T3 Tf
Read(A) Write(A)
Write(A) Read(A)
Write(A) Write(A)
Write(A) Write(A)
Write(A)
Read(A)
75
Ví dụ 1
S Tb T1 T2 T3 Tf
Write(A)
Read(A)
Write(A)
Write(A)
Write(A)
Read(A)
A A
b 1 2 3 f
76
Ví dụ 1
• Xét cung TbT1 dựa trên đơn vị dữ liệu A S
• Write (A) xuất hiện ở hai giao tác Tb T1 T2 T3 Tf
khác là T2, T3. Write(A)
• T2, T3 không được phép chen vào giữa Read(A)
Tb và T1 Write(A)
• T2, T3 không thể đứng trước Tb Write(A)
T2, T3 ở sau T1 Write(A)
• Vẽ cung từ T1 đến T2 và T1 đến T3 Read(A)
A
A A A
b 1 2 3 f
77
Ví dụ 1
• Xét cung T3Tf dựa trên đơn vị dữ liệu A S
• Write (A) xuất hiện ở hai giao tác Tb T1 T2 T3 Tf
khác là T1, T2 (không xét write ở Tb ) . Write(A)
• T1,T2 không được phép chen vào giữa Read(A)
T3 và Tf Write(A)
• T1,T2 không thể đứng sau Tf Write(A)
T1,T2 ở trước T3 Write(A)
• Vẽ cung từ T1 đến T3 và T2 đến T3 Read(A)
A
A A A A
b 1 2 3 f
A
78
Ví dụ 1
S T1 T2 T3
b 1 2 3 f Read(A)
Write(A)
Write(A)
Write(A)
Loại bỏ các cung giống nhau
S' T1 T2 T3
Read(A)
b 1 2 3 f Write(A)
Write(A)
PL(S) không có chu trình
Write(A)
S view-serializable theo thứ tự T1, T2, T3
79
Ví dụ 2
• Cho lịch S T1 T2 T3
S
• Vẽ PL(S) Read(A)
• S có view-serializable không Write(A)
Read(A)
Write(A)
Write(A)
80
Ví dụ 2
T1 T2 T3 S Tb T1 T2 T3 Tf
S
Read(A) Write(A)
Write(A) Read(A)
Read(A) Write(A)
Write(A) Read(A)
Write(A) Write(A)
Write(A)
Read(A)
A A A
b 1 2 3 f
81
Ví dụ 2
• Xét cung TbT1 dựa trên đơn vị dữ liệu A S
• Write (A) xuất hiện ở hai giao tác Tb T1 T2 T3 Tf
khác là T2, T3. Write(A)
• T2, T3 không được phép chen vào giữa Read(A)
Tb và T1 Write(A)
• T2, T3 không thể đứng trước Tb Read(A)
T2, T3 ở sau T1 Write(A)
• Vẽ cung từ T1 đến T2 và T1 đến T3 Write(A)
Read(A)
A
A A A A
b 1 2 3 f
82
Ví dụ 2
• Xét cung T2T3dựa trên đơn vị dữ liệu A S
• Write (A) xuất hiện ở giao tác Tb T1 T2 T3 Tf
khác là T1(không xét Write(A) ở Tb) Write(A)
• T1 không được phép chen vào giữa Read(A)
T2 và T3 Write(A)
T1 có thể đứng trước T2 hoặc sau T3 Read(A)
• Vẽ 2 cung từ T1 đến T2 và từ T3 đến T1 Write(A)
(sau khi vẽ xong chỉ được chọn một trong hai cung) Write(A)
Read(A)
A
A A A A
b 1 2 3 f
A
A
83
Ví dụ 2
• Xét cung T3Tf dựa trên đơn vị dữ liệu A S
• Write(A) xuất hiện ở hai giao tác Tb T1 T2 T3 Tf
khác: T1 ,T2 (không xét Write(A) ở Tb) Write(A)
• T1 , T2 không được phép chen vào giữa Read(A)
T3 và Tf Write(A)
• T1 , T2 không thể đứng sau Tf Read(A)
T1 , T2 chỉ có thể đứng trước T3 Write(A)
• Vẽ cung từ T1 đến T3 và từ T2 đến T3 Write(A)
Read(A)
A
A A A A
b 1 2 3 f
A A
A
A 84
Ví dụ 2 S
T1 T2 T3
Read(A)
b 1 2 3 f
Write(A)
Read(A)
Write(A)
Write(A)
S'
T1 T2 T3
b 1 2 3 f
Read(A)
Write(A)
Trong hai cung màu đỏ trên, bỏ một cung để đồ thị không có chu trình Write(A)
Chọn bỏ cung từ T3 sang T1.
Gộp các cung giống nhau Read(A)
PL(S) không chu trình Write(A)
S view-serializable theo thứ tự T1, T2, T3
85
Ví dụ 3
• Cho lịch S S T1 T2 T3
• Vẽ PL(S) Read(B)
Write(A)
• S có view-serializable không?
Read(A)
Write(B)
Read(A)
Write(B)
Write(B)
86
Ví dụ 3
S' Tb T1 T2 T3 Tf
S T1 T2 T3
Write(A)
Read(B)
Write(B)
Write(A)
Read(B)
Read(A)
Write(A)
Write(B)
Read(A)
Read(A) Write(B)
Write(B) Read(A)
Write(B) Write(B)
Write(B)
Read(A)
Read(B)
87
Ví dụ 3
S' Tb T1 T2 T3 Tf
Write(A)
Write(B)
Read(B)
Write(A)
Read(A)
Write(B)
Read(A)
Write(B)
Write(B)
A A B
b 1 2 3 f Read(A)
Read(B)
A
B
88
Ví dụ 3
• Xét cung TbT2 dựa trên đơn vị dữ liệu B
• Write(B) chỉ xuất hiện ở T1 và T3 S' Tb T1 T2 T3 Tf
Write(A)
• T1 và T3 chỉ có thể ở sau T2
Write(B)
⇒ Vẽ cung T2 sang T1 và T2 sang T3 Read(B)
Write(A)
Read(A)
Write(B)
Read(A)
Write(B)
B Write(B)
B
A A B
b 1 2 3 f Read(A)
Read(B)
A
B
89
Ví dụ 3
• Xét cung T2T1 dựa trên đơn vị dữ liệu A S'
• Không xét Write(A) ở Tb Tb T1 T2 T3 Tf
Write(A)
⇒ không vẽ thêm cung
Write(B)
• Tương tự đối với cung T2T3 Read(B)
90
Ví dụ 3
• Xét cung T3Tf dựa trên đơn vị dữ liệu B S'
• Chỉ xét Write(B) xuất hiện ở T1 và T2 Tb T1 T2 T3 Tf
Write(A)
• T1 và T2 chỉ có thể ở trước T3
Write(B)
⇒ Vẽ cung T1 sang T3 và cung T2 sang T3 Read(B)
Write(A)
Read(A)
Write(B)
Read(A)
B
B Write(B)
B Write(B)
B
A A B
b 1 2 3 f Read(A)
Read(B)
A
B
91
Ví dụ 3 S T1 T2 T3
Read(B)
Write(A)
Read(A)
Write(B)
b 1 2 3 f
Read(A)
Write(B)
Write(B)
S' T1 T2 T3
Read(B)
b 1 2 3 f Write(A)
Write(B)
Read(A)
Gộp các cung giống nhau Write(B)
PL(S) không có chu trình Read(A)
S view-serializable theo thứ tự T2, T1, T3
Write(B)
92
Ví dụ 4
• Cho lịch S S T1 T2 T3
• Vẽ PL(S) W(A)
• S có view-serializable không? R(B)
R(B)
R(A)
W(B)
W(B)
93
Ví dụ 4
B
A S Tb T1 T2 T3 Tf
W(A)
b 1 A 2 3 f W(B)
B W(A)
B R(B)
R(B)
R(A)
W(B)
W(B)
R(A)
R(B)
94
Ví dụ 4
B
A S Tb T1 T2 T3 Tf
B W(A)
b 1 A 2 3 f W(B)
B W(A)
B R(B)
R(B)
R(A)
W(B)
W(B)
R(A)
R(B)
95
Ví dụ 4
B
A S Tb T1 T2 T3 Tf
B W(A)
B
b 1 A 2 B 3 f W(B)
B W(A)
B R(B)
R(B)
R(A)
W(B)
W(B)
R(A)
R(B)
96
Ví dụ 4
B
A S Tb T1 T2 T3 Tf
B W(A)
B
b 1 A 2 B 3 f W(B)
B W(A)
B R(B)
R(B)
• Không đổi R(A)
W(B)
W(B)
R(A)
R(B)
97
Ví dụ 4
B
A S Tb T1 T2 T3 Tf
B W(A)
B
b 1 A 2 B 3 f W(B)
B W(A)
B R(B)
R(B)
• Không đổi R(A)
W(B)
W(B)
R(A)
R(B)
98
Ví dụ 4
B
A S Tb T1 T2 T3 Tf
B B
W(A)
B
b 1 A 2 B 3 f W(B)
B W(A)
B R(B)
R(B)
R(A)
W(B)
W(B)
R(A)
R(B)
99
Ví dụ 4
S T1 T2 T3
W(A)
b 1 2 3 f R(B)
R(B)
R(A)
W(B)
W(B)
100
Ví dụ 5
• Cho lịch S
• Vẽ PL(S) S T1 T2 T3
• S có view-serializable không? W(A)
W(A)
R(B)
R(A)
W(B)
W(B)
101
Ví dụ 5
B
A S Tb T1 T2 T3 Tf
W(A)
W(B)
A W(A)
b 1 2 3 f
W(A)
B
R(B)
R(A)
W(B)
W(B)
R(A)
R(B)
102
Ví dụ 5
B
A S Tb T1 T2 T3 Tf
W(A)
W(B)
A W(A)
b 1 2 B 3 f
B W(A)
B
R(B)
R(A)
W(B)
W(B)
R(A)
R(B)
103
Ví dụ 5
B
A S Tb T1 T2 T3 Tf
W(A)
A
W(B)
A W(A)
b 1 2 B 3 f
B A W(A)
B
R(B)
R(A)
W(B)
W(B)
R(A)
R(B)
104
Ví dụ 5
B
A S Tb T1 T2 T3 Tf
W(A)
A A
W(B)
A W(A)
b 1 2 B 3 f
B A W(A)
B
R(B)
R(A)
W(B)
W(B)
R(A)
R(B)
105
Ví dụ 5
B
A S Tb T1 T2 T3 Tf
W(A)
A A
W(B)
B
A W(A)
b 1 2 B 3 f
B A W(A)
B
R(B)
R(A)
W(B)
W(B)
R(A)
R(B)
106
Ví dụ 5
B
A S Tb T1 T2 T3 Tf
W(A)
A A
W(B)
B
A W(A)
b 1 2 B 3 f
B A W(A)
B
R(B)
Loại bỏ một trong hai cung cung kẻ sọc. R(A)
Nhận thấy loại cung nào cũng được W(B)
W(B)
R(A)
R(B)
107
Ví dụ 5
S T1 T2 T3
W(A)
W(A)
b 1 2 3 f
R(B)
R(A)
W(B)
W(B)
b 1 2 3 f
109