У меня есть таблица, в ней около 1 миллиона строк. Эта таблица обновляется веб-сервисами, приложениями CMS и другими источниками. Я хочу отслеживать несколько столбцов в этой таблице. Я читал про SignalR и SqlDependency
.
Однако похоже, что SqlDependency будет повторно сканировать всю таблицу при каждом изменении ?? Моя таблица довольно большая, и я не могу позволить себе повторно сканировать БД при каждом изменении.
единственное решение - использовать Trigger или что-то в этом роде? Я действительно хочу держаться подальше от Триггеров.
Вот код:
public IEnumerable<JobInfo> GetData()
{
using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString))
{
connection.Open();
using (SqlCommand command = new SqlCommand(
@"SELECT [JobID],[Name],[LastExecutionDate],[Status]
FROM [dbo].[JobInfo]", connection))
{
// Make sure the command object does not already have
// a notification object associated with it.
command.Notification = null;
SqlDependency dependency = new SqlDependency(command);
dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
if (connection.State == ConnectionState.Closed)
connection.Open();
using (var reader = command.ExecuteReader())
return reader.Cast<IDataRecord>()
.Select(x => new JobInfo(){
JobID = x.GetInt32(0),
Name = x.GetString(1),
LastExecutionDate = x.GetDateTime(2),
Status = x.GetString(3) }).ToList();
}
}
}
private void dependency_OnChange(object sender, SqlNotificationEventArgs e)
{
JobHub.Show();
}
Запрос в примере - это ...
SELECT [JobID],[Name],[LastExecutionDate],[Status]
FROM [dbo].[JobInfo]
А теперь представьте, что если бы в этой таблице был миллион строк, это действительно замедлило бы процесс.
SqlDependency
миллионами записей, а ближе к автору или с помощью какого-то механизма pub / sub. - person Wasp   schedule 05.09.2015