Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
 а есть ли api, что бы драйвер базы оповещал программу о новых,удаленных,и пр. изменениях  [new]
victor79
Member

Откуда:
Сообщений: 28
Есть ли и в каких СУБД и как эта тема называется, что бы я отправил запрос, получил управляющих хэндел на выборку, и после СУБД оповещала бы об изменениях, которые затрагивают этот запрос. Что бы не отсылать его заново по таймеру для отслеживания новых данных.
Или как это вообще делается для одно и многопользовательских СУБД?
8 июн 15, 21:15    [17746756]     Ответить | Цитировать Сообщить модератору
 Re: а есть ли api, что бы драйвер базы оповещал программу о новых,удаленных,и пр. изменениях  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54850

victor79
Есть ли и в каких СУБД и как эта тема называется

В Interbase и Firebird это events.
В Oracle это Change Subscription.

Posted via ActualForum NNTP Server 1.5

8 июн 15, 21:27    [17746806]     Ответить | Цитировать Сообщить модератору
 Re: а есть ли api, что бы драйвер базы оповещал программу о новых,удаленных,и пр. изменениях  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34709
Но на самом деле это всё от лукавого...
Сервер должен быть всегда пассивен, это -- основа производительности СУБД. (одна из).
9 июн 15, 12:57    [17749119]     Ответить | Цитировать Сообщить модератору
 Re: а есть ли api, что бы драйвер базы оповещал программу о новых,удаленных,и пр. изменениях  [new]
ОКТОГЕН
Member

Откуда:
Сообщений: 2498
Postgresql имеет возможность посылать уведомления.
LISTEN/NOTIFY
Сообщение уйдёт по завершению транзакции
9 июн 15, 14:56    [17749998]     Ответить | Цитировать Сообщить модератору
 Re: а есть ли api, что бы драйвер базы оповещал программу о новых,удаленных,и пр. изменениях  [new]
ОКТОГЕН
Member

Откуда:
Сообщений: 2498
Только драйвер должен это поддерживать,
иначе придётся слать запрос
LISTEN <имя канала>;
руками. И ещё есть ограничения
процесс должен иметь постоянное соединение, чтоб ему пришло сообщение,
иначе не придёт.
9 июн 15, 15:00    [17750046]     Ответить | Цитировать Сообщить модератору
 Re: а есть ли api, что бы драйвер базы оповещал программу о новых,удаленных,и пр. изменениях  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 30290
victor79,

в InterBase XE7 сделано "пассивное оповещение". То есть, подписавшись на изменения можно переключением режимов для одного и того же select видеть или актуальные данные, или только измененные (с признаком изменения - upd/del/ins).
9 июн 15, 16:10    [17750600]     Ответить | Цитировать Сообщить модератору
 Re: а есть ли api, что бы драйвер базы оповещал программу о новых,удаленных,и пр. изменениях  [new]
victor79
Member

Откуда:
Сообщений: 28
MasterZiv
Но на самом деле это всё от лукавого...
Сервер должен быть всегда пассивен, это -- основа производительности СУБД. (одна из).

не согласен. Именно повторные опросы по таймеру и будут загружать сервер.
А постоянный коннект, с подпиской на изменения отображаемых на просмотр данных избавит от этого. Ну или таблички будут не обновляемые, что не очень красиво.

Спасибо ответившим.

Еще, а есть ли какие методы для такого оповещения из Qt?
10 июн 15, 19:38    [17757132]     Ответить | Цитировать Сообщить модератору
 Re: а есть ли api, что бы драйвер базы оповещал программу о новых,удаленных,и пр. изменениях  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54850

victor79
есть ли какие методы для такого оповещения из Qt?

Никогда не слышал о такой СУБД.

Posted via ActualForum NNTP Server 1.5

10 июн 15, 19:45    [17757146]     Ответить | Цитировать Сообщить модератору
 Re: а есть ли api, что бы драйвер базы оповещал программу о новых,удаленных,и пр. изменениях  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34709
