powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вопрос по POST_EVENT
25 сообщений из 147, страница 3 из 6
Вопрос по POST_EVENT
    #33092904
Amris Mirddin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лебедкин
И что бы тут не говорили про кривое программирование, система на основе рефрешей по событиям реально работает (не без огрехов кончно, а где их нет?), а значит имеет право на жизнь

Право на жизнь имеют все, включая олигофренов. Не нам решать кому жить, на то повыше есть. А вот как жить... Ысчо раз: диспетчеру информация о заявках нужна только в момент, когда он готов и собирается принять решение об обслуживании и выбор заявки. В режиме idle ему нужна информация только о _наличии_ заявок, чтобы принять другое решение - просмотреть список или пойти попысать. То есть, по уму эвенты нужны всего лишь для накручивания визуализации счётчика заявок при регистрации (а возможно и скручивания по событию завершения обслуживания), ну и, может, помявкивания в стиле аськи. Но если нужно поддерживать у начальства уверенность в том, что не зря вбухали бабки в высокоскоростную сеть с дорогими свитчами и мощный сервак - что ж, можно и порефрешить.
...
Рейтинг: 0 / 0
Вопрос по POST_EVENT
    #33092923
АВП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FreemanZAVНу вот опять. Если миллион записей вставляем, куда складывать параметры до комита и в какой форме давать параметры клиенту.


а сейчас где "миллион эвентов" лежит"? - шутка ;)

Ну мне как-то не приходило в голову, что такая система может использоваться кем-то для отбработки массовых операций. В моей задаче всегда присутствует иникальный ПК и все операции производятся только с конкретной записью. Возможно можно решить задачу хранения "миллиона параметров", например ограничением использования этой системы на работу с выборкой возвращающей одну запись. Есть же такие проверки при других операциях. Хотя я конечно не специалист по написанию серверов БД и может есть еще тысяча других причин, по которым невозможно реализовать такую систему. Это уже будет объяснение получше чем "патамучто", т.к. информация о возможной реализации параметров была, а потом вопрос как-то "рассосался".

FreemanZAV и в какой форме давать параметры клиенту.
Можно как виндовое сообщение. или еще проще один int и хватит, а в него хоть ID из конкретной таблички, хоть тот же ID из таблицы "событий", в которой может быть хоть 100кб информации. В любом случае имеем однозначно идентифицируемую ссылку на инициатора события. система отклика может проста и прозрачна без массы дополнительных таблиц и запросов.
...
Рейтинг: 0 / 0
Вопрос по POST_EVENT
    #33092980
Amris Mirddin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АВП FreemanZAVНу вот опять. Если миллион записей вставляем, куда складывать параметры до комита и в какой форме давать параметры клиенту.


а сейчас где "миллион эвентов" лежит"? - шутка ;)


Гусары, молчать! В одном счётчике.

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


Иногда лучше жевать (С). Примерный код _строкового_ (а у нас других нет, но насчёт табличного тоже можно похихикать) триггера:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
  Поинтересоваться у таблицы, каким оператором её обновляли, мож она помнит 
  If я сработал при обновлении одной записи then
   Post Event
  else
   if двух, то ещё подумать
   else
    if трёх, совсем ХЗ
    else многа однако, молчать, однако;


АВП
Есть же такие проверки при других операциях.


При каких, если не секрет? Имеется в виду изумление сервера на подзапросе, возвращающем курсор, в селекте? Разницы не осчусчаем?

АВП
Хотя я конечно не специалист по написанию серверов БД


Это заметно. Однако тут нужно просто быть специалистом сначала подумать, потом сказать, а не наоборот. Серп что-то совсем ржавчиной зарос, пора заточить да омыть красненьким.
...
Рейтинг: 0 / 0
Вопрос по POST_EVENT
    #33093012
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет, Amris!
Ты пишешь:

AmrisAM> Серп что-то совсем ржавчиной зарос, пора заточить да омыть красненьким.
Недосуг мне. Сочинительствую я.
Процессы и структуры рисую,
мыслю чё ещё понадобится,
походу дополняю чего нету ...

А серп готов передать в твои руки.

Вот он:



--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Вопрос по POST_EVENT
    #33093018
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv -> МП
МП -> AM ...

всемирная история, банк и.............л

чё-то заскучали гуры
...
Рейтинг: 0 / 0
Вопрос по POST_EVENT
    #33093023
Amris Mirddin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нафик-нафик. Всё на мои старческие плечи взвалить возжелал?
...
Рейтинг: 0 / 0
Вопрос по POST_EVENT
    #33093040
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет, Amris!
Ты пишешь:

