Коллеги просветите. Не силен в MS SQL'е.
Есть сторонняя для нашего продукта БД в MS SQL. Заполняется сторонней для нас программой.
Надо периодически отслеживать не появляются ли в определенных таблицах новые записи. Надо только отслеживать новые данные, модифицировать ничего не требуется. Кроме polling'а можно что-то использовать? Есть ли со стороны MS SQL возможность подписаться на определенные события?
Здравствуйте, Temnikov, Вы писали:
T>Коллеги просветите. Не силен в MS SQL'е. T>Есть сторонняя для нашего продукта БД в MS SQL. Заполняется сторонней для нас программой. T>Надо периодически отслеживать не появляются ли в определенных таблицах новые записи. Надо только отслеживать новые данные, модифицировать ничего не требуется. Кроме polling'а можно что-то использовать? Есть ли со стороны MS SQL возможность подписаться на определенные события?
Тригеры можно использовать
Здравствуйте, kov_serg, Вы писали:
_>Здравствуйте, Temnikov, Вы писали:
T>>Коллеги просветите. Не силен в MS SQL'е. T>>Есть сторонняя для нашего продукта БД в MS SQL. Заполняется сторонней для нас программой. T>>Надо периодически отслеживать не появляются ли в определенных таблицах новые записи. Надо только отслеживать новые данные, модифицировать ничего не требуется. Кроме polling'а можно что-то использовать? Есть ли со стороны MS SQL возможность подписаться на определенные события? _>Тригеры можно использовать
Триггеры на сколько я понимаю исполняются в самом SQL. Интересует именно программный колбек к себе в софт, а не возможность что-то выполнить на sql'е когда там появляется некоторое интересующее меня событие. Или я ошибаюсь? Посмотрел еще раз гугл, есть возможность вызвать любую программу, но это дорого в плане накладных расходов + под нагрузкой это работать не будет.
Здравствуйте, Temnikov, Вы писали:
T>Здравствуйте, kov_serg, Вы писали:
_>>Здравствуйте, Temnikov, Вы писали:
T>>>Коллеги просветите. Не силен в MS SQL'е. T>>>Есть сторонняя для нашего продукта БД в MS SQL. Заполняется сторонней для нас программой. T>>>Надо периодически отслеживать не появляются ли в определенных таблицах новые записи. Надо только отслеживать новые данные, модифицировать ничего не требуется. Кроме polling'а можно что-то использовать? Есть ли со стороны MS SQL возможность подписаться на определенные события? _>>Тригеры можно использовать T>Триггеры на сколько я понимаю исполняются в самом SQL. Интересует именно программный колбек к себе в софт, а не возможность что-то выполнить на sql'е когда там появляется некоторое интересующее меня событие. Или я ошибаюсь? Посмотрел еще раз гугл, есть возможность вызвать любую программу, но это дорого в плане накладных расходов + под нагрузкой это работать не будет.
В пуш режиме — считай нету.
* SERVICE broker — лютое говно, ад и в программировании и в поддержке
* Можно развернуть clr триггер который будет делать колбэк, но это так себе идея ввиду транзакционности, Unsafe, производительности и прочих сложностей
* CDC — enterprise only
* CHANGE TRACKINGом можно эмулировать push
SET NOCOUNT ON
declare @sinceVer bigint = ?
while 1 = 1
begin
if @sinceVer = CHANGE_TRACKING_CURRENT_VERSION()
begin
WAITFOR DELAY '00:00:00.050';
CONTINUE;
end;
-- TODO: read table changesbreak;
end;
Здравствуйте, Temnikov, Вы писали:
T>Есть сторонняя для нашего продукта БД в MS SQL. Заполняется сторонней для нас программой. T>Надо периодически отслеживать не появляются ли в определенных таблицах новые записи. Надо только отслеживать новые данные, модифицировать ничего не требуется. Кроме polling'а можно что-то использовать? Есть ли со стороны MS SQL возможность подписаться на определенные события? Вот здесь
Здравствуйте, Temnikov, Вы писали:
T>Коллеги просветите. Не силен в MS SQL'е. T>Есть сторонняя для нашего продукта БД в MS SQL. Заполняется сторонней для нас программой. T>Надо периодически отслеживать не появляются ли в определенных таблицах новые записи. Надо только отслеживать новые данные, модифицировать ничего не требуется. Кроме polling'а можно что-то использовать? Есть ли со стороны MS SQL возможность подписаться на определенные события?
В C# есть встроенный SQL Dependency класс.
Для БД достаточно включить галочку "Enable Broker":
Здравствуйте, VladCore, Вы писали:
VC>Здравствуйте, Temnikov, Вы писали:
T>>Коллеги просветите. Не силен в MS SQL'е. T>>Есть сторонняя для нашего продукта БД в MS SQL. Заполняется сторонней для нас программой. T>>Надо периодически отслеживать не появляются ли в определенных таблицах новые записи. Надо только отслеживать новые данные, модифицировать ничего не требуется. Кроме polling'а можно что-то использовать? Есть ли со стороны MS SQL возможность подписаться на определенные события?
VC>В C# есть встроенный SQL Dependency класс.
VC>Для БД достаточно включить галочку "Enable Broker": VC>
VC>ALTER DATABASE [test] SET ENABLE_BROKER
VC>
С производительностью там как? По базе, максимум надо отслеживать порядка 100 изменений в секунду, в обычном режиме будет на порядок ниже.
Здравствуйте, Temnikov, Вы писали:
T>С производительностью там как? По базе, максимум надо отслеживать порядка 100 изменений в секунду, в обычном режиме будет на порядок ниже.
Говорят плохо с производительностью при большом update rate. 100 обновлений в секунду может много а может и нет. наверно 100 — это немного.
Тут писали про триггеры — это удобнее чем SqlDependency. Их просто автоматом при старте приложения генериш по метаданным и всё.
Здравствуйте, Temnikov, Вы писали:
T>Коллеги просветите. Не силен в MS SQL'е. T>Есть сторонняя для нашего продукта БД в MS SQL. Заполняется сторонней для нас программой. T>Надо периодически отслеживать не появляются ли в определенных таблицах новые записи. Надо только отслеживать новые данные, модифицировать ничего не требуется. Кроме polling'а можно что-то использовать? Есть ли со стороны MS SQL возможность подписаться на определенные события?