Tôi có một bảng MSSQL có chứa các tác vụ theo lịch trình mà dịch vụ Windows của tôi sẽ được xử lý dựa trên một dấu thời gian và tôi đã tự hỏi những gì lựa chọn thay thế tôi phải bỏ phiếu bảng như thế nàyThay thế cho bảng điểm bỏ phiếu MSSQL
SELECT *
FROM mydb
WHERE SYSUTCDATE() >= timestamp
tôi d có thể cần phải thăm dò bảng ít nhất mỗi 5 giây. Về cơ bản tôi muốn Windows Service của tôi xử lý dữ liệu tại thời điểm được thiết lập bởi dấu thời gian trong bảng.
Đối với tôi, điều này có vẻ không phải là cách hiệu quả nhất. Tôi đã xem xét DML & trình kích hoạt CLR và tôi không nghĩ rằng chúng sẽ hoạt động khi chúng sẽ kích hoạt khi dữ liệu thay đổi và không khi dấu thời gian đã trôi qua. Suy nghĩ?
Cập nhật 2:
Tôi đã nhận ra rằng gọi đó là "dự kiến nhiệm vụ" là một sự lựa chọn nghèo của từ ngữ vì vậy tôi sẽ cố gắng để mô tả nó một cách chi tiết hơn.
Mục tiêu của dự án này là gửi thông báo qua điện thoại cho mọi người tùy thuộc vào logic kinh doanh của chúng tôi. Một kịch bản là nhiều người nên được gọi điện vào những thời điểm cụ thể dựa trên một sự kiện nội bộ. Cùng một người có thể được gọi nhiều lần tùy thuộc vào cách cuộc gọi điện thoại được trả lời. Vì vậy, để đơn giản hóa mọi thứ và loại bỏ sự phức tạp và chi phí quản lý trạng thái của mỗi cuộc gọi điện thoại, tôi nghĩ nên lên lịch cho mỗi cuộc gọi điện thoại bằng cách đặt nó làm mục nhập trong bảng. Khi thông báo phải dừng lại, các cuộc gọi điện thoại đang chờ xử lý sẽ bị xóa khỏi bảng. Điều này sẽ giữ cho thiết kế của dịch vụ Windows rất đơn giản. Tất cả nó sẽ làm là gửi thông báo dựa trên dấu thời gian của nó trong bảng.
Cập nhật 1:
Message Queue
tôi đã không tìm ra cách người gửi sẽ đưa thông điệp vào hàng đợi tại thời điểm thích hợp.
SqlDependency
Tôi đang gặp một vấn đề bằng cách sử dụng mã ví dụ từ Detecting Changes with SqlDependency. Đối với một số lý do sự kiện OnChange chỉ bị sa thải ban đầu, không có gì xảy ra sau đó.
Cập nhật: Tôi không nghĩ SqlDependency sẽ hoạt động vì dữ liệu trong bảng sẽ không thay đổi để kích hoạt lửa.
void Initialization()
{
// Create a dependency connection.
SqlDependency.Start(connectionString, queueName);
}
void SomeMethod()
{
// Assume connection is an open SqlConnection.
// Create a new SqlCommand object.
using (SqlCommand command=new SqlCommand(
"SELECT timestamp,othercolumn FROM mydb WHERE SYSUTCDATE() >= timestamp",
connection))
{
// Create a dependency and associate it with the SqlCommand.
SqlDependency dependency=new SqlDependency(command);
// Maintain the refence in a class member.
// Subscribe to the SqlDependency event.
dependency.OnChange += new OnChangeEventHandler(OnDependencyChange);
// Execute the command.
using (SqlDataReader reader = command.ExecuteReader())
{
// Process the DataReader.
}
}
Thay vào đó bạn đã cân nhắc sử dụng hàng đợi thư? – recursive
Hãy thử SqlDependency: http://msdn.microsoft.com/en-us/library/62xk7953(v=vs.110).aspx –
Bạn đã xem xét việc chuyển các công việc này thành công việc và chạy chúng thông qua SQL Server Agent? –