Khóa là một phần không thể thiếu để duy trì kiểm soát đồng thời trong DBMS. Một giao dịch trong bất kỳ hệ thống nào triển khai kiểm soát đồng thời dựa trên khóa không thể đọc hoặc viết một câu lệnh cho đến khi nó đạt được các khóa cần thiết.
Có hai loại khóa trong các giao thức dựa trên Khóa. Đây là:
- Khóa nhị phân - Chúng chỉ có thể ở một trong hai trạng thái, khóa hoặc mở khóa.
- Khóa dùng chung / dành riêng - Các khóa dùng chung được nhận khi chỉ thực hiện thao tác đọc. Khóa dùng chung có thể được chia sẻ giữa nhiều giao dịch vì không có dữ liệu nào bị thay đổi. Các khóa độc quyền được sử dụng khi thao tác ghi được thực hiện. Chỉ giao dịch giữ khóa riêng mới được phép thay đổi giá trị dữ liệu.
Các giao thức khóa khác nhau là -
Giao thức khóa đơn giản
Khóa có được bởi giao dịch trên giá trị dữ liệu trước khi thao tác ghi được thực hiện. Sau khi thao tác ghi, khóa có thể được giải phóng. Một ví dụ về Giao thức khóa đơn giản là:
T1 | T2 |
---|---|
R (A) | |
| R (A) |
Khóa (B) | |
R (B) | |
W (B) | |
Mở khóa (B) | |
| Khóa (C) |
| R (C) |
| W (C) |
| Mở khóa (C) |
Cam kết | |
| Cam kết |
Có hai giao dịch T1 và T2 được hiển thị ở trên. Không có khóa cần thiết cho hoạt động đọc nhưng trước khi hoạt động ghi, mỗi giao dịch này sẽ có một khóa và giải phóng nó sau đó.
Giao thức khóa hai pha
Giao thức khóa hai giai đoạn có hai giai đoạn, đó là giai đoạn phát triển và giai đoạn thu hẹp. Giao dịch chỉ có thể nhận được khóa khi nó đang trong giai đoạn phát triển. Khi bước vào giai đoạn co lại, nó có thể giải phóng các ổ khóa đã có trước đó nhưng không thể có được các ổ khóa mới. Các khóa độc quyền được đại diện bởi X và các khóa chia sẻ được đại diện bởi S. Một ví dụ về giao thức khóa hai pha là -
T1 | T2 |
---|---|
S (A) | |
R (A) | |
| S (A) |
| R (A) |
X (B) | |
R (B) | |
W (B) | |
| X (C) |
| R (C) |
| W (C) |
| Mở khóa (C) |
| Mở khóa (A) |
Mở khóa (B) | |
Mở khóa (A) | |
Cam kết | |
| Cam kết |
Trong ví dụ trên, T1 và T2 chia sẻ biến A bằng cách sử dụng khóa chia sẻ vì chỉ hoạt động đọc được thực hiện trên A. T1 có được một khóa độc quyền trên B cho hoạt động ghi và giải phóng nó ngay sau đó. T2 làm tương tự với C.
Giao thức khóa hai pha nghiêm ngặt
Giao thức khóa hai pha nghiêm ngặt tương tự như giao thức khóa hai pha. Sự khác biệt duy nhất là trong giao thức 2PL nghiêm ngặt, tất cả các khóa độc quyền mà giao thức có được cần phải được giữ cho đến khi giao thức cam kết hoặc hủy bỏ. Ví dụ về giao thức khóa hai pha Nghiêm ngặt là:
T1 | T2 |
---|---|
S (A) | |
R (A) | |
| S (A) |
| R (A) |
X (B) | |
R (B) | |
W (B) | |
| X (C) |
| R (C) |
| W (C) |
| Mở khóa (A) |
Mở khóa (A) | |
Cam kết | |
Mở khóa (B) | |
| Cam kết |
| Mở khóa (C) |
Trong ví dụ trên, T1 và T2 chia sẻ biến A bằng cách sử dụng khóa dùng chung vì chỉ hoạt động đọc được thực hiện trên A. T1 nhận được khóa riêng trên B cho hoạt động ghi và T2 làm tương tự với C. Các khóa riêng chỉ được giải phóng sau khi các giao dịch đã cam kết. Tuy nhiên, không có ràng buộc nào như vậy đối với các khóa dùng chung.
Giao thức khóa hai pha nghiêm ngặt
Giao thức khóa hai pha nghiêm ngặt chỉ là sự mở rộng của giao thức khóa hai pha và giao thức khóa hai pha nghiêm ngặt. Ở đây, tất cả các khóa do một giao dịch nắm giữ, dù là chia sẻ hay độc quyền, chỉ được giải phóng sau khi giao dịch đó được thực hiện hoặc hủy bỏ. Một ví dụ về giao thức khóa hai giai đoạn nghiêm ngặt là:
T1 | T2 |
---|---|
S (A) | |
R (A) | |
| S (A) |
| R (A) |
X (B) | |
R (B) | |
W (B) | |
| X (C) |
| R (C) |
| W (C) |
Cam kết | |
Mở khóa (A) | |
Mở khóa (B) | |
| Cam kết |
| Mở khóa (A) |
| Mở khóa (C) |
Trong ví dụ trên, T1 và T2 chia sẻ biến A bằng cách sử dụng khóa chia sẻ vì chỉ hoạt động đọc được thực hiện trên A. T1 nhận được một khóa riêng trên B cho hoạt động ghi và T2 thực hiện tương tự với C. Cả khóa chia sẻ và khóa độc quyền chỉ được phát hành sau khi các giao dịch đã được cam kết.