MS SQL callback'и при добавлении данных
От: Temnikov Россия  
Дата: 31.08.17 09:50
Оценка: 1 (1)
Коллеги просветите. Не силен в MS SQL'е.
Есть сторонняя для нашего продукта БД в MS SQL. Заполняется сторонней для нас программой.
Надо периодически отслеживать не появляются ли в определенных таблицах новые записи. Надо только отслеживать новые данные, модифицировать ничего не требуется. Кроме polling'а можно что-то использовать? Есть ли со стороны MS SQL возможность подписаться на определенные события?
Re: MS SQL callback'и при добавлении данных
От: kov_serg Россия  
Дата: 31.08.17 09:55
Оценка:
Здравствуйте, Temnikov, Вы писали:

T>Коллеги просветите. Не силен в MS SQL'е.

T>Есть сторонняя для нашего продукта БД в MS SQL. Заполняется сторонней для нас программой.
T>Надо периодически отслеживать не появляются ли в определенных таблицах новые записи. Надо только отслеживать новые данные, модифицировать ничего не требуется. Кроме polling'а можно что-то использовать? Есть ли со стороны MS SQL возможность подписаться на определенные события?
Тригеры можно использовать
Re[2]: MS SQL callback'и при добавлении данных
От: Temnikov Россия  
Дата: 31.08.17 10:10
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Здравствуйте, Temnikov, Вы писали:


T>>Коллеги просветите. Не силен в MS SQL'е.

T>>Есть сторонняя для нашего продукта БД в MS SQL. Заполняется сторонней для нас программой.
T>>Надо периодически отслеживать не появляются ли в определенных таблицах новые записи. Надо только отслеживать новые данные, модифицировать ничего не требуется. Кроме polling'а можно что-то использовать? Есть ли со стороны MS SQL возможность подписаться на определенные события?
_>Тригеры можно использовать
Триггеры на сколько я понимаю исполняются в самом SQL. Интересует именно программный колбек к себе в софт, а не возможность что-то выполнить на sql'е когда там появляется некоторое интересующее меня событие. Или я ошибаюсь? Посмотрел еще раз гугл, есть возможность вызвать любую программу, но это дорого в плане накладных расходов + под нагрузкой это работать не будет.
Отредактировано 31.08.2017 10:17 Temnikov . Предыдущая версия .
Re[3]: MS SQL callback'и при добавлении данных
От: kov_serg Россия  
Дата: 31.08.17 10:23
Оценка: 4 (2)
Здравствуйте, Temnikov, Вы писали:

T>Здравствуйте, kov_serg, Вы писали:


_>>Здравствуйте, Temnikov, Вы писали:


T>>>Коллеги просветите. Не силен в MS SQL'е.

T>>>Есть сторонняя для нашего продукта БД в MS SQL. Заполняется сторонней для нас программой.
T>>>Надо периодически отслеживать не появляются ли в определенных таблицах новые записи. Надо только отслеживать новые данные, модифицировать ничего не требуется. Кроме polling'а можно что-то использовать? Есть ли со стороны MS SQL возможность подписаться на определенные события?
_>>Тригеры можно использовать
T>Триггеры на сколько я понимаю исполняются в самом SQL. Интересует именно программный колбек к себе в софт, а не возможность что-то выполнить на sql'е когда там появляется некоторое интересующее меня событие. Или я ошибаюсь? Посмотрел еще раз гугл, есть возможность вызвать любую программу, но это дорого в плане накладных расходов + под нагрузкой это работать не будет.

Тогда https://docs.microsoft.com/ru-ru/sql/relational-databases/track-changes/track-data-changes-sql-server
Re: MS SQL callback'и при добавлении данных
От: Слава  
Дата: 31.08.17 10:36
Оценка: 6 (3) +1
Здравствуйте, Temnikov, Вы писали:

T>Есть ли со стороны MS SQL возможность подписаться на определенные события?


