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

Sử dụng SQL Server làm hàng đợi DB với nhiều máy khách

Tôi khuyên bạn nên chuyển sang Sử dụng bảng làm Hàng đợi. Hàng đợi được triển khai tốt có thể xử lý hàng nghìn người dùng đồng thời và dịch vụ cao tới 1/2 triệu thao tác xếp hàng / xếp hàng mỗi phút. Cho đến khi SQL Server 2005, giải pháp này rất cồng kềnh và liên quan đến việc trộn một SELECT và một UPDATE trong một giao dịch duy nhất và chỉ đưa ra kết hợp các gợi ý khóa phù hợp, như trong bài viết được liên kết bởi gbn. May mắn thay, kể từ SQL Server 2005 với sự ra đời của mệnh đề OUTPUT, một giải pháp thanh lịch hơn nhiều đã có sẵn và bây giờ MSDN khuyên bạn nên sử dụng mệnh đề OUTPUT:

Bạn có thể sử dụng OUTPUT trong các ứng dụng sử dụng bảng làm hàng đợi hoặc để lưu giữ các tập kết quả ngay lập tức. Nghĩa là, ứng dụng liên tục thêm hoặc loại bỏ các hàng từ bảng

Về cơ bản, có 3 phần của câu đố bạn cần làm đúng để phần này hoạt động đồng thời một cách cao độ:

  1. Bạn cần phải tự động hủy yêu cầu. Bạn phải tìm hàng, bỏ qua bất kỳ hàng nào bị khóa và đánh dấu hàng đó là 'xếp hàng lại' trong một thao tác nguyên tử, và đây là nơi OUTPUT mệnh đề có tác dụng:
    with CTE as (
      SELECT TOP(1) COMMAND, PROCESSED
      FROM TABLE WITH (READPAST)
      WHERE PROCESSED = 0)
    UPDATE CTE
      SET PROCESSED = 1
      OUTPUT INSERTED.*;
  1. Bạn phải cấu trúc bảng của bạn bằng khóa chỉ mục nhóm ngoài cùng bên trái trên PROCESSED cột. Nếu ID đã được sử dụng một khóa chính, sau đó di chuyển nó làm cột thứ hai trong khóa nhóm. Cuộc tranh luận có nên giữ một khóa không phân cụm trên ID hay không đang mở, nhưng tôi thực sự ủng hộ không có bất kỳ chỉ mục phụ không phân cụm nào trên hàng đợi:
    CREATE CLUSTERED INDEX cdxTable on TABLE(PROCESSED, ID);
  1. Bạn không được truy vấn bảng này bằng bất kỳ phương tiện nào khác mà phải truy vấn bằng Dequeue. Cố gắng thực hiện các thao tác Peek hoặc cố gắng sử dụng bảng vừa làm Hàng đợi như một cửa hàng sẽ rất có thể dẫn đến bế tắc và sẽ làm giảm tốc độ đáng kể.

Sự kết hợp của nguyên tử dequeue, READPAST gợi ý tìm kiếm các phần tử để xếp hàng và khóa ngoài cùng bên trái trên chỉ mục được phân nhóm dựa trên bit xử lý đảm bảo thông lượng rất cao khi tải đồng thời cao.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. INFORMATION_SCHEMA so với sysobjects

  2. Sử dụng CRYPT_GEN_RANDOM () để tạo mật mã, số ngẫu nhiên trong SQL Server

  3. Cách chuyển các tham số giá trị bảng sang thủ tục được lưu trữ từ mã .net

  4. MS-SQL có điều kiện AND / OR (thực hiện đánh giá ngắn mạch) không?

  5. Bắt Hibernate và SQL Server để chơi tốt với VARCHAR và NVARCHAR