Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.20;
Скачать: CL | DM;

Вниз

Альтернатива post_event.   Найти похожие ветки 

 
int64 ©   (2002-05-24 08:41) [0]

Помогите реализовать хороший аналог post_event/TEventAlerter.

Хороший в смысле:
1. Не глючит.
2. Не требует обязательной регистрации событий в клиенте. Т.е. может принимать абсолютно все сообщения.
3. И самое главное помимо сообщений может сразу принимать данные.

Мыслю так. На стороне сервера всё реализуется в виде UDF. Она принимает входные параметры и отсылает их посредством TServerSocket клиентам. На клиенте соответственно TClientSocket.

Теперь исходя из этого вопрос. Можно ли зашить такую (или какую подобную) передачу данных в коннекты, сессии,... короче, внутренности IB. Чтобы все манипуляции в дезайнтайм свелись к вызову в триггерах/SP UDF, а на клиенте помещением на форму компонента.


 
Alexandr ©   (2002-05-24 10:20) [1]

ага, только udf будут срабатывать сразу, а не после commit, как events


 
younghacker   (2002-05-24 10:43) [2]

Да используй SuperIbEventAlerter. Кто тебе мешает зарегистрировать все события сразу? Под IBX, FIB+ глюков не замечено. Под BDE есть неприятный глюк вызывающий довольно длительное зависание приложения при отсоединения клиента от базы. Но как я разобрался глюк связан с проблемами самого BDE. Вызов уходит в BDE и зависает там. А так работает замечательно.

Изобретать велосипед не стоит. Есть куча самописанных алертеров.

А по поводу UDF Александр прав. Для своего метода видимо подойдет такой способ. Создаешь таблицу которая содержит например идентификаторы всех событий и количество возникновений событий. Клиентское приложение регулярно - например раз в пять сек. считывает эту таблицу. смотрит какие поля изменились и формирует внутреннее событие. Ну а тригера и процедуры базы инкрементируют определенные записи таблицы событий. Вот и все завязано под commit.

Удачи!


 
int64 ©   (2002-05-24 12:00) [3]

Огромное спасибо.
Я то и спрашивал, чтобы не изобретать велосипедов.

Вот ещё что, черт с ними с алертерами, тут просто ситуация: если UDF без commit"а идут, можно как-нить их под commit запустить. Хоть через з....цу.

И, пожалуйста, уточните на счёт:
> только udf будут срабатывать сразу, а не после commit, как
> events

тут разночтение по поводу events.


 
Alexandr ©   (2002-05-24 12:10) [4]

через задницу можно, но не UDF.
1) Сделать служебную таблицу, в которую события писать.
2) Отдельное приложение/сервис периодически лезет в эту таблицу, читает новые события и рассылает их своим способом клиентам


 
int64 ©   (2002-05-24 12:37) [5]

С событиями всё понятно, я уже забыл за них.
Интересуюсь:
Как UDF под commit запустить. Не в конкретном случае, а впринципе в каком-нибудь варианте возможно?


 
Alexandr ©   (2002-05-24 13:05) [6]

никак.
UDF вне контекста транзакции так же как генераторы и внешние таблицы.

P.S. как ты себе представляешь откат работы UDF?


 
int64 ©   (2002-05-24 13:16) [7]

Данные из UDF ничего не делают, а выходят из базы наружу. И там ждут commit. Так можно?

Только как этот commit поймать? И боюсь они десяь раз обновятся до подтверждения.


 
Alexandr ©   (2002-05-24 13:19) [8]

че это за "данные из UDF" и где они "ничего не делают", и как это они "выходят наружу" и где это они "ждут commit"
Подумай на трезвую голову об ответах на эти вопросы


 
int64 ©   (2002-05-24 13:28) [9]

Имеется около 20 таблиц. В каждой около 100 записей. Записи быстро модифицируются; новые не добавляются. Нужен какой-угодно, но оперативный мониторинг.
Как его ещё сделать?


 
Alexandr ©   (2002-05-24 13:30) [10]

ты уверен, что для этого тебе база данных нужна?


 
int64 ©   (2002-05-24 13:42) [11]

Да. Именно база. Эти 20 таблиц только часть её. И данные поступают только с клиентов. Ещё внутри немного перевариваются, чтобы распихаться по таблицам.

Хочу снимать показания базы через UDF.


 
kaif ©   (2002-05-24 14:13) [12]

Почему бы просто циклически (раз в 5 секунд) с клиента не опрашивать эти 20 таблиц, если там так мало записей? Попробуй, может это заработает быстро. А если не заработает быстро, значит у тебя сеть 10 mbit и ее надо менять на 100 mbit. Иногда лучше не мудрить с программированием, а улучшить железо.
Если, конечно, речь идет просто о мониторинге...


 
int64 ©   (2002-05-25 08:07) [13]

kaif © (24.05.02 14:13)

Я не могу позволить себе терять обновления в записях. Сами старые записи не нужны. В БД нужно хранить только последние. Так же надо иметь историю всех записей со всех таблиц в виде некоторого представления (напимер суммы). Реализовать такую "сумму" в БД нельзя. Поэтому нужно перехватывать малейшие изменения.
Я уже могу получить устаревшие данные когда опрашиваю БД по post_event. А тем более по таймеру.


 
Pavel_S ©   (2002-05-25 16:17) [14]

А ты через тригеры сделай и записывай все изменения куда нибудь, как например в IBExpert сделан лог


 
int64 ©   (2002-05-25 21:12) [15]

2 Pavel_S © (25.05.02 16:17)

> записывай все изменения куда нибудь

Ну надо же. А я чего пытаюсь добиться у аудитории?

Подвожу резюме выше сказанного.

1. Инициировать запросы с клиента ("не изменилась ли какая запись?"). По таймеру или евенту.
Клиент может тормозить и пропускать обновления.

2. Извратить UDF, добавив в неё сокет на левую программу. Распихать UDF"ы по триггерам.
UDF будет отсылать не подтверждённые данные.

Есть ещё варианты? Не стесняйтесь предлагайте.


 
int64 ©   (2002-05-25 22:03) [16]

Конечно же ещё вариант, просматриваемый у younghacker и Alexandr.

3. Ввести служебные таблици для каждой таблицы (журналы изменений). Толстый клиент (по таймеру или событиям) просматривает журналы на предмет новых записей и удаляет старые.

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

Такой вариант подойдёт для не "интенсивных" систем. Проводок документов, например. В моей же области журналы быдут только пухнуть.

К тому же хотелось бы "вести моноторинг" на всех клиентах.



Страницы: 1 вся ветка

Текущий архив: 2002.06.20;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.013 c
14-65212
mvg_first
2002-05-16 19:44
2002.06.20
Помогите с инфой по написанию техзаданий


1-65015
allrussia
2002-05-30 08:05
2002.06.20
Народ, у меня internet кончается, неизвестно когда теперь будет


1-65118
Афоня
2002-06-07 09:23
2002.06.20
Помогите!!!


1-65141
allrussia
2002-06-06 14:37
2002.06.20
Назначаю браш для ListBox - тект рисуется с белым фоном.


3-64957
Darker
2002-05-14 16:15
2002.06.20
TreeView c БД (master-detail-detail-detail-...)