Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Khóa lạc quan so với bi quan

Khóa lạc quan là một chiến lược trong đó bạn đọc bản ghi, ghi lại số phiên bản (các phương pháp khác để thực hiện việc này liên quan đến ngày tháng, dấu thời gian hoặc tổng kiểm tra / băm) và kiểm tra xem phiên bản có thay đổi không trước khi bạn ghi lại bản ghi. Khi bạn ghi lại bản ghi, bạn lọc cập nhật trên phiên bản để đảm bảo rằng đó là phiên bản nguyên tử. (tức là chưa được cập nhật giữa thời điểm bạn kiểm tra phiên bản và ghi bản ghi vào đĩa) và cập nhật phiên bản trong một lần truy cập.

Nếu bản ghi bị bẩn (tức là phiên bản khác với phiên bản của bạn), bạn hủy giao dịch và người dùng có thể bắt đầu lại nó.

Chiến lược này có thể áp dụng nhiều nhất cho các hệ thống khối lượng lớn và kiến ​​trúc ba tầng, nơi bạn không nhất thiết phải duy trì kết nối với cơ sở dữ liệu cho phiên của mình. Trong trường hợp này, máy khách không thể thực sự duy trì các khóa cơ sở dữ liệu vì các kết nối được lấy từ một nhóm và bạn có thể không sử dụng cùng một kết nối từ lần truy cập này sang lần truy cập tiếp theo.

Khóa bi quan là khi bạn khóa bản ghi cho mục đích sử dụng riêng của mình cho đến khi bạn hoàn thành nó. Nó có tính toàn vẹn tốt hơn nhiều so với khóa lạc quan nhưng đòi hỏi bạn phải cẩn thận với thiết kế ứng dụng của mình để tránh Deadlock. Để sử dụng khóa bi quan, bạn cần có kết nối trực tiếp đến cơ sở dữ liệu (như trường hợp thường xảy ra trong ứng dụng máy chủ máy khách hai cấp) hoặc ID giao dịch có sẵn bên ngoài có thể được sử dụng độc lập với kết nối.

Trong trường hợp sau, bạn mở giao dịch bằng TxID và sau đó kết nối lại bằng cách sử dụng ID đó. DBMS duy trì các khóa và cho phép bạn chọn phiên sao lưu thông qua TxID. Đây là cách các giao dịch phân tán sử dụng giao thức cam kết hai pha (chẳng hạn như XA hoặc Giao dịch COM +) hoạt động.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ví dụ về SQUARE () trong SQL Server

  2. cách khai báo biến toàn cục trong SQL Server ..?

  3. phân tách các giá trị được phân tách bằng dấu phẩy và lưu trữ trong bảng trong máy chủ sql

  4. Tạo một bảng SQL Server từ một dữ liệu C #

  5. Chặn, Chặn, Chặn trên cửa DBA với Chặn máy chủ SQL