Các lịch biểu theothứ tự, không theothứ tự và lịch biểu có thứ tự

Một phần của tài liệu Xử lý truy vấn và quản lý giao tác trong cơ sở dữ liệu (Trang 69 - 73)

tự xung đột

Lịch biểu A và B trong hình 2.5(a) và (b) đƣợc gọi là theo thứ tự bởi vì các thao tác của mỗi giao tác đƣợc thực thi liên tiếp mà không có bất kỳ các thao tác của các giao tác khác xen kẽ. Trong một lịch biểu có thứ tự, bản thân các giao tác đƣợc thực hiện theo một trật tự: T1 rồi đến T2 trong hình 2.5(a) và T2 rồi đến T1 trong hình 2.5(b). Các lịch biểu C và D trong hình 2.5(c) đƣợc gọi là không theo thứ tự bởi vì có sự xen kẽ thao thao tác từ 2 giao tác [4, 6].

T1 T2

read_item(X);

T1 T2

Hình 2.5. Các ví dụ về các lịch biểu theo thứ tự và không theo thứ tự thực hiện các giao tác T1 và T2.

(a) Lịch biểu theo thứ tự a: T1 rồi đến T2. (b) Lịch biểu theothứ tự b: T2 rồi đến T1. (c),(d) Hai lịch biểu không theo thứ tự.

T1 T2 read_item(X); X:=X-N; read_item(X); X:=X+M; write_item(X); read_item(Y); write_item(X); Y:=Y+N; write_item(Y); Lịch biểu c (c) T1 T2 read_item(X); X:=X-N; write_item(X); read_item(X); X:=X+M; write_item(X); read_item(Y); Y:=Y+N; write_item(Y); Lịch biểu d (d)

Một lịch biểu S là theo thứ tự nếu đối với mỗi giao tác T tham gia trong lịch biểu, toàn bộ thao tác của T đƣợc thực thi liên tiếp. Ngƣợc lại thì lịch biểu đƣợc coi là không theo thứ tự. Do đó, trong một lịch biểu theo thứ tự, tại một thời điểm chỉ một giao tác hoạt động đến khi xác nhận (hoặc hủy bỏ) rồi mới bắt đầu việc thực thi giao tác kế tiếp. Không có sự xen kẽ xảy ra trong một lịch biểu theo thứ tự. Nếu mọi giao tác đƣợc thực hiện từ đầu đến cuối mà không có sự xen kẽ từ các thao tác của giao tác khác thì kết quả cuối cùng chính xác trên cơ sở dữ liệu. Nhƣợc điểm với lịch biểu theo thứ tự là chúng hạn chế tính đồng thời hoặc xen kẽ của các thao tác. Trong một lịch biểu theo thứ tự, nếu một giao tác chờ một thao tác I/O hoàn thành, thì không thể chuyển bộ xử lý CPU sang giao tác khác, do đó lãng phí thời gian xử lý CPU. Thêm vào đó, nếu giao tác T khá dài, các giao tác khác phải đợi T hoàn thành tất cả các hoạt động của nó trƣớc khi bắt đầu. Do đó các lịch biểu theo thứ tự đƣợc xem không chấp nhận đƣợc trong thực tế.

Xét các lịch biểu trong hình 2.6 và giả sử giá trị khởi tạo của các mục cơ sở dữ liệu X=90 và Y=90 và N=3, M=2. Sau khi thực thi các giao tác T1 và T2, kết quả là X=89 và Y=93. Nhƣ vậy là thực thi lịch biểu theo thứ tự A hoặc B đều đƣa ra các kết quả đúng đắn. Xét các lịch biểu không theo thứ tự C và D ở hình 2.5. Lịch biểu C sẽ tƣơng ứng với hình 2.3(a) đƣa ra kết quả X=92 và Y=93, trong lịch biểu C giá trị X là không đúng, trong khi lịch biểu D đƣa ra kết quả đúng.

Lịch biểu C đƣa ra kết quả không đúng vì giao tác T2 đọc giá trị của X trƣớc khi giá trị này đƣợc thay đổi bởi giao tác T1, do đó chỉ ảnh hƣởng của T2 lên X đƣợc phản ánh trong cơ sở dữ liệu. Ảnh hƣởng của T1 trên X bị mất, dẫn tới kết quả không chính xác cho mục X. Tuy nhiên, một số lịch biểu không theo thứ tự vẫn đƣa ra kết quả đúng, nhƣ lịch biểu D.

Nói rằng một lịch biểu S không theo thứ tự là có thứ tự tƣơng đƣơng nếu lịch biểu đó cho kết quả đúng, bởi vì nó tƣơng đƣơng với một lịch biểu có thứ tự. Nhƣng khi nào thì 2 lịch biểu đƣợc xem là tƣơng đƣơng?. Có một số cách để định nghĩa tính tƣơng đƣơng của lịch biểu. Cách đơn giản nhất định

