Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как уведомить клиентов об изменении записей в таблице?  [new]
Гость5
Guest
Добрый вечер всем.

Если заносить изменения в БД одним клиентом, то второй (третий и т.п.) эти изменения увидит только после обновления DataSet’а.
Вопрос, есть ли в MSSQL 2008 инструменты с помощью которых в нужный момент (например через хранимую процедуру) можно отправить всем клиентам сетевое уведомление, чтоб те обновили DataSet?
25 сен 14, 16:32    [16621953]     Ответить | Цитировать Сообщить модератору
 Re: Как уведомить клиентов об изменении записей в таблице?  [new]
stavgreengo
Member

Откуда:
Сообщений: 710
триггер на апдейт нужной таблицы и EXECUTE msdb.dbo.sp_notify_operator
25 сен 14, 16:42    [16622002]     Ответить | Цитировать Сообщить модератору
 Re: Как уведомить клиентов об изменении записей в таблице?  [new]
aleks2
Guest
stavgreengo
триггер на апдейт нужной таблицы и EXECUTE msdb.dbo.sp_notify_operator

sp_notify_operator (Transact-SQL)
Sends an e-mail message to an operator using Database Mail.

Оператор не устанет письма читать?
26 сен 14, 06:04    [16623722]     Ответить | Цитировать Сообщить модератору
 Re: Как уведомить клиентов об изменении записей в таблице?  [new]
aleks2
Guest
Гость5
Добрый вечер всем.

Если заносить изменения в БД одним клиентом, то второй (третий и т.п.) эти изменения увидит только после обновления DataSet’а.
Вопрос, есть ли в MSSQL 2008 инструменты с помощью которых в нужный момент (например через хранимую процедуру) можно отправить всем клиентам сетевое уведомление, чтоб те обновили DataSet?


Есть, называется столбец rowversion (timestamp).
26 сен 14, 06:07    [16623725]     Ответить | Цитировать Сообщить модератору
 Re: Как уведомить клиентов об изменении записей в таблице?  [new]
Гость5
Guest
aleks2
Гость5
Добрый вечер всем.

Если заносить изменения в БД одним клиентом, то второй (третий и т.п.) эти изменения увидит только после обновления DataSet’а.
Вопрос, есть ли в MSSQL 2008 инструменты с помощью которых в нужный момент (например через хранимую процедуру) можно отправить всем клиентам сетевое уведомление, чтоб те обновили DataSet?


Есть, называется столбец rowversion (timestamp).


Доброе утро.

Не совсем понимаю о чём речь, может завалялся примерчик))) или есть ссылка на хорошую статейку.
Если несложно в двух словах напиши как это работает (принцип работы).

Сейчас все манипуляции с данными идут через хранимые процедуры, есть табличные переменные. В самой простой форме можно сказать, что идёт создание или обновление документа "один-ко-многим" т.е. в процедуре фактически полный цикл транзакции. В процедуре может обновиться от 1-й до 100-200 строк, но после этого клиент должен получить сетевое уведомление о том что определённая таблица изменилась (хотя по ней может измениться не одна строка), для того чтобы обновить DataSet. Клиент написан на DelphiXE6 + FireDAC.

Если смотреть на идеальный вариант, то неплохо бы передать произвольный сетевой пакет клиенту, в котором можно отразить например несколько параметров + название подсистемы, которая её вызывает, по этим данным можно судить какой датасет обновлять
26 сен 14, 07:50    [16623795]     Ответить | Цитировать Сообщить модератору
 Re: Как уведомить клиентов об изменении записей в таблице?  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 5960
Гость5,

в ADO.Net для таких целей используется класс SqlDependency, который, по сути, является оберткой над query notifications. Поскольку у вас Delphi, то нужно будет вручную настроить Query Notification, и запускать цикл ожидания оповещений в отдельном клиентском трэде.
26 сен 14, 08:54    [16623910]     Ответить | Цитировать Сообщить модератору
 Re: Как уведомить клиентов об изменении записей в таблице?  [new]
aleks2
Guest
Гость5
Если смотреть на идеальный вариант, то неплохо бы передать произвольный сетевой пакет клиенту, в котором можно отразить например несколько параметров + название подсистемы, которая её вызывает, по этим данным можно судить какой датасет обновлять


