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

Sử dụng bảng cơ sở dữ liệu làm hàng đợi

Tôi sẽ sử dụng trường IDENTITY làm khóa chính để cung cấp ID tăng dần duy nhất cho mỗi mục được xếp hàng đợi và dán một chỉ mục nhóm vào đó. Điều này sẽ đại diện cho thứ tự mà các mặt hàng đã được xếp hàng đợi.

Để giữ các mục trong bảng hàng đợi trong khi xử lý chúng, bạn cần trường "trạng thái" để cho biết trạng thái hiện tại của một mục cụ thể (ví dụ:0 =đang chờ, 1 =đang được xử lý, 2 =đã xử lý). Điều này là cần thiết để ngăn một mục được xử lý hai lần.

Khi xử lý các mục trong hàng đợi, bạn cần tìm mục tiếp theo trong bảng hiện KHÔNG được xử lý. Điều này sẽ cần phải theo cách để ngăn nhiều quy trình chọn cùng một mặt hàng để xử lý cùng một lúc như được trình bày bên dưới. Lưu ý gợi ý về bảng UPDLOCK và READPAST mà bạn nên biết khi triển khai hàng đợi.

ví dụ. trong một cái mầm, một cái gì đó như thế này:

DECLARE @NextID INTEGER

BEGIN TRANSACTION

-- Find the next queued item that is waiting to be processed
SELECT TOP 1 @NextID = ID
FROM MyQueueTable WITH (UPDLOCK, READPAST)
WHERE StateField = 0
ORDER BY ID ASC

-- if we've found one, mark it as being processed
IF @NextId IS NOT NULL
    UPDATE MyQueueTable SET Status = 1 WHERE ID = @NextId

COMMIT TRANSACTION

-- If we've got an item from the queue, return to whatever is going to process it
IF @NextId IS NOT NULL
    SELECT * FROM MyQueueTable WHERE ID = @NextID

Nếu xử lý một mục không thành công, bạn có muốn thử lại sau không? Nếu vậy, bạn sẽ cần đặt lại trạng thái về 0 hoặc điều gì đó. Điều đó sẽ cần nhiều suy nghĩ hơn.

Ngoài ra, không sử dụng bảng cơ sở dữ liệu làm hàng đợi, mà là một cái gì đó giống như MSMQ - tôi chỉ nghĩ rằng tôi sẽ ném nó vào hỗn hợp!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server Parallel Backup Restore -1

  2. ON [PRIMARY] có nghĩa là gì?

  3. Dấu gạch ngang vs dấu gạch ngang:Thay dấu gạch ngang bằng dấu gạch nối

  4. Truy vấn SQL để nhận tập kết quả chỉ trong hai cột

  5. MS SQL ping máy chủ bên ngoài