Amris AM> Нафик-нафик. Всё на мои старческие плечи взвалить возжелал?
Ну, тады пущай ржавеет (пока)

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Вопрос по POST_EVENT
    #33093051
Лентяй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотетелям event-ов с параметрами:
1. Заводим в базе табричку под параметры с PK, заполняемым из генератора
2. В триггере/SP/прямо с клиента заполняем параметры и дергаем Event (он один на всю систему)
3. Пишем программу-робота которая висит рядом с сервером и слушает именно этот Event.
4. Робот, получив Event, стартует снапшот транзакцию, вычитывает из таблички еще неотправленные Event-ы с параметрами и рассылает их клиентам. Помечает вычитанные Event-ы как отправленные и коммитит транзакцию.
Протокол передачи по вкусу - хоть UDP, хоть TCP, хоть по почте, хоть SMS или вообще голосовым сообщением...
...
Рейтинг: 0 / 0
Вопрос по POST_EVENT
    #33093057
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
основная проблема - не перевыполнять запрос целиком, а получить с сервера только те записи, которые изменились. Причем даже в последнем случае совершенно необязательны евенты с идентификаторами.
Я где-то видел статью про то, как ClientDataSet сделать так, чтобы в него закачивать (прямо в буфер) нужные записи, а не все целиком. Но - не помню, увы.

Так вот, сделать обновления по insert и update можно следующим способом:

1. на ПК у нас и так есть генератор, как правило. Так вот, когда мы получаем записи, автоматически сканируем столбец первичного ключа, и запоминаем максимальное считанное. Теперь, для получения вставленных с этого момента записей можно выполнить запрос
select * from table
where pkfield > :saved_pkfield_value and pkfield <= gen_id(pk_gen, 0)

то есть, от запомненного на последнем считывании, до текущего генератора
(понятно что до "текущего" записи могут не считаться, если они не committed).
Опять запоминаем максимальное значение ПК из полученного набора записей, и так по кругу.
(тут бы и добавить эти записи в буфер клиентдадасета)

2. для отлова обновлений делаем дополнительный столбец таблицы, который на before update заполняется еще одним генератором.
Схема аналогична изложенной выше, то есть - при вставке инкрементируется ПК, а при обновлении - этот столбец. Вторым запросом, похожим на предыдущий, вынимаем свежеобновленные записи.
(Тут бы и обновить эти записи в буфере клиентдатасета)

3. для отлова удалений все несколько сложнее. Или на удаления надо положить, если их нет, или сделать отдельную таблицу, параллельную исходной, и при удалении складывать туда идентификаторы (pkfield) удаленных записей. Тут, правда, с генераторами ничего не выйдет, т.к. записи могут удаляться как попало, поэтому если требуется проверять "удаленные за сегодня", то надо добавить в ПК этой доп. таблицы еще и столбец типа DATE.
(тут бы и удалить эти записи в буфере клиентдатасета)

Комментарии?
...
Рейтинг: 0 / 0
Вопрос по POST_EVENT
    #33093073
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, добавлю, что это описание примера репликации, или рассылки изменений, на самом деле. то есть здесь никто "рефрешить", и тем более через евенты, не собирался :-) Есть сервак, а есть туча агентов, которые сами по себе, когда им надо, получают информацию об изменениях данных на сервере. Просто потому, что их предполагалось много, и если бы они по евенту ломанулись сразу на сервак, то ...
Собственно, еще более на самом деле это описание "серверного" приложения. Потому что клиент только сообщал, в каком он состоянии, а серверная аппликуха для него подгребала данные и отправляла.
...
Рейтинг: 0 / 0
Вопрос по POST_EVENT
    #33093077
Фотография Kull Damned
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvКомментарии?Да брось ты, тут уже этих рекомендаций и советов дадено. А людЯм нуна эвенты и шоп было круто и без телодвижений. У них РЕЛИГИЯ.
...
Рейтинг: 0 / 0
Вопрос по POST_EVENT
    #33093091
Dik76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лентяй
Л> Хотетелям event-ов с параметрами:
Л> 1. Заводим в базе табричку под параметры с PK, заполняемым из генератора
Л> 2. В триггере/SP/прямо с клиента заполняем параметры и дергаем Event (он
Л> один на всю систему) ........Я похожим образом сообщения юзверям рассылаю когда надо их повыгонять из проги. А можно и
принудительно выкинуть.