victor79
MasterZiv
Но на самом деле это всё от лукавого...
Сервер должен быть всегда пассивен, это -- основа производительности СУБД. (одна из).

не согласен. Именно повторные опросы по таймеру и будут загружать сервер.


Я разве тебе рекомендовал делать повторные опросы БД по таймеру ?
Я такого тебе не говорил.
11 июн 15, 13:22    [17759923]     Ответить | Цитировать Сообщить модератору
 Re: а есть ли api, что бы драйвер базы оповещал программу о новых,удаленных,и пр. изменениях  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34709
MasterZiv
Но на самом деле это всё от лукавого...
Сервер должен быть всегда пассивен, это -- основа производительности СУБД. (одна из).


Я хочу пояснить, если вы не понимаете.

Представьте себе БД и 10 пользователей к ней.
Каждый пользователь делает изменение. N изменений (N=10).
СУБД должна разослать оповещения, M оповещений. M = тоже 10, каждому пользователю ( в реальности может быть не каждому, а
k*N, где k < 1, но это не очень важно).

Вычислим объём работы для СУБД по рассылке.

O() = M*N = N**2

O(10 пользоват) = 100 -- вроде бы и не так страшно.

Теперь увеличиваем количество пользователей до 100 и 1000.

O(100 пользоват) = 10000
O(1000 пользоват) = 1000000

Ну и так далее...
11 июн 15, 13:28    [17759963]     Ответить | Цитировать Сообщить модератору
 Re: а есть ли api, что бы драйвер базы оповещал программу о новых,удаленных,и пр. изменениях  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 30290
MasterZiv,

кстати, да. в InterBase и Firebird есть events, которые рассылаются подписчикам на конкретные события. Причем, рассылаются только по commit. Events, накопленные в транзакции, рассылаются по commit пачкой.
Так вот. Были запросы на расширение функциональности, чтобы ловить эвенты не по конкретному значению строки, а по маске.
Разработчики Firebird сделали такой билд, протестили, и пришли к выводу, что отдавать людям такой билд нельзя, потому что вот это самое получение событий по маске элементарно может убить сеть.

"так и не отведали они райских яблочек".
11 июн 15, 17:48    [17761726]     Ответить | Цитировать Сообщить модератору
 Re: а есть ли api, что бы драйвер базы оповещал программу о новых,удаленных,и пр. изменениях  [new]
victor79
Member

Откуда:
Сообщений: 28
MasterZiv
MasterZiv
Но на самом деле это всё от лукавого...
Сервер должен быть всегда пассивен, это -- основа производительности СУБД. (одна из).


Я хочу пояснить, если вы не понимаете.

Представьте себе БД и 10 пользователей к ней.
Каждый пользователь делает изменение. N изменений (N=10).
СУБД должна разослать оповещения, M оповещений. M = тоже 10, каждому пользователю ( в реальности может быть не каждому, а
k*N, где k < 1, но это не очень важно).

Вычислим объём работы для СУБД по рассылке.

O() = M*N = N**2

O(10 пользоват) = 100 -- вроде бы и не так страшно.

Теперь увеличиваем количество пользователей до 100 и 1000.

O(100 пользоват) = 10000
O(1000 пользоват) = 1000000

Ну и так далее...


Ну я поясню. Предположим, есть 100 пользователей, у которых в текущий момент открыто по окошку с табличкой, в которой отображается по 40 строк. Скорей всего у них будут преимущественно разные множества и таблиц и подмножества строк. И сервер должен отсылать событие, лишь тогда, когда изменение касается открытого множества. Что на стороне сервера сделать не сложно, храня индексированно активные селекты.

Отображаются в основном только таблицы введенные вручную, а не генерируемые. И изменения вручную. Т.е. одна точечная запись, должна отобразить изменения пусть будет в не более чем пяти пользователей. Это будет актуально, если это скажем таблица остатков, за которые менеджеры грызуться резервируя. Либо отослать события пяти пользователям, либо все сто, каждые 10 сек будут переопрашивать свой селект.