nghĩa tính tƣơng đƣơng lịch biểu bao hàm việc so sánh ảnh hƣởng của các lịch biểu lên cơ sơ dữ liệu. Hai lịch biểu đƣợc gọi là tƣơng đƣơng kết quả nếu chúng đƣa ra cùng trạng thái cuối cùng của một cơ sở dữ liệu. Tuy nhiên, hai lịch biểu khác nhau có thể ngẫu nhiên đƣa ra trạng thái cuối cùng nhƣ nhau. Ví dụ, trong hình 2.6, các lịch biểu S1 và S2 sẽ đƣa ra trạng thái cơ sở dữ liệu cuối cùng là nhƣ nhau nếu chúng thực thi trên một cơ sở dữ liệu với một giá trị khởi tạo của X=100; nhƣng đối với các giá trị khởi tạo khác của X, các lịch biểu này không phải là tƣơng đƣơng kết quả. Thêm vào đó, 2 lịch biểu thực thi các giao tác khác nhau, do đó chúng không nên đƣợc xem là tƣơng đƣơng. Do đó, riêng tính tƣơng đƣơng kết quả không thể đƣợc sử dụng để định nghĩa sự tƣơng đƣơng của các lịch biểu. Cách tiếp cận an toàn nhất và phổ biến nhất để định nghĩa tính tƣơng đƣơng lịch biểu là không đƣa ra bất kỳ giả thiết nào về các loại hoạt động đƣợc bao hàm trong các giao tác. Đối với 2 lịch biểu là tƣơng đƣơng, thì thứ tự các hoạt động tác động lên cùng mục dữ liệu là nhƣ nhau [1, 2, 6]. Hai định nghĩa tính tƣơng đƣơng của lịch biểu đƣợc sử dụng chung là: tƣơng đƣơng xung đột và tƣơng đƣơng khung nhìn. Tính tƣơng đƣơng xung đột đƣợc sử dụng phổ biến hơn.

Hai lịch biểu đƣợc xem là tƣơng đƣơng xung đột nếu thứ tự của bất kỳ 2 hoạt động xung đột nào là nhƣ nhau trong cả hai lịch biểu. Nếu hai thao tác là xung đột đƣợc áp dụng trong các trật tự khác nhau của 2 lịch biểu thì ảnh hƣởng của nó lên cơ sở dữ liệu hoặc trên các giao tác khác trong lịch biểu có thể khác nhau, và do đó lịch biểu là không tƣơng đƣơng xung đột. Ví dụ, nếu

S1 S2

Read(X) Read(X)

X:= X+10 X:= X*1,1

Write(X) Write(X)

Hình 2.6 Hai lịch biểu là tương đương kết quả đối với giá trị khởi tạo của X=100 nhưng thực tế chúng không phải tương đương kết quả

một thao tác đọc và ghi xảy ra theo thứ tự r1(X), w2(X) trong lịch biểu S1, và theo thứ tự ngƣợc lại w2(X), r1(X) trong lịch biểu S2, thao tác r(X) tiếp theo trong 2 lịch biểu sẽ đọc các giá trị khác nhau; hoặc nếu thao tác cuối cùng ghi mục X trong các lịch biểu thì giá trị cuối cùng của mục X trong cơ sở dữ liệu sẽ khác nhau [6].

Lịch biểu S đƣợc xem là có thứ tự xung đột nếu nó là tƣơng đƣơng xung đột với một số lịch biểu có thứ tự S‟. Trong trƣờng hợp này, có thể sắp xếp lại các thao tác không xung đột trong S cho đến khi tạo đƣợc một lịch biểu theo thứ tự tƣơng đƣơng S‟. Theo định nghĩa này, lịch biểu D của hình 2.5(c) là tƣơng đƣơng với lịch biểu theo thứ tự A của hình 2.5(a). Trong cả 2 lịch biểu này, read_item(X) của T2 đọc giá trị của X đƣợc ghi bởi T1, trong khi các thao tác read_item khác đọc các giá trị từ trạng thái cơ sở dữ liệu khởi tạo. Thêm vào đó, T1 là giao tác cuối cùng để ghi Y và T2 là giao tác cuối cùng để ghi X trong cả 2 lịch biểu. Bởi vì A là lịch biểu theo thứ tự và lịch biểu D là tƣơng đƣơng với A, D là nột lịch biểu theo thứ tự xung đột. Chú ý rằng các thao tác r1(Y) và w1(Y) của lịch biểu D không xung đột với các thao tác r2(X) và w2(X), vì chúng truy cập đến các mục dữ liệu khác nhau. Do đó, có thể chuyển r1(Y), w1(Y) trƣớc r2(X), w2(X), dẫn đến lịch biểu theo thứ tự tƣơng đƣơng T1, T2.

Lịch biểu C của hình 2.5(c) là không tƣơng đƣơng với cả 2 lịch biểu theo thứ tự A và B, do đó chúng không theo thứ tự xung đột. Sắp xếp lại thứ tự của các thao tác của lịch biểu C để tìm ra lỗi, vì r2(X) và w1(X) xung đột, nghĩa là không thể chuyển r2(X) xuống để đƣợc một lịch biểu theo tứ tự tƣơng đƣơng T1, T2. Tƣơng tự, bởi vì w1(X) và w2(X) xung đột, nên không thể chuyển w2(X) xuống để thu đƣợc một lịch biểu theo thứ tự tƣơng tƣơng T2, T1.

Một phần của tài liệu Xử lý truy vấn và quản lý giao tác trong cơ sở dữ liệu (Trang 69 - 73)