--
Dik76

Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Вопрос по POST_EVENT
    #33093103
Amris Mirddin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
Комментарии?

Мл.. Ё.. Ох.. Вы чо с Лентяем на пару курите-то? Повелись на прокто-логгию? Не стыдно? Раз не дают сервер с сеткой убить штатными средствАми, приделаем свои лисапедные костыли? Сам же говоришь насчёт того, что по смещению от читанного в прошлый раз хрень получается с некоммиченными. На колу мочало. Всё просто дОнельзя. У мя уже мозоль на языке в этом месте, а dimitr молчит который год аки рыба в пироге. Current_Transaction колонкой записи и в параметры евента и ВСЁ. Получил эвент завершения транзакции - тривиально выбираешь её данные. А впендюрить в просмотровый ClientDataSet проще некуда - Edit-Insert-Post, Delete. Он же изменения за щекой держит. Только ApplyUpadates не давать и всё.
...
Рейтинг: 0 / 0
Вопрос по POST_EVENT
    #33093176
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvЯ где-то видел статью про то, как ClientDataSet сделать так, чтобы в него закачивать (прямо в буфер) нужные записи, а не все целиком. Но - не помню, увы.
Код: plaintext
1.
2.
3.
4.
5.
LogChanges := False; 
Insert;
... 
Post; 
... 
LogChanges := True; 
Или просто AppendData, если оно уже в нужном формате

kdv3. для отлова удалений все несколько сложнее. Или на удаления надо положить, если их нет, или сделать отдельную таблицу, параллельную исходной, и при удалении складывать туда идентификаторы (pkfield) удаленных записей. Тут, правда, с генераторами ничего не выйдет, т.к. записи могут удаляться как попало, поэтому если требуется проверять "удаленные за сегодня", то надо добавить в ПК этой доп. таблицы еще и столбец типа DATE.
(тут бы и удалить эти записи в буфере клиентдатасета)

Комментарии?Зачем DATE ? Ещё один генератор, именно для таблицы удалённых.
...
Рейтинг: 0 / 0
Вопрос по POST_EVENT
    #33093183
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сам же говоришь насчёт того, что по смещению от читанного в прошлый раз хрень получается с некоммиченными. На колу мочало.
нет никакой хрени с некомиченными. генератор - это просто указатель на максимальный ид на текущий момент. если мы получим идентификаторы меньше - ничего страшного, прочитаем в след. раз. у нас же есть максимальный реально полученный (коммиттед) идентификатор.

Current_Transaction колонкой записи и в параметры евента и ВСЁ

ну дак нет же этого.
...
Рейтинг: 0 / 0
Вопрос по POST_EVENT
    #33093198
АВП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну вот. Получил чего хотел. Натыкали носом в это самое... Ну да я не в обиде. В принципе такой реакции и ждал, иначе молчал бы и оставался дальше в неведении, что хочу невозможного да еще в извращенной форме :)
...
Рейтинг: 0 / 0
Вопрос по POST_EVENT
    #33093220
Amris Mirddin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
нет никакой хрени с некомиченными. генератор - это просто указатель на максимальный ид на текущий момент. если мы получим идентификаторы меньше - ничего страшного, прочитаем в след. раз. у нас же есть максимальный реально полученный (коммиттед) идентификатор.


Твой запрос:

select * from table
where pkfield > :saved_pkfield_value and pkfield <= gen_id(pk_gen, 0)

що буим делать с pkfield<:saved_pkfield_value которые в момент назначения его таковым не были ещё закоммиченными? Без лога изменения гарантированно не вытаскиваются. Лог может гарантированно применяться для вытаскивания изменений только в случае пометки вытаскивающей транзакцией вытаскиваемых данных. В частном случае - пометки удалением из лога.

kdv
Current_Transaction колонкой записи и в параметры евента и ВСЁ
ну дак нет же этого.

Из-за таких вот и нет, видать, наверное никак не придумает как дать _только разумные_ параметры к евенту приделывать.
...
Рейтинг: 0 / 0
Вопрос по POST_EVENT
    #33093260
АВП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Amris Mirddin Из-за таких вот и нет, видать, наверное никак не придумает как дать _только разумные_ параметры к евенту приделывать.

Да почему же никак не придумает. Сделал я уже давным давно систему с "внешней табличкой", в которой и идентификаторы юзеров и регистрация на события и внешний монитор, который отслеживает корректность действий и то что юзер зарегестрированный еще не "отлетел". Только вот хотел поинтересоваться, почему собственно не реализуется параметр для эвента, что мешает. Вот собственно и всё.
...
Рейтинг: 0 / 0
Вопрос по POST_EVENT
    #33093280
