Уведомление юзеров об изменении данных

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
KVas
Сообщения: 31
Зарегистрирован: 01 июн 2005, 16:01

Уведомление юзеров об изменении данных

Сообщение KVas » 04 июл 2006, 19:54

Здравствуйте, давненько Вас не тревожил.
Вопрос следующий: хочу, что бы пользователи немедленно видели изменения в БД, сделанные другими пользователями. Для этого открываю книгу Хелен Борри (рекомендую всем) и нахожу прекрасное решение через использование Post_Event. Только одно неудобство - для этого нужно на каждую таблицу написать по три тригера, соотвественно для Insert, Delete, Update для того, что бы написать там одну строчечку Post_Event 'Имя_события'. Не то, что бы мне лень это делать, но как-то настораживает такое количество тригеров для решения такой задачки. Может есть более цивилизованный способ.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 04 июл 2006, 19:56

настораживает вообще желание использовать event-ы, тем более на insert/update/delete. Что ты с ними делать собрался? Юзерам датасеты рефрешить?

KVas
Сообщения: 31
Зарегистрирован: 01 июн 2005, 16:01

Сообщение KVas » 04 июл 2006, 20:05

kdv писал(а):настораживает вообще желание использовать event-ы, тем более на insert/update/delete. Что ты с ними делать собрался? Юзерам датасеты рефрешить?
Именно, в FibPlus (опять-же рекомендую) есть прекрасный метод FullRefresh. Собирался его использовать :oops:.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 04 июл 2006, 20:08

колись о финальной идее - 20 пользователей 10 раз в секунду рефрешат датасеты друг у друга? Сетка и сервер впадают в ступор? Юзеры слепнут? :D

KVas
Сообщения: 31
Зарегистрирован: 01 июн 2005, 16:01

Сообщение KVas » 04 июл 2006, 20:13

Может есть более цивилизованный способ
:roll:

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 04 июл 2006, 20:13

И впадают в каталепсию, пытаясь нагнать мышом судорожно прыгающие строки в гриде :-D

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 04 июл 2006, 20:16

KVas писал(а):
Может есть более цивилизованный способ
:roll:
У тебя ж в автоподписи ответ написан. Что за предметная область-то? 20-пилотный трансатлантический суперлайнер или слежение за состоянием ядрёного реактора в переходном режиме?

KVas
Сообщения: 31
Зарегистрирован: 01 июн 2005, 16:01

Сообщение KVas » 04 июл 2006, 20:31

Программа автоматизации работы секретариата при проведении соревнований по спортивному ориентированию. С базой могут работать одновременно несколько человек, не более 10, я думаю. Несколько ноутбуков могут стоять на промежуточных контрольных пунктах в лесу и при прохождении там спортсменов фиксируются их промежуточные результаты.. И вся информация должна оперативно поступать к коментатору (или коментаторам), которые в свою очередь озвучивают её для публики. Плюс на финише регистрируются окончальные результаты спортсменов, которые тоже должны быть своевременно прокоментированы.. Вот, собственно, небольшой фрагмент из постановки задачи.. :)

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 04 июл 2006, 21:04

Уже легше. Таки вводителям данных ничего рефрешить и вообще показывать не надо, а читатели ничего не редактируют. Не уверен, что это вообще задача для СУБД (сдаёцца мне, что данные должны валиться в плоский файл, окном просмотра которого управляет либо таймер, либо сам комментатор теребит клаву периодицки, а по окончании оный файл уже загружается в СУБД для истории, со структуризацией данных), но если таки да, то два варианта:

1. Евенты просто извещают комментаторов, что новые данные ЕСТЬ. Какие - неважно. И комментатор сам решает - свернуть ли ему пространный рассказ о детских и юношеских годах какого-то выдающегося спортсмена и освежить своё видение или дотрындеть до конца а потом уже. Тогда да, писать триггера. И в 1.5 и выше можно универсальные на все события. И можно их сгенерировать по шаблону, а не насиловать клаву.
2. Вычитка по таймеру.

В обоих случаях рефрешить надо не фулл, у комментатора вообще не должно быть на рабочем месте постоянно открытого датааваре-датасета. Должно добиваться аппендами что-то кеширующее, само с базой не связанное. А для аппендов - по таймеру ли, по воле комментатора ли - должно осуществляться вычитывание только новых данных. Для чего завести табличку связи комментатор-событие, вычитывать из таблицы событий то, для чего not exists в этой табличке где юзер=я (можно реализовать через лефт джойн) и при вычитке туда такую запись вставлять. В частном случае одного комментатора было бы проще пользоваться признаком читано-нечитано в таблице событий, по которому налажен индекс. Но, поскольку в таблице событий по данному конкрентному соревнованию будут явно не миллионы записей, а комментаторов явно не тысячи, на боле-мене пристойном железе должно летать и с натуральными сканами в пределах одного соревнования.

KVas
Сообщения: 31
Зарегистрирован: 01 июн 2005, 16:01

Сообщение KVas » 06 июл 2006, 14:15