Если смотреть идеальный вариант - надо не фантазировать, а надо реально смотреть на вещи.
Невместно серверу париться за клиента и чего-то там ему слать.
Чем придумывать фсякие query notifications - лучше сделать простой механизм запроса клиентом наличия обновлений в таблице.
И пущай клиент париться за "обновили-необновили".
26 сен 14, 09:36    [16624040]     Ответить | Цитировать Сообщить модератору
 Re: Как уведомить клиентов об изменении записей в таблице?  [new]
Гость5
Guest
aleks2
Гость5
Если смотреть на идеальный вариант, то неплохо бы передать произвольный сетевой пакет клиенту, в котором можно отразить например несколько параметров + название подсистемы, которая её вызывает, по этим данным можно судить какой датасет обновлять


Если смотреть идеальный вариант - надо не фантазировать, а надо реально смотреть на вещи.
Невместно серверу париться за клиента и чего-то там ему слать.
Чем придумывать фсякие query notifications - лучше сделать простой механизм запроса клиентом наличия обновлений в таблице.
И пущай клиент париться за "обновили-необновили".


Сейчас это есть. Сделано было неплохо. Сам проект двух-звенка, но, написана ещё служба, которая следит за сетевыми обновлениями + авто обновлением программы. Т.е. проект и не двух-звенка и не трёх, что-то между)))
Хотим исключить лишнее (на наш взгляд) звено в проекте т.к. из-за службы появились нюансы. Сейчас надо понять, можно ли эти функции возложить на MSSQL 2008 или выше или оставить как есть
26 сен 14, 09:58    [16624171]     Ответить | Цитировать Сообщить модератору
 Re: Как уведомить клиентов об изменении записей в таблице?  [new]
Гость5
Guest
aleks2,

если как предлагаешь ты ))) спамить лишний раз сетку - это уж совсем криво, особенно если одновременно с базой будут работать 100-200 клиентов
26 сен 14, 10:02    [16624203]     Ответить | Цитировать Сообщить модератору
 Re: Как уведомить клиентов об изменении записей в таблице?  [new]
baracs
Member

Откуда: Москва
Сообщений: 7200
Гость5,

Ничего, что сервер и сделан именно для того, чтобы обслуживать запросы множества клинтов?
А спамить сетку сообщениями на каждый чих в таблицах - это нормально, да?
26 сен 14, 10:27    [16624363]     Ответить | Цитировать Сообщить модератору
 Re: Как уведомить клиентов об изменении записей в таблице?  [new]
Гость5
Guest
baracs,

я же писал!

Если смотреть на идеальный вариант, то неплохо бы передать произвольный сетевой пакет клиенту, в котором можно отразить например несколько параметров + название подсистемы, которая её вызывает, по этим данным можно судить какой датасет обновлять
26 сен 14, 12:01    [16625017]     Ответить | Цитировать Сообщить модератору
 Re: Как уведомить клиентов об изменении записей в таблице?  [new]
aleks2
Guest
Гость5
baracs,

я же писал!

Если смотреть на идеальный вариант, то неплохо бы передать произвольный сетевой пакет клиенту, в котором можно отразить например несколько параметров + название подсистемы, которая её вызывает, по этим данным можно судить какой датасет обновлять

Ну дык, передай.
В чем проблема то?

ЗЫ. Он думает, что "взял и передал", а подумать, что клиент должен "ожидать оной передачи и обрабатывать результаты" - это подумать он забыл.
26 сен 14, 12:04    [16625037]     Ответить | Цитировать Сообщить модератору
 Re: Как уведомить клиентов об изменении записей в таблице?  [new]
Set666
Member

Откуда:
Сообщений: 177
Создать временную таблицу, где первый столбец будет id польователя, второй состояние допустим 0 нет обновлений 1 есть. На рабочую таблицу навесить тригер, который это состояние во временой таблице будет обновлять. Ну и с клиента через определённый период времени это состояние проверять.
26 сен 14, 13:21    [16625561]     Ответить | Цитировать Сообщить модератору
 Re: Как уведомить клиентов об изменении записей в таблице?  [new]
Гость5
Guest
Сон Веры Павловны
Гость5,

в ADO.Net для таких целей используется класс SqlDependency, который, по сути, является оберткой над query notifications. Поскольку у вас Delphi, то нужно будет вручную настроить Query Notification, и запускать цикл ожидания оповещений в отдельном клиентском трэде.


Добрый день,