Лентяй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Amris MirddinМл.. Ё.. Ох.. Вы чо с Лентяем на пару курите-то? Повелись на прокто-логгию? Не стыдно? Раз не дают сервер с сеткой убить штатными средствАми, приделаем свои лисапедные костыли?
Ну вот, попал под раздачу, да еще в какой компании!
Я, собственно говоря, только изложил, как можно своими силами организовать Event с параметрами, но нигде вроде не говорил, что я за рефрешение гридов по Event-ам. Да и ДК вроде о репликации размышляет...
...
Рейтинг: 0 / 0
Вопрос по POST_EVENT
    #33093398
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Amris MirddinУ мя уже мозоль на языке в этом месте, а dimitr молчит который год аки рыба в пироге. Current_Transaction колонкой записи и в параметры евента и ВСЁ.

я пять лет курю эту траву и меня уже не цепляет ;-)

на самом деле, current_transaction архитектурно никак не кошернее rec_id, просто на практике безопаснее. Но усраться можно и с ней.
...
Рейтинг: 0 / 0
Вопрос по POST_EVENT
    #33093413
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
що буим делать с pkfield<:saved_pkfield_value которые в момент назначения его таковым не были ещё закоммиченными?

да ничего не будем! saved_pkfield_value это грубо говоря MAX(pkfield_value) из полученных. я ж там написал, специально, что на генератор ориентируемся как на теоретический максимум, а не на фактический.
...
Рейтинг: 0 / 0
Вопрос по POST_EVENT
    #33093419
Amris Mirddin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr Amris MirddinУ мя уже мозоль на языке в этом месте, а dimitr молчит который год аки рыба в пироге. Current_Transaction колонкой записи и в параметры евента и ВСЁ.

я пять лет курю эту траву и меня уже не цепляет ;-)


Курить надо менше. Даже Минздрав вон предупреждает.

dimitr
на самом деле, current_transaction архитектурно никак не кошернее rec_id, просто на практике безопаснее. Но усраться можно и с ней.

Ай, я тебя умоляю. Как это не кошернее? Усраться с current_transaction = усраться с потоком транзакций как таковым, и несколько байт в размере посылки, а не в количестве посылок, тут никакой рояли не играет. Так штаа... Не катит твой радикализьм. Даже свинина становится кошерной если свинья почесалась об стену синагоги.
...
Рейтинг: 0 / 0
Вопрос по POST_EVENT
    #33093449
Amris Mirddin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv що буим делать с pkfield<:saved_pkfield_value которые в момент назначения его таковым не были ещё закоммиченными?

да ничего не будем! saved_pkfield_value это грубо говоря MAX(pkfield_value) из полученных. я ж там написал, специально, что на генератор ориентируемся как на теоретический максимум, а не на фактический.

Дима, ты решил меня в гроб загнать досроковно или я туплю в той же невероятной степени после вчерашнего как и киплю?

Transaction 1: insert (ID=1)

Transaction 2: insert (ID=2)
Transaction 2: Commit

Transaction 3:
select * from table
where pkfield > :saved_pkfield_value and pkfield <= gen_id(pk_gen, 0)

saved_pkfield_value:=max(достатых запросом ID) или min или где?
Вроде по любому оно теперь 2?

Transaction 1: Commit

Transaction 4:
select * from table
where pkfield > :saved_pkfield_value (2) and pkfield <= gen_id(pk_gen, 0) (2)

хрена лысого, а не ID=1.
...
Рейтинг: 0 / 0
Вопрос по POST_EVENT
    #33093453
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в промежуток времени после срабатывания ивента на клиенте, но перед повторным взводом его в режим ожидания, может закоммититься несколько транзакций. Т.е. клиент после этого получит одно уведомление с несколькими ID. Архитектурно - те же яйца, просто безопасней на практике.
...
Рейтинг: 0 / 0
Вопрос по POST_EVENT
    #33093458
Лентяй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrв промежуток времени после срабатывания ивента на клиенте, но перед повторным взводом его в режим ожидания, может закоммититься несколько транзакций. Т.е. клиент после этого получит одно уведомление с несколькими ID. Архитектурно - те же яйца, просто безопасней на практике.
Привет Дима.
А в очередь их никак не выстроить?
...
Рейтинг: 0 / 0
25 сообщений из 147, страница 3 из 6
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вопрос по POST_EVENT
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]