Но может быть Вы и правы, я просто теоретизирую.
12 июн 15, 00:20    [17762960]     Ответить | Цитировать Сообщить модератору
 Re: а есть ли api, что бы драйвер базы оповещал программу о новых,удаленных,и пр. изменениях  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54850

victor79
сервер должен отсылать событие, лишь тогда, когда изменение касается
открытого множества.

Тогда остаётся только Оракул с его Query Change Notification.

Posted via ActualForum NNTP Server 1.5

12 июн 15, 00:24    [17762972]     Ответить | Цитировать Сообщить модератору
 Re: а есть ли api, что бы драйвер базы оповещал программу о новых,удаленных,и пр. изменениях  [new]
wamaco
Member [заблокирован]

Откуда:
Сообщений: 678
Dimitry Sibiryakov
victor79
сервер должен отсылать событие, лишь тогда, когда изменение касается
открытого множества.

Тогда остаётся только Оракул с его Query Change Notification.


или interbase 7
12 июн 15, 02:18    [17763163]     Ответить | Цитировать Сообщить модератору
 Re: а есть ли api, что бы драйвер базы оповещал программу о новых,удаленных,и пр. изменениях  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54850

wamaco
или interbase 7

Нет. Появившиеся в Interbase XE7 Change View это совсем другая вещь и она относится всё
таки к классу pull-технологий, а автору нужен push.

Posted via ActualForum NNTP Server 1.5

12 июн 15, 11:59    [17763574]     Ответить | Цитировать Сообщить модератору
 Re: а есть ли api, что бы драйвер базы оповещал программу о новых,удаленных,и пр. изменениях  [new]
mayton
Member

Откуда: loopback
Сообщений: 53057
victor79
Ну я поясню. Предположим, есть 100 пользователей, у которых в текущий момент открыто по окошку с табличкой, в которой отображается по 40 строк. Скорей всего у них будут преимущественно разные множества и таблиц и подмножества строк. И сервер должен отсылать событие, лишь тогда, когда изменение касается открытого множества. Что на стороне сервера сделать не сложно, храня индексированно активные селекты.

Отображаются в основном только таблицы введенные вручную, а не генерируемые. И изменения вручную. Т.е. одна точечная запись, должна отобразить изменения пусть будет в не более чем пяти пользователей. Это будет актуально, если это скажем таблица остатков, за которые менеджеры грызуться резервируя. Либо отослать события пяти пользователям, либо все сто, каждые 10 сек будут переопрашивать свой селект.

Но может быть Вы и правы, я просто теоретизирую.

Сложность имплементации этой задачи растёт астрономически, если вспомнить что пользователь
выбирает вовсе не ТАБЛИЧКУ а курсор. Это важное смыловое ограничение которое на порядки
усложняет желаемый мониторинг.

Решения на всяких там Streams, GoldenGate возможно взлетают но наверное для них нужен very specific
клиент и это не просто драйвер.
12 июн 15, 12:06    [17763589]     Ответить | Цитировать Сообщить модератору
 Re: а есть ли api, что бы драйвер базы оповещал программу о новых,удаленных,и пр. изменениях  [new]
Нудный ламер
Guest
Искусственная все-таки ситуация. Невозможно, по-моему, работать по такой технологии - менеджер должен глазками следить за табличкой в окошке и реагировать на изменения. Нужно ведь помнить, в какой строке какое значение было, чтобы понять, что оно изменилось. А если было 150, потом стало 200, а через секунду снова 150 ? И прилетит ивент, что значение изменилось, а менеджер смотрит - ни фига и не изменилось, те же 150 светятся.

В таких случаях, имхо, ПО должно уметь автоматически делать нужные транзакции по заранее составленным заявкам менеджеров - например, если значение в поле достигнет 180, то делаем транзакцию.
12 июн 15, 14:26    [17763922]     Ответить | Цитировать Сообщить модератору
 Re: а есть ли api, что бы драйвер базы оповещал программу о новых,удаленных,и пр. изменениях  [new]