Merlin писал(а):Не уверен, что это вообще задача для СУБД
именно для СУБД, дело в том, что "вводящие" вводят только нагрудный номер учасника и отсекают системное время финиша (или промежуточного КП), а всё остальное - имя, команда, время старта и т.д. берётся из базы, потом делается промежуточный расчет и текущее распределение мест, возможны ситуации, когда учасники снимаются за неправильную отметку на КП, а потом их опять восстанавливают, потому, что они были сняты по ошибке ну и т.д.
По поводу остального, предыдущая версия проги была написана давно на Clipper Sammer-87, ясно, что там и мечтать о возможностях жар-птицы не приходилось, ну и сейчас, что называется дорвался, хотелось крутизны по-полной.. Однако хорошо, что не зная броду, хоть спросил у маститых..
Евенты просто извещают комментаторов, что новые данные ЕСТЬ.
Приблизительно такая модель и была реализована раньше, так и сделаю сейчас это для проведения вполне приемлемо..
И в 1.5 и выше можно универсальные на все события. И можно их сгенерировать по шаблону, а не насиловать клаву.

Я по старинке пишу скрипты и выполняю их при помощи своей примочки, которая эксплуатирует IBEScript.. А как генерерировать по шаблону - это любопытно, проконсультируйте пожалуйста или ссылочку, где можно почитать
у комментатора вообще не должно быть на рабочем месте постоянно открытого датааваре-датасета..
из чистого любопытсва, что такое датасет я для себя уяснил, а вот датааваре, - как трактовать сей термин..
В частном случае одного комментатора было бы проще..
дык в большинстве случаев он один и есть.. просто спортивное ориентирование не есть олимпийским видом спорта, а с финансированием и олимпийских-то у нас, сами понимаете, вот и приходится организаторам постоянно прибегать к помощи дяденьки-спонсора.., а этот дяденька частенько попадается вредненький, интересуется знать как тратятся его кровные и лучшим способом удовлетворить его любопытсво и польстить самолюбие - это выделить ему отдельный ноут на котором "всё видно", а ещё лучше отдельный ноут и его другу (а как же без друга, кто ж оценит-то..), вот, собственно, где собачка порылась..
Но, поскольку в таблице событий по данному конкрентному соревнованию будут явно не миллионы записей
Пока больше 700 учасников в текущей финишной базе не регистрировалось.. И последний на сегодня вопрос: имеет-ли значение реальное количество записей в таблицах, если в каждый момент времени от сервера требоваться будет возвратить (или обработать) лишь какую-то часть этих строк (скажем 700) и вся структура базы реализована таким образом, что нужную информацию можно идентифицировать по первичному ключу. Дело в том, что помимо использования данных из базы в данный момент времени для определения победителей и призеров, ещё по итогам года считаются и рейтинги спортсменов (упрощенно это количесво набранных очков на специально запланированных вначале года так назывемых ранговых соревнованиях) для определения претендентов в сборную страны и др. Сейчас эта работа выполняется в полуручном режиме, с использованием Excel как я полагаю.. но это же КАТОРЖНЫЙ труд.. посему хотелось бы хранить в базе, скажем год, этого достаточно.. При подсчете навскидку в самой большей таблице будет до 50 тыс. записей.. Из Вашего опыта, господа эксперты, прикиньте сильные-ли ожидать тормоза в конце года на ноутбуке 1,7 МГц, 256 оперативки, 20 гиг на винте, win2000Prof (ломанный конечно) ну и FireBird 1.5.3. Конечно не вопрос сделать отдельную базу под эту задачу и туда сливать, но хотелось бы знать ваш прогноз, дабы определиться для решения других задач (зарплата, складской учет) достаточно-ли будет этой технологии.. Имеется ввиду сервер FireBird, этот замечательнейший софт, при всей своей бесплатности обладающий такими чудесными возможностями..

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 06 июл 2006, 14:44

или ссылочку, где можно почитать
IBExpert.
прикиньте сильные-ли ожидать тормоза в конце года
при чем тут вообще это. с тормозами - это не к нам. Это к себе. Как напишешь, такие тормоза и будут.
достаточно-ли будет этой технологии..
издеваемся? www.ibase.ru/devinfo/ibfbfeature.htm см. примеры систем.

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 06 июл 2006, 16:31

KVas писал(а): А как генерерировать по шаблону - это любопытно, проконсультируйте пожалуйста или ссылочку, где можно почитать
Ну как-как... Сочиняешь текст шаблона, делаешь аппликушку, в которой селектишь названия пользовательских таблиц в базе и в цикле по результатам этого запроса пхаешь имя в в шаблон и (если нужно знать в какой таблице изменения) имя евента, полученный текст пхаешь в IBSQL и выполняешь.
KVas писал(а): вот датааваре, - как трактовать сей термин..


Ну как-как... Как data-aware... Мона даже набрать это заклинание в Дельфе, жмакнуть F1 и подивиться...
KVas писал(а): И последний на сегодня вопрос: имеет-ли значение реальное количество записей в таблицах, если в каждый момент времени от сервера требоваться будет возвратить (или обработать) лишь какую-то часть этих строк (скажем 700) и вся структура базы реализована таким образом, что нужную информацию можно идентифицировать по первичному ключу.


Практически не имеет. Если действительно по первичному ключу.
KVas писал(а): При подсчете навскидку в самой большей таблице будет до 50 тыс. записей..


То есть, вообще не будет :) Не, кривым запросом можно завесить сервер и на пустой базе :)

KVas
Сообщения: 31
Зарегистрирован: 01 июн 2005, 16:01

Сообщение KVas » 06 июл 2006, 17:03

Всем спасибо за консультацию, впечатление у меня сложилось, направление на дальше интуитивно чувствую.. Бум дерзать.. Ну а если затык где, все-равно к вам.. так что не прощаюсь..

Ответить