Вам сюда: https://docs.microsoft.com/en-us/sql/t-sql/statements/create-event-notification-transact-sql
Re: MS SQL callback'и при добавлении данных
От: rm822 Россия  
Дата: 31.08.17 13:12
Оценка: 2 (1)
В пуш режиме — считай нету.
* 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 changes
    break; 
 end;

но он требует модификации базы с той стороны
Re: MS SQL callback'и при добавлении данных
От: vmpire Россия  
Дата: 31.08.17 14:05
Оценка: 2 (1)
Здравствуйте, Temnikov, Вы писали:

T>Есть сторонняя для нашего продукта БД в MS SQL. Заполняется сторонней для нас программой.

T>Надо периодически отслеживать не появляются ли в определенных таблицах новые записи. Надо только отслеживать новые данные, модифицировать ничего не требуется. Кроме polling'а можно что-то использовать? Есть ли со стороны MS SQL возможность подписаться на определенные события?
Вот здесь
Автор: vmpire
Дата: 28.04.08
я описывал уже один метод для push-уведомления.
Ещё можно в сервере обнаруживать изменения (как именно — тут есть варианты, ссылку уже приводили
Автор: kov_serg
Дата: 31.08.17
) и вызывать SQL CLR процедуру, которая сделает то, что вам нужно, например, дёрнет какой-нибудь веб-сервис.
Но опрос зачастую всё равно удобнее.
Re: MS SQL callback'и при добавлении данных
От: VladCore  
Дата: 31.08.17 14:42
Оценка: 4 (2)
Здравствуйте, Temnikov, Вы писали:

T>Коллеги просветите. Не силен в MS SQL'е.

T>Есть сторонняя для нашего продукта БД в MS SQL. Заполняется сторонней для нас программой.
T>Надо периодически отслеживать не появляются ли в определенных таблицах новые записи. Надо только отслеживать новые данные, модифицировать ничего не требуется. Кроме polling'а можно что-то использовать? Есть ли со стороны MS SQL возможность подписаться на определенные события?

В C# есть встроенный SQL Dependency класс.

Для БД достаточно включить галочку "Enable Broker":
ALTER DATABASE [test] SET ENABLE_BROKER
Re[2]: MS SQL callback'и при добавлении данных
От: Temnikov Россия  
Дата: 31.08.17 14:50
Оценка:
Здравствуйте, 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 изменений в секунду, в обычном режиме будет на порядок ниже.
Re[3]: MS SQL callback'и при добавлении данных
От: VladCore  
Дата: 01.09.17 04:07
Оценка:
Здравствуйте, Temnikov, Вы писали:

T>С производительностью там как? По базе, максимум надо отслеживать порядка 100 изменений в секунду, в обычном режиме будет на порядок ниже.


Говорят плохо с производительностью при большом update rate. 100 обновлений в секунду может много а может и нет. наверно 100 — это немного.

Тут писали про триггеры — это удобнее чем SqlDependency. Их просто автоматом при старте приложения генериш по метаданным и всё.
Отредактировано 01.09.2017 4:09 VladCore . Предыдущая версия .
Re: MS SQL callback'и при добавлении данных
От: Somescout  
Дата: 09.10.17 12:27
Оценка:
Здравствуйте, Temnikov, Вы писали:

T>Коллеги просветите. Не силен в MS SQL'е.

T>Есть сторонняя для нашего продукта БД в MS SQL. Заполняется сторонней для нас программой.
T>Надо периодически отслеживать не появляются ли в определенных таблицах новые записи. Надо только отслеживать новые данные, модифицировать ничего не требуется. Кроме polling'а можно что-то использовать? Есть ли со стороны MS SQL возможность подписаться на определенные события?

Тема уже старая, но может использовать аудит?
https://docs.microsoft.com/en-us/sql/relational-databases/security/auditing/sql-server-audit-database-engine
ARI ARI ARI... Arrivederci!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.