mayton
Member

Откуда: loopback
Сообщений: 53057
Думаю что это особый класс ПО наподобие диспетчерских центров и центров управления
но у них свои стандарты и протоколы отличные от "односторонних" наподобие SQL-RDBMS
или классического синхронного http.
12 июн 15, 16:40    [17764446]     Ответить | Цитировать Сообщить модератору
 Re: а есть ли api, что бы драйвер базы оповещал программу о новых,удаленных,и пр. изменениях  [new]
victor79
Member

Откуда:
Сообщений: 28
Нудный ламер
Искусственная все-таки ситуация. Невозможно, по-моему, работать по такой технологии - менеджер должен глазками следить за табличкой в окошке и реагировать на изменения. Нужно ведь помнить, в какой строке какое значение было, чтобы понять, что оно изменилось. А если было 150, потом стало 200, а через секунду снова 150 ? И прилетит ивент, что значение изменилось, а менеджер смотрит - ни фига и не изменилось, те же 150 светятся.

В таких случаях, имхо, ПО должно уметь автоматически делать нужные транзакции по заранее составленным заявкам менеджеров - например, если значение в поле достигнет 180, то делаем транзакцию.


я это теоретизирую. Что менеджер следящий за остатками, что программист, который хочет что бы с базой было удобно работать. Программист может захотеть сделать для менеджера отслеживание появления остатка, даже когда таблица закрыта. Типа пользователь поставил галочку, если появится остаток под эту заявку, пока она актуальна, то оповестить. Сервер это должен помнить, либо как активный запрос, либо как поставленное оповещение... Упс. Вывел новое определение желаемоего. Не активный запрос, а запомненное событие. Впрочем это почти то же самое.
13 июн 15, 22:41    [17767945]     Ответить | Цитировать Сообщить модератору
 Re: а есть ли api, что бы драйвер базы оповещал программу о новых,удаленных,и пр. изменениях  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
Вот помню у меня когда я начинал работать с sql тоже такие же желания были. А сейчас даже мыслей не возникает.
События, на которые сервер должен реагировать, надо на самом сервере и обрабатывать, а юзер когда ему надо тогда и посмотрит
13 июн 15, 22:53    [17767987]     Ответить | Цитировать Сообщить модератору
 Re: а есть ли api, что бы драйвер базы оповещал программу о новых,удаленных,и пр. изменениях  [new]
mayton
Member

Откуда: loopback
Сообщений: 53057
victor79
я это теоретизирую. Что менеджер следящий за остатками, что программист, который хочет что бы с базой было удобно работать. Программист может захотеть сделать для менеджера отслеживание появления остатка, даже когда таблица закрыта. Типа пользователь поставил галочку, если появится остаток под эту заявку, пока она актуальна, то оповестить. Сервер это должен помнить, либо как активный запрос, либо как поставленное оповещение... Упс. Вывел новое определение желаемоего. Не активный запрос, а запомненное событие. Впрочем это почти то же самое.

Можно для этих особых менеджеров-диспетчеров создать math-views или таблички которые обновляются
по триггеру из основной схемы. И долбить их из приложения каждые 3 секунды. (А чё нормальный интервал
для принятия решения.) Быстрее вроде и не надо. Чё там. Не 3d action игра всё таки.
18 июн 15, 17:42    [17788907]     Ответить | Цитировать Сообщить модератору
 Re: а есть ли api, что бы драйвер базы оповещал программу о новых,удаленных,и пр. изменениях  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4118
mayton
И долбить их из приложения каждые 3 секунды.

Это хорошо пока у системы нет большого количества пассивных клиентов.
Иначе это способ перевести их из пассивных в активных.
19 июн 15, 17:40    [17794308]     Ответить | Цитировать Сообщить модератору
Все форумы / Сравнение СУБД Ответить