смотрю Вашу идею, чтоб включить её использую ALTER DATABASE <your db name> SET ENABLE_BROKER
Вопрос, это сказывается на производительности? я правильно понимаю, это что-то типа механизма обратных вызовов?
26 сен 14, 14:33    [16626123]     Ответить | Цитировать Сообщить модератору
 Re: Как уведомить клиентов об изменении записей в таблице?  [new]
prog123
Guest
Гость5
aleks2
пропущено...


Есть, называется столбец rowversion (timestamp).


Доброе утро.

Не совсем понимаю о чём речь, может завалялся примерчик))) или есть ссылка на хорошую статейку.
Если несложно в двух словах напиши как это работает (принцип работы).

Сейчас все манипуляции с данными идут через хранимые процедуры, есть табличные переменные. В самой простой форме можно сказать, что идёт создание или обновление документа "один-ко-многим" т.е. в процедуре фактически полный цикл транзакции. В процедуре может обновиться от 1-й до 100-200 строк, но после этого клиент должен получить сетевое уведомление о том что определённая таблица изменилась (хотя по ней может измениться не одна строка), для того чтобы обновить DataSet. Клиент написан на DelphiXE6 + FireDAC.

Если смотреть на идеальный вариант, то неплохо бы передать произвольный сетевой пакет клиенту, в котором можно отразить например несколько параметров + название подсистемы, которая её вызывает, по этим данным можно судить какой датасет обновлять


http://msdn.microsoft.com/en-us/library/ms175110(v=sql.105).aspx

http://forums.devart.com/viewtopic.php?f=6&t=30057
26 сен 14, 15:02    [16626406]     Ответить | Цитировать Сообщить модератору
 Re: Как уведомить клиентов об изменении записей в таблице?  [new]
Гость5
Guest
prog123,

Спасибо,
именно это сейчас изучаю, хочу понять как это всё работает
26 сен 14, 15:14    [16626511]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Как уведомить клиентов об изменении записей в таблице?  [new]
yaxinr
Member

Откуда:
Сообщений: 3
Гость5,

http://www.rabbitmq.com/devtools.html#c-dev
24 апр 18, 11:33    [21363586]     Ответить | Цитировать Сообщить модератору
 Re: Как уведомить клиентов об изменении записей в таблице?  [new]
yaxinr
Member

Откуда:
Сообщений: 3
Гость5,

https://github.com/event-driven-arch/mssql2amqp
24 апр 18, 11:58    [21363704]     Ответить | Цитировать Сообщить модератору
 Re: Как уведомить клиентов об изменении записей в таблице?  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3712
aleks2
Гость5
Если смотреть на идеальный вариант, то неплохо бы передать произвольный сетевой пакет клиенту, в котором можно отразить например несколько параметров + название подсистемы, которая её вызывает, по этим данным можно судить какой датасет обновлять


Если смотреть идеальный вариант - надо не фантазировать, а надо реально смотреть на вещи.
Невместно серверу париться за клиента и чего-то там ему слать.
Чем придумывать фсякие query notifications - лучше сделать простой механизм запроса клиентом наличия обновлений в таблице.
И пущай клиент париться за "обновили-необновили".


MS уже сделала.

Это еще вопрос, что лучше, один раз получить нотификацию об изменении или долбить запросами каждую секунду "не изменилось ли чего" + если клиентов туча
24 апр 18, 12:11    [21363772]     Ответить | Цитировать Сообщить модератору
 Re: Как уведомить клиентов об изменении записей в таблице?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7780
По-хорошему, сервер БД не должен являться и сервером же приложений. Оповещениями должен заниматься слой передачи данных. Прикольно иметь "все в одном", но не эффективно. Вы бы стали пользоваться пилой-молотком-ножницами?
24 апр 18, 12:19    [21363807]     Ответить | Цитировать Сообщить модератору
 Re: Как уведомить клиентов об изменении записей в таблице?  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3712
Ролг Хупин
aleks2
пропущено...


Если смотреть идеальный вариант - надо не фантазировать, а надо реально смотреть на вещи.
Невместно серверу париться за клиента и чего-то там ему слать.
Чем придумывать фсякие query notifications - лучше сделать простой механизм запроса клиентом наличия обновлений в таблице.
И пущай клиент париться за "обновили-необновили".


MS уже сделала.

Это еще вопрос, что лучше, один раз получить нотификацию об изменении или долбить запросами каждую секунду "не изменилось ли чего" + если клиентов туча


вот я повелся на поднятую из 2014 года тему
24 апр 18, 13:14    [21364125]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить