|
Возрат набора данных из DML-триггера
|
|||
---|---|---|---|
#18+
Доброго всем времени суток! Прошу совета по реализации следующей задачи (описывается только концепция): В БД накапливаются данные (скорость- "очень быстро"). Необходимо отследить момент достаточного их накопления, сформировать по ним датасет и передать внешнему ЯВУ-приложению для дальнейшей обработки. Природа ЯВУ-клиента пока не выбрана, но к ней есть серьезное требование по скорости, поддержанию HTTP-протокола. Серверная часть уже определена: SQL Server + триггер на вставкук таблице БД, который с задачей отслеживания момента достаточного накопления данных и формирования датасета справляется красиво и элегантно. И вот теперь, собственно, сами "творческие муки": как вот это все переслать на ЯВУ-клиент (который в данной ситуации уже выступает вроде как сервер) для дальнейшей обработки и вызвать там ее... Т.е. вопросы следующие: 1. Какую технологию можно применить вот в таком нестандартном обмене (когда требование на обработку данных порождается на СУБД, а не на клиенте и его (клиента) нужно заставить на это требование отреагировать ). Обновление данных очень частое. Датасеты триггером генерируются тоже часто. Приложение многопользовательское. 2. Посоветуйте пожалуйста и ЯВУ-клинет для этой задачи... Пока склоняюсь к C# и ADO.Net... Благодарю за помощь! ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2021, 15:25 |
|
Возрат набора данных из DML-триггера
|
|||
---|---|---|---|
#18+
helengood, например, RAISERROR (50001, -- Message id. 0, -- Severity. 0 -- State. ) WITH LOG; Затем создаете Alert, привязанный к выбранному коду ошибки. А уже Alert вызываете задание SQL Server Agent, в котором можно делать вообще все, что душе угодно. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2021, 16:04 |
|
Возрат набора данных из DML-триггера
|
|||
---|---|---|---|
#18+
Вам сильно полегчает, если вы изложите задачу, а не свои фантазии по ее решению. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2021, 16:04 |
|
Возрат набора данных из DML-триггера
|
|||
---|---|---|---|
#18+
SQL сервер заточен на работу с таблицами. Вот в таблицу и складывайте. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2021, 17:04 |
|
Возрат набора данных из DML-триггера
|
|||
---|---|---|---|
#18+
helengood, ваше решение с ног на голову перевернуто. Данные должны поступать в базу, а не база должна инициировать выброс данных. Если имеется источник данных третьей стороны, то он данные должен передавать вашему приложению, т.е. слою контроллера данных, а контроллер будет передавать данные представлению (интерфейсу). В частном случае контроллером может служить хранимая CLR процедура. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2021, 22:15 |
|
Возрат набора данных из DML-триггера
|
|||
---|---|---|---|
#18+
Владислав Колосов, загадочно. Задал ТС вопрос. Получил ответ. После чего уже третий(!), пытается учить ТС жизни, даже не вникнув в задачи клиента, а сразу подгоняя их под свой любимый золотой молоток . Ну есть уже давно у SQL Server штатное средство для подобных случаев - Alerts. Или это не феншую? ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2021, 22:46 |
|
Возрат набора данных из DML-триггера
|
|||
---|---|---|---|
#18+
ptr128 Владислав Колосов, загадочно. Задал ТС вопрос. Получил ответ. После чего уже третий(!), пытается учить ТС жизни, даже не вникнув в задачи клиента, а сразу подгоняя их под свой любимый золотой молоток . Ну есть уже давно у SQL Server штатное средство для подобных случаев - Alerts. Или это не феншую? ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2021, 22:56 |
|
Возрат набора данных из DML-триггера
|
|||
---|---|---|---|
#18+
Гавриленко Сергей Алексеевич, факт в том, что такой подход работоспособен. А вот в какие сроки и с какими трудозатратами можно изменить уже имеющийся механизм - я без понятия. Может у ТС сотня датчиков на ESP8266 прямо в MS SQL эти данные льют? И для того, чтобы перепрошить их все на другой протокол потребуется год? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2021, 23:40 |
|
Возрат набора данных из DML-триггера
|
|||
---|---|---|---|
#18+
ptr128 helengood, например, RAISERROR (50001, -- Message id. 0, -- Severity. 0 -- State. ) WITH LOG; Затем создаете Alert, привязанный к выбранному коду ошибки. А уже Alert вызываете задание SQL Server Agent, в котором можно делать вообще все, что душе угодно. Так и в триггере можно запустить джоб, без всех этих "приседаний" с алертами и рэйзиррорами ... Как всё это, в итоге, помогает в решении исх. задачи : оповещение какой-то внешней аппликухи ? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2021, 23:47 |
|
Возрат набора данных из DML-триггера
|
|||
---|---|---|---|
#18+
court, RAISERROR технологичней, чем вызывать конкретное задание через msdb.dbo.sp_start_job Для подключения другого задания или переименования/пересоздания старого, если вдруг такое потребуется, не требуется обновлять триггер в БД (в общем случае - разворачивать проект). Меняются только настройки в SSMS. А задание уже позволяет делать вообще что угодно, включая и любой способ оповещения сервера. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2021, 00:23 |
|
Возрат набора данных из DML-триггера
|
|||
---|---|---|---|
#18+
ptr128 Гавриленко Сергей Алексеевич, факт в том, что такой подход работоспособен. А вот в какие сроки и с какими трудозатратами можно изменить уже имеющийся механизм - я без понятия. Может у ТС сотня датчиков на ESP8266 прямо в MS SQL эти данные льют? И для того, чтобы перепрошить их все на другой протокол потребуется год? Еще доводы есть? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2021, 01:02 |
|
Возрат набора данных из DML-триггера
|
|||
---|---|---|---|
#18+
Модератор: Топик почищен от флуда. ptr128 , по системе "привет-отевет" у вас ничего не выйдет тут. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2021, 03:51 |
|
Возрат набора данных из DML-триггера
|
|||
---|---|---|---|
#18+
Через service broker? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2021, 10:28 |
|
Возрат набора данных из DML-триггера
|
|||
---|---|---|---|
#18+
Критик Через service broker? Видимо да. Из того, что я нашла в сети либо так, либо через SqlDependency. Ну, либо классический вариант как тут предложили: выгружать все в таблицу и опрашивать ее с нужной частотой с клиента. Просто, я думаю, в классическом варианте получится лишняя нагрузка на сеть. А оповщения с сервера получается более ресурсосберегаемым подходом. Может кто поделится своей точкой зрения, какие плюсы и минусы у варианта через оповещения с сервера и через опрос с клиента... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2021, 15:11 |
|
Возрат набора данных из DML-триггера
|
|||
---|---|---|---|
#18+
Еще раз попытаюсь описать задачу, если кому-то оказалось не понятно. Разрабатывается система массового обслуживания (СМО). Сейчас этап выбора концепции как таковой. Есть множество разбросанных по всему городу терминалов, с которых в СМО поступают заявки на обслуживание (например, привезти пицуу, роллы, пирожки и т.д.). СМО должна отследить момент наступления достаточного накопления заявок, рассчитать план развозки и передать его курьеру. Заявки будут собираться скорее в БД , т.к. собирать и обрабатывать их в ОП, думаю, не легче. Триггер отслеживает достаточное накопление пирожков и передает их данные ЯВУ-клиенту для составления плана развозки. Как то так...Надеюсь, что понятнее написала... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2021, 15:26 |
|
Возрат набора данных из DML-триггера
|
|||
---|---|---|---|
#18+
helengood, Такие вещи лучше делать полностью на очередях, БД здесь будет узким местом. Ну т.е. логировать данные в базу имеет смысл, но это должна быть тупиковая ветка в маршруте. Как вариант, можно все сделать на service broker, но в 2021-м я бы не рекомендовал вкладываться в эту технологию, ажурного будущего у нее нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2021, 15:40 |
|
Возрат набора данных из DML-триггера
|
|||
---|---|---|---|
#18+
Ennor Tiegael helengood, Такие вещи лучше делать полностью на очередях, БД здесь будет узким местом. Ну т.е. логировать данные в базу имеет смысл, но это должна быть тупиковая ветка в маршруте. Как вариант, можно все сделать на service broker, но в 2021-м я бы не рекомендовал вкладываться в эту технологию, ажурного будущего у нее нет. Тоже мне адронный коллайдер. "Заявки на доставку" => речь идет о десятках минут, ну о минутах, как минимум. Чо тут устраивать истерику с "очередями" - одному аллаху ведомо. Пишите свои заявки спокойно в табличку и считайте "скока надо". ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2021, 16:00 |
|
Возрат набора данных из DML-триггера
|
|||
---|---|---|---|
#18+
[quot aleks222#22259951] Ennor Tiegael речь идет о десятках минут, ну о минутах, как минимум. Чо тут устраивать истерику с "очередями" - одному аллаху ведомо. Пишите свои заявки спокойно в табличку и считайте "скока надо". А если именно о минутах, то, значит, только оперативная память и логирование в БД? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2021, 17:20 |
|
Возрат набора данных из DML-триггера
|
|||
---|---|---|---|
#18+
helengood, меня сейчас, наверное, тут побьют, но в PostgreSQL эта задача решается в лоб. Через выполнение клиентом LISTEN, и ожидание выполнения NOTIFY в триггере. Почем MS SQL поддерживает NOTIFY исключительно через broker service - не знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2021, 17:33 |
|
Возрат набора данных из DML-триггера
|
|||
---|---|---|---|
#18+
ptr128 helengood, меня сейчас, наверное, тут побьют, но в PostgreSQL эта задача решается в лоб. Через выполнение клиентом LISTEN, и ожидание выполнения NOTIFY в триггере. Почем MS SQL поддерживает NOTIFY исключительно через broker service - не знаю. Спасибо Вам за советы. Посмотрю в сторону PostgreSQL, просто SQL Server "знакомее". И все же я считаю, что ни один временная структура в ОП , которая сейчас используется в прогрммировании с данной задачей не справится лучше реляционной таблицы+триггер. Единственный к сожалению жирный минус, что это медленее... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2021, 17:37 |
|
Возрат набора данных из DML-триггера
|
|||
---|---|---|---|
#18+
ptr128 helengood, меня сейчас, наверное, тут побьют, но в PostgreSQL эта задача решается в лоб. Через выполнение клиентом LISTEN, и ожидание выполнения NOTIFY в триггере. Почем MS SQL поддерживает NOTIFY исключительно через broker service - не знаю. Тоже открыл америку. sp_getapplock и жди, скока хочешь. Только зачем? С такими требованиями по времени достаточно тупо опрашивать сервер раз в 30-40 секунд. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2021, 17:45 |
|
Возрат набора данных из DML-триггера
|
|||
---|---|---|---|
#18+
aleks222 ptr128 helengood, Через выполнение клиентом LISTEN, и ожидание выполнения NOTIFY в триггере. sp_getapplock Не понимаю, какая связь между нотификацией и блокировкой. LISTEN/NOTIFY ничего не блокирует. Клиент может спокойно и дальше работать с БД, если ему это хочется. Нотификация прийдет асинхронно. sp_getapplock требует, чтобы какой-то ресурс был заблокирован, а затем разблокирован. Как Вы это будете делать в триггере, если блокировка в MS SQL снимается после завершения или отката транзакции? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2021, 18:34 |
|
Возрат набора данных из DML-триггера
|
|||
---|---|---|---|
#18+
helengood Посмотрю в сторону PostgreSQL, просто SQL Server "знакомее". Зато PostgreSQL дешевле, а в связи с активным импоротозамещением, спрос на него явно растет. ))) Вообще надо понимать, что это разные СУБД. Со своими минусами и плюсами. Что-то делать эффективней на MS SQL. Что-то - на PostgreSQL. Одного этого обсуждаемого момента точно не достаточно, чтобы выбрать СУБД. Например, если у Вас так же будет востребована работа с геоданными, то PostGIS может дать немало преимуществ. Если же Вам явно нужен SSAS и SSIS, то скрещивать их потом с PostgreSQL вряд ли имеет смысл. Даже в рамках обсуждаемой задачи LISTEN/NOTIFY - вершина айсберга. Возможно, куда эффективней будет собирать Ваши заказы через PipeLineDB и/или TimeScaleDB. Эти то легко смогут перемалывать свыше сотни тысяч записей в секунду. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2021, 18:58 |
|
Возрат набора данных из DML-триггера
|
|||
---|---|---|---|
#18+
helengood Обновление данных очень частое. Датасеты триггером генерируются тоже часто. Приложение многопользовательское. Или пользователи сами пишут, и в какой-то момент один из них должен получить все написанное? Складывается впечатление, что концепция не верна в корне. У вас N-писателей и M-читателей написанного? Зачем отслеживать "момент достаточного накопления"? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2021, 19:38 |
|
Возрат набора данных из DML-триггера
|
|||
---|---|---|---|
#18+
invm helengood Обновление данных очень частое. Датасеты триггером генерируются тоже часто. Приложение многопользовательское. Или пользователи сами пишут, и в какой-то момент один из них должен получить все написанное? Складывается впечатление, что концепция не верна в корне. У вас N-писателей и M-читателей написанного? Зачем отслеживать "момент достаточного накопления"? Здесь согласна, выразилась некорректно. Имела в виду (если по вашему) N-писателей и один читатель. Ему и должны высылаться данные для дальнейшей обработки. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2021, 19:42 |
|
|
start [/forum/topic.php?fid=46&msg=40033971&tid=1685229]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
159ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 18ms |
total: | 278ms |
0 / 0 |