Triển khai các khóa ứng dụng trong SQL Server (Mẫu khóa phân tán)


7

Trong ứng dụng của tôi, tôi phải thực hiện một mô hình khóa phân tán. Vì chúng tôi đã có một phiên bản SQL Server để sử dụng, chúng tôi đã quyết định rằng việc thực hiện khóa ở lớp SQL của ứng dụng web của chúng tôi là dễ dàng nhất.

Một khóa có thể được lấy dựa trên nhiều điều kiện bao gồm:

  • Loại khóa được yêu cầu
  • Một định danh ứng dụng tùy ý

Đối với tất cả ý định và mục đích, hãy coi hai điều kiện trên là intkiểu dữ liệu.

Trong mô hình này, chúng tôi muốn coi tất cả các khóa của chúng tôi là FIFO, mà tôi tin rằng SERIALIZABLEmức độ cô lập sẽ mang lại cho chúng tôi.

Đây là cách chúng tôi đề xuất để thực hiện "khóa":

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

IF EXISTS (SELECT 1 FROM locks WHERE LockType = @LockType AND ApplicationIdentifier = @ApplicationIdentifier)
    BEGIN
        -- Awesome, the lock will be acquired
        INSERT INTO locks OUTPUT INSERTED.LockId VALUES (2,3)
    END
ELSE
    BEGIN
        -- Someone already has the lock
        SELECT -1
    END

SET TRANSACTION ISOLATION LEVEL READ COMITTED

Và "mở khóa":

DELETE FROM locks WHERE LockId = @LockId

Vì vậy, câu hỏi của tôi là hai lần:

  1. Tôi có cần phải thực hiện "mở khóa" SERIALIZABLEkhông?
  2. Có cách tiếp cận nào khác mà tôi có thể sử dụng / bất cứ điều gì mà tôi đã quên không?

Máy chủ SQL có thể là 2008/2012

Câu trả lời:


12

Tôi có cần phải thực hiện "mở khóa" SERIALIZABLEkhông?

Mặc dù tên, mức cô lập tuần tự hóa không đảm bảo các giao dịch sẽ được thực hiện tuần tự hoặc theo thứ tự nhận được. Thay vào đó, các giao dịch đảm bảo tuần tự hóa sẽ có cùng tác động liên tục đến cơ sở dữ liệu như thể chúng được thực hiện tuần tự, theo một số thứ tự không xác định (xem liên kết để biết thêm chi tiết).

Có cách tiếp cận nào khác mà tôi có thể sử dụng / bất cứ điều gì mà tôi đã quên không?

Đúng. SQL Server đã cung cấp hỗ trợ cho các khóa ứng dụng tùy ý thông qua:

Các tính năng applock tích hợp này cung cấp một loạt các tùy chọn và bao gồm phát hiện khóa chết tự động (mặc dù mọi yêu cầu quay lại giao dịch là trách nhiệm của lập trình viên). Ví dụ: bạn có thể chọn từ khóa giao dịch và khóa trong phạm vi phiên, trong nhiều chế độ. Sử dụng các tính năng này để thực hiện hành vi bạn cần khá đơn giản và chắc chắn đơn giản hơn là xây dựng trình quản lý khóa đáng tin cậy và linh hoạt của riêng bạn từ đầu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.