|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Есть вопрос. Можно-ли в IBase передать через Allert, созданный триггером, ID - вставленной записи? И соответственно поймать этот Event в клиентском приложении? типа: POST_EVENT 'event_name'|| cast(NEW.RECORDID as varchar(64)); Posted via ActualForum NNTP Server 1.2 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2005, 15:14 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Вроде нет. Т.е. послать то можно, но дело в том, что клиента необходимо подписывать на сообщения, а этого ты уже знать не будешь - если только что не подпишешся на сообщения от event_name1 до event_name999999999 :)) Как выход я рассматривал вариант создания еще одной таблицы, которая будет содержать ид вставляемой записи. Т.е. При добовлении в таблицу А записи, на тригере делаешь добавление/изменение рекорда в таблицу Б с идом таблицы А и именем этой таблицы. А на тригере на изменение/добавление рекорда в таблицу Б уже вешаешь эвент. На этот эвент регистрируешь клиента, и при его обработке уже смотришь с каким ИД добавлен рекорд в таблицу А. Но у этого решения есть один минус - многопользовательская работа. С ним пока у меня идей так и не возникло. Но если база локальная - в принципе такое решение может и работать. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2005, 16:00 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Вариант есть. Только тормозной маленько и кривоватый. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2005, 16:09 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
собственноручно кастрирую каждого, кто рефрешит записи в гриде на основании событий ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2005, 23:49 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
> собственноручно кастрирую каждого, кто рефрешит записи в гриде на основании событий Прошу прощения за оффтоп, но я тут рыдаю. У kdv - бита, у МП - серп, у Amris'а - канделябр, а ты, Дим, чем будешь орудовать? Posted via ActualForum NNTP Server 1.2 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2005, 00:19 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Kull DamnedЭх, время, в котором стоим (С) Фазиль Искандер... Si vis pacem, para bellum. В e.p.i. один хлопец, как его не замиряли, как не усмиряли, завел себе аж Боевое Паникадило. Все вооружаются, блин. Вопрос, конечно, интересный. Это ж как надо было завести кроткого и улыбчивого dimitr'а, чтоб вот так вот! да еще каждого! С другой стороны, вещица должна быть древняя, на Востоке в гаремах используют уж лет 600, а то и поболее. dimitr - ты часом не в Турции отдыхал? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2005, 02:25 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Kull DamnedУ kdv - бита, у МП - серп, у Amris'а - канделябр, а ты, Дим, чем будешь орудовать? стройбат - страшные люди, им даже оружие в руки не дают (с) Данилов Юрийdimitr - ты часом не в Турции отдыхал? какой тут [поскипано цензурой] отдых... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2005, 07:45 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
dimitrстройбат - страшные люди, им даже оружие в руки не дают (с)Ага, понял. Пусть это будет лопата. Совковая для пущего устрашения. Кастрация совковой лопалой - это круто. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2005, 10:51 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Kull Damned > собственноручно кастрирую каждого, кто рефрешит записи в гриде на основании событий Прошу прощения за оффтоп, но я тут рыдаю. У kdv - бита, у МП - серп, у Amris'а - канделябр, а ты, Дим, чем будешь орудовать? У коллеги Лоа тупые кусачки для отстригания пальцОв одолжит на время. Функциональность в общем и целом близкая. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2005, 12:07 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Ну пошел офтоп С чего вы господа взяли, что это для рефреша грида??? В этом случае как раз ИД можно и не получать от эвента - просто рефрешить все А вот ситуация, когда нужно сделать некоторое событие, если запись в базе была изменена - нужно этот ид как раз знать. В моем случае подготовка и установка таймера на отправку письма с некой инфой, т.е. прошло одно изменение - через 5часов отправить письмо, где инфа по всем рекордам, которые за это время (до отправки письма) были изменены. Ну и скажите мне, о мудрые, - могу ли я нормальным способом послать эвент от базы с конкретным ИД на изменени рекорда? Кроме того маразма, что я описал выше, идей больше не пришло, как это реализовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2005, 13:02 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
А внедрить в таблицу хотя бы таймштамп дефаулт нау и селектить по нём - не готично? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2005, 13:05 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
StrannicНу пошел офтоп С чего вы господа взяли, что это для рефреша грида??? В этом случае как раз ИД можно и не получать от эвента - просто рефрешить все А вот ситуация, когда нужно сделать некоторое событие, если запись в базе была изменена - нужно этот ид как раз знать. В моем случае подготовка и установка таймера на отправку письма с некой инфой, т.е. прошло одно изменение - через 5часов отправить письмо, где инфа по всем рекордам, которые за это время (до отправки письма) были изменены. Ну и скажите мне, о мудрые, - могу ли я нормальным способом послать эвент от базы с конкретным ИД на изменени рекорда? Кроме того маразма, что я описал выше, идей больше не пришло, как это реализовать.Че-та я мало чиво понял ис тваих рассуждений... :( ты хочешь сказать что отправляешь куда-то в письме лог измененных записей. Интересно, а для чего тогда тут эвэнты? Или я чегось не понял в твоем посте, опиши подробней. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2005, 13:07 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
StrannicС чего вы господа взяли, что это для рефреша грида??? а это была просто фраза в воздух... упреждающая... бо достали этой темой... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2005, 13:14 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Картина следующая. В инете есть некая база. Пользователь просматривает ее, делает свои пометки - меняет одно поле. На изменения этого поля (на определенное значение) срабатывает эвент и сообщает администратору, что данный рекорд был изменен. Причем по-хорошему делать это нужно тут же. Даже идея с пакетной отправкой таких изменений немного не верна. Т.е. хотят что бы админ тут же получил эту ифну по почте. А делать запрос на базу из 100000 записей каждую минуту? Да и плюс понимать, что было изменено это поле (хотя можно конечно временное поле по тригеру на изменение этого поля выставлять) как то не радужно наверное будет для сервера. Намного проще ИМХО при изменении послать эвент с указанием ИД рекорда, а дальше делать уже что душе угодно. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2005, 13:18 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
dimitr StrannicС чего вы господа взяли, что это для рефреша грида??? а это была просто фраза в воздух... упреждающая... бо достали этой темой... это неверно с точки зрения того, что клиент будет вечно дергать таблицу на рефреш? или еще есть что почему ты это не рекомендуешь? к примеру кнопочка обновить может просто стать энаблед, и юзверь сам решает, хочет он или нет обновить свой набор. или я чего то не понял. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2005, 13:21 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
StrannicКартина следующая.-=censored=-В общих чертах. шение - выкладывать во внешнюю таблу и контролировать ее размер или таймштамты (еще лучше), которые содержать момент изменения и ID записи, и сервис, который будет контролировать эту таблу или реагировать на эвент - тут уже нет принципиальной разницы. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2005, 13:22 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Strannicк примеру кнопочка обновить может просто стать энаблед, и юзверь сам решает, хочет он или нет обновить свой набор. или я чего то не понял.С кнопочкой разве что можно, но многие так не думают и тупо рефрешат грид и потом офигевают. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2005, 13:24 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Strannic Даже идея с пакетной отправкой таких изменений немного не верна. Т.е. хотят что бы админ тут же получил эту ифну по почте. Внимание, вопрос: что будет, если почтовый сервер остановят на сутки для профилактики? Куда тогда денутся данные об измененных записях? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2005, 13:36 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Kull Damned StrannicКартина следующая.-=censored=-В общих чертах. шение - выкладывать во внешнюю таблу и контролировать ее размер или таймштамты (еще лучше), которые содержать момент изменения и ID записи, и сервис, который будет контролировать эту таблу или реагировать на эвент - тут уже нет принципиальной разницы. ну т.е. то решение что я описыал выше (вторай топик на вопрос) единственно верное получается??? просто я его счел идиотским - к примеру два инет-юзверя меняют одновременно разные рекорды. тогда в промежуточную таблицу должны попасть две записи, т.е. мне будет нужно эти две записи о отослать по эвенту, после чего необходимо таблицу очистить. а если в этот момент третий еще что-то добавил? вобщем что-то я запутался. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2005, 13:38 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Strannicпросто я его счел идиотским - к примеру два инет-юзверя меняют одновременно разные рекорды. тогда в промежуточную таблицу должны попасть две записи, т.е. мне будет нужно эти две записи о отослать по эвенту, после чего необходимо таблицу очистить. а если в этот момент третий еще что-то добавил? вобщем что-то я запутался.Сервис, который отправляет инфу будет запоминать последний отправленный таймштамт и делать выборку из вторичной таблы основываясь на его значении. Не обязательно сразу чистить таблу. И преимущество внешней таблы в том, что её физически можно убивать периодически или по каким-либо еще условиям, например при отсутствии работающих юзверей, и сервер при попытке к ней обратиться сам создаст файл. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2005, 13:50 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Однако боюсь, если записей лога будет много с внешней таблой будут тормоза, тут надо покумекать и поэкспериментировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2005, 13:56 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Kull DamnedОднако боюсь, если записей лога будет много с внешней таблой будут тормоза, тут надо покумекать и поэкспериментировать. Вобщем-то как видно, если бы была возможность отпровлять эвентом параметр, то задача упростилась бы. Т.е. в итоге вывернутсься конечно можно, пусть через ..... но работать будет. А всего-то нужно - подписываться на сообщения, в которм один параметр само сообщение, а второй просто набор данных. Т.е. к примеру было бы так POST_EVENT "table_modif","123,wer,"||new.NAME а клиент подписываеться и смотрит только лишь на table_modif, а остальное уже идет просто в нагрузку. хотя понимаю, что дай такую возможность и начнеться все на событиях делаться, вместо того, чтобы подумать о нормальном решении вопроса. Но речь не идет о всех клиничиских случаях в проктологи. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2005, 14:12 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Kull Damned Strannicк примеру кнопочка обновить может просто стать энаблед, и юзверь сам решает, хочет он или нет обновить свой набор. или я чего то не понял.С кнопочкой разве что можно, но многие так не думают и тупо рефрешат грид и потом офигевают. :) а это и есть та клиника о которой я сказал выше, но это же не повод вовсе убрать эвенты из FB? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2005, 14:13 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
fynda Strannic Даже идея с пакетной отправкой таких изменений немного не верна. Т.е. хотят что бы админ тут же получил эту ифну по почте. Внимание, вопрос: что будет, если почтовый сервер остановят на сутки для профилактики? Куда тогда денутся данные об измененных записях? ну что так сразу о печальном. да об этом я как то не подумал, но.... превое - письмо рано или поздно все равно дойдет до адресата, второе - сделаю проверку на при возврате письма. причем насколько я помню, что все-таки адресат их получит, хоть и с опозданием, но это как говориться исключение из правил. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2005, 14:20 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Strannic ну что так сразу о печальном. Почему о печальном-то? Печально было б если б выбора не было. А вариант с таблицей, в которую лог складывается и cron'ом раз в пять минут отсылается - тут уже предлагали, он вполне работоспособный и в случае временной неработоспособности сервера. Strannic да об этом я как то не подумал, но.... превое - письмо рано или поздно все равно дойдет до адресата, Сомневаюсь я... При неработающем сервере-то... Скорее всего придется тебе опять же неотправленные письма в стопочку складывать и перепосылать через какое-то время. Те же... то есть тот же лог, только вид сбоку. :( Strannicвторое - сделаю проверку на при возврате письма. А кто его вернет-то? Напоминаю: сервер сдох. ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2005, 14:38 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
fynda Strannicвторое - сделаю проверку на при возврате письма. А кто его вернет-то? Напоминаю: сервер сдох. ;) Последний сервак до которого оно дошло вернет его с сообщением что дескать искомы сервер не найден. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2005, 15:22 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
to batis Я болею, завтра наверное поправлюсь и, если хочешь, опишу решение данной проблемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2005, 10:38 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Ну, вот вариант решения. Заводим специальную Log - таблицу. Вот с такой, к примеру, структурой: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
В момент коннекта к базе получем с сервака текущее значение времени. Запоминаем в Код: plaintext
При изменени данных триггерами пишем значение Moment (текущее значение времени), Operation (удаление/изменение/), Connect_id (идентификатор коннекта), Table_Name (Имя изменяемой таблички), Rec_Id (идентификатор измененной/добавленной/удаленной записи) Вот, при получении эвента о том, что данные поменялись, лезем в эту табличку и выбираем все, что произошло после LastMoment, и, если не нужны данные по изменениям, сделанным тобой лично - то отбрасываем значения с Connect_id = твоему коннекту. Берем с сервака текущее время, запоминаем. Интерпретируем полученные значения. Смыть, повторить. Kull Damned об этом и говорил, вроде. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2005, 11:20 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
FreemanZAV Я болею, завтра наверное поправлюсь и, если хочешь, опишу решение данной проблемы. Опиши плиз и мне интересно. На счет списка активных юзеров по твоей методике работаю - доволен. События с параметрами когда то тоже пытался реализовать через UDF, там один недостаток - события валятся не дожидаясь окончания транзакци, а так работать можно. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2005, 11:25 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
А насчет кастрирований там - лучше бы, перед тем как холодным оружием махать предложили бы тогда нормальное решение задачи: Данные обновляются несколько раз в минуту, юзер должен видеть таблицу всегда со свежими обновлениями, причем нажимать постоянно на кнопочку для рефреша его заставлять ни как нельзя! Как здесь быть без рефрешей по событию? ИМХО этим (рефрешами) заниматься вполне допустимо, нужно только прицип гранулярности соблюдать. (ограничевать максимальное количество рефрешей в единицу времени) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2005, 11:40 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
ЛебедкинА насчет кастрирований там - лучше бы, перед тем как холодным оружием махать предложили бы тогда нормальное решение задачи: Имхо с кастрацией уже поздно. С родителем надо было разбирацца :) Лебедкин Данные обновляются несколько раз в минуту, юзер должен видеть таблицу всегда со свежими обновлениями Лично мне незнакомы задачи, в которых это на самом деле нужно. Знакомо много народу, искренне уверенного что нужно, но объяснить зачем они не могут. Знакомы также люди, втискивающие в СУБД-приложения несвойственные этим приложениям функции. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2005, 13:02 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Amris MirddinЛично мне незнакомы задачи, в которых это на самом деле нужно. Знакомо много народу, искренне уверенного что нужно, но объяснить зачем они не могут. Знакомы также люди, втискивающие в СУБД-приложения несвойственные этим приложениям функции. Ну возьми, для примера, хотя бы мою задачу: Большой таксопарк. В минуту в БД записывается разными операторами до 10 заявок. Несколько диспетчеров, занимающихся распределением заявок на автомобили непрерывно должны видеть как поступающие заявки, так изменяющейся статус введенных заявок для того, не возникало конфликтов (или было минимальным), когда два диспетчера пытаются распределить одну и ту же заявку. Плюс так же оперативно нужно видеть изменяющийся по статусам (занят, свободен, не на линии) список автомобилей. И я уверен подобных задач реального времени в жизни хватает. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2005, 16:13 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
ЛебедкинИ я уверен подобных задач реального времени в жизни хватает.Я бы для такой штуки делал надстройку - сервер-паблишер, который умеет рассылать нужные мне "эвенты-записи" основываясь на постоянном рефреше (тикер от 3-х секунд - подбирать) парочки-тройки таблиц лога (посменно, чтобы можно было чистить в фоновом режиме) на серверной стороне. А на клиентской стороне приемник-стек. Примерно так. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2005, 16:28 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Лебедкин Ну возьми, для примера, хотя бы мою задачу: Большой таксопарк. В минуту в БД записывается разными операторами до 10 заявок. Несколько диспетчеров, занимающихся распределением заявок на автомобили непрерывно должны видеть как поступающие заявки, так изменяющейся статус введенных заявок для того, не возникало конфликтов (или было минимальным), когда два диспетчера пытаются распределить одну и ту же заявку. Плюс так же оперативно нужно видеть изменяющийся по статусам (занят, свободен, не на линии) список автомобилей. И я уверен подобных задач реального времени в жизни хватает. А я бы не так к решению задачи подходил. Работал бы через трехзвенку. Причем статус автомобилей держал бы в памяти и в базу бы не писал. Каким бы ни был таксопарк при нынешних объемах памяти все его а/м спокойно в память влезут. Так же поступил бы со списком активных заявок. То есть при поступлении новой записывал бы ее в базу, но и оставлял бы в памяти. И вот из памяти AppServer-a и делал бы Refresh состояния на клиентах не мучая-бы при этом сервер. При закрытии заявки соответственно записывал бы ее в базу и удалял из AppServer-a. Нотификацию организовать можно кучей вариантов, опять же не насилуя птичку... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2005, 17:07 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Лентяй[quot Лебедкин] Ну возьми, для примера, хотя бы мою задачу: Большой таксопарк. В минуту в БД записывается разными операторами до 10 заявок. Несколько диспетчеров, занимающихся распределением заявок на автомобили непрерывно должны видеть как поступающие заявки, Гы, таки мой ТЛ в отличной форме даже в понедельник Так и знал, что задача именно эта. Тык вот, ему не нужно непрерывно видеть все поступающие заявки, ему нужно знать что они есть. И даже это не непрерывно, а только когда он (диспетчер) а) idle б) присутствует на рабочем месте. Т.е. евент должен сообщать только о факте появления в базе новых заявок. А уже диспетчер на осоновании этой информации должен самостоятельно инициировать себе рефреш набора именно в тот момент, когда он намерен взяться за новую заявку. И первое, что он должен сделать когда выберет себе строку для обслуживания - осуществить её пессимистическую блокировку и ещё раз отрефрешить именно эту строку персонально, ибо с тех пор, как он её пофетчил, её уже мог а) взять на обслуживание другой (для этого блокировка) и б) оное обслуживание даже вообще завершить (для этого рефреш). И по завершении обслуживания одной заявки безусловно перечитать весь набор, были там эвенты, не были... Насчёт состояния машин присоединяюсь к предыдущим ораторам. 2 Лентяй: помнишь ты меня спрашивал, зачем нужна возможность задавать транзакцию RefreshSQL персонально и управлять ей? Кроме того, что я тебе тогда сказал, ещё и этот случай - совпадение с транзакцией не SelectSQL, а ModifySQL. А бывает, что нужно то так, то этак - когда основной набор рефрешится не всегда целиком, а построчно тоже. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2005, 17:51 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
дык, я к словам Amris добавлю еще что - есть такая хрень, диаграмма состояний. так вот уже из изложенного про таксопарк я вижу, что у диспетчера есть совершенно явная диаграмма состояний, или последовательность действий. предполагаемое: 1. диспетчер обновляет набор для просмотра заявок. 2. выбирает заявку для обработки (возможно сообразуясь со списком находящихся в этом районе машин), БЛОКИРУЕТ ее от захвата другими диспетчерами. 3. начинает работать по заявке. 4. после обработки заявки возвращается к п.1. то есть, нигде тут никаких постоянных рефрешей нет, они диспетчеру вообще на дух не нужны (как не нужны _другие_ заявки в момент обработки конкретной, например). ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2005, 18:35 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Amris MirddinТык вот, ему не нужно непрерывно видеть все поступающие заявки, ему нужно знать что они есть. И даже это не непрерывно, а только когда он (диспетчер) а) idle б) присутствует на рабочем месте. Ему нужно именно видеть все поступающие заявки, что бы выбрат ь из них ту, с которой он хочет работать. Amris Mirddin Т.е. евент должен сообщать только о факте появления в базе новых заявок. А уже диспетчер на осоновании этой информации должен самостоятельно инициировать себе рефреш набора именно в тот момент, когда он намерен взяться за новую заявку. Так вот вам рефреш на основании эвента. Тока он может принять решение что он будет браться за новую заявку видя текущие заявки, так что рефреш надо делать каждый раз после изменения списка текущих заявок дабы показать ему актуальный список. По поводу блокировок - базара нет. Согласен, так и делаем. kdv 1. диспетчер обновляет набор для просмотра заявок. 2. выбирает заявку для обработки (возможно сообразуясь со списком находящихся в этом районе машин), БЛОКИРУЕТ ее от захвата другими диспетчерами. 3. начинает работать по заявке. 4. после обработки заявки возвращается к п.1. то есть, нигде тут никаких постоянных рефрешей нет, они диспетчеру вообще на дух не нужны (как не нужны _другие_ заявки в момент обработки конкретной, например). В момент обработки текущей, другие заявки не нужны - согласен. Но в даной диаграмме: после пункта 4 постоянно надо выполнять пункт 1, пока не перейдем к 2 (т.е. не начнем работать по какой-либо заявке). Лентяй А я бы не так к решению задачи подходил. Работал бы через трехзвенку. Именно в этом направлении я сейчас и работаю ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 09:39 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Но в даной диаграмме: после пункта 4 постоянно надо выполнять пункт 1 то есть, диспетчер сидит сложа руки, и тупо пялится в монитор? Если новые заявки приходят редко, то достаточно сигнала, что появились новые заявки. Жмем кнопку - перечитываем. Если новые заявки приходят часто, то у диспетчера на экране все будет просто мелькать. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 11:50 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
to Лебедкин Рассказываю. Нужно 4 таблицы. В 1-й будет список активных пользователей (подойдет USERS_CLIENT). Во 2-й список событий Код: plaintext 1. 2. 3.
Код: plaintext 1. 2. 3. 4.
Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Код: plaintext 1. 2. 3. 4. 5. 6. 7.
В USERS_CLIENTS сделаем триггер на удаление Код: plaintext
Допустим есть таблица Код: plaintext 1. 2. 3. 4.
Код: plaintext 1. 2. 3. 4. 5.
Код: plaintext 1. 2. 3.
Основная проблема определить, жив-ли клиент, нуждающийся в событии. Если использовать USERS_CLIENT, то проблем нет. Кроме этого есть еще несколько способов это определить, но я че-то уже устал. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 12:06 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
kdvто есть, диспетчер сидит сложа руки, и тупо пялится в монитор? ну он мжет, например, чай пить :-) и время от времени, например раз в 10 сек поглядывать на монитор, при этом ни куда не нажимая kdv Если новые заявки приходят редко, то достаточно сигнала, что появились новые заявки. Жмем кнопку - перечитываем. Если новые заявки приходят часто, то у диспетчера на экране все будет просто мелькать. Ни чего подобного, мелькания даже не заметно. Просто в гриде вдруг появляется новая строка или существующая меняет иконку или цвет (статус) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 12:58 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Лебедкин Лентяй А я бы не так к решению задачи подходил. Работал бы через трехзвенку. Именно в этом направлении я сейчас и работаю Но в этом случае уже вся информационная нагрузка будет на сервер приложений, а InterBase (или любая другая СУБД) будет просто хранилищем архивных данных. Это нормально, но вопрос то ставился про выполение задачи именно средствами IB И что бы тут не говорили про кривое программирование, система на основе рефрешей по событиям реально работает (не без огрехов кончно, а где их нет?), а значит имеет право на жизнь ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 13:06 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Лебедкин Ни чего подобного, мелькания даже не заметно. Просто в гриде вдруг появляется новая строка или существующая меняет иконку или цвет (статус) угу, сел пользователь - прицелился, ткнул дважды в запись - а она возми и поменяйся на другую ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 13:13 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Лебедкин ну он мжет, например, чай пить :-) и время от времени, например раз в 10 сек поглядывать на монитор, при этом ни куда не нажимая Можно обновлять грид по таймеру раз в N (N - настраиваемо) секунд. Сел пить чай - включил таймер, и пусть поглядывает себе. А вообще нефиг чаи расписать на рабочем месте! ;) Лебедкин Ни чего подобного, мелькания даже не заметно. Не заметно или пока не заметно? ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 13:19 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Sash*угу, сел пользователь - прицелился, ткнул дважды в запись - а она возми и поменяйся на другую Тоже не угадал (хотя в первых версиях у меня так было), клинтский датасет перед рефрешем запоминает номер позиции по айдишнику, а после рефреша на него же перескакивает. В результате создается впечатление что при исчезновении строки сверху все строки просто сдвигаются, вместе с прицелом. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 13:25 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
fyndaМожно обновлять грид по таймеру раз в N (N - настраиваемо) секунд. Сел пить чай - включил таймер, и пусть поглядывает себе. А вообще нефиг чаи расписать на рабочем месте! ;) Тогда чем обновление по таймеру лучьше обновления по событитю? fyndaНе заметно или пока не заметно? ;) Уже два с половиной года не заметно ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 13:31 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Да уж, всё это здорово, но вот если бы за Event-ом можно было бы <int > приклеить, то не нужно было бы городить такое как FreemanZAV. Многим, так или иначе приходится подобное выдумывать. Когда я спросил у уважаемых гуру-создателей, почему решили отказаться от возможности высылать эвенты с параметрами, то ответ был простой и главное информативный: "патамучто" :( Хотя есть ряд задач, где действительно проще выслать ID с параметром, чем городить внешние таблицы-логи, таблицы с событиями, таблицы с клиентами и т.д. мне бы эта штука очень даже подошла, хоть у меня нет никакого грида. просто нужно знать какая запись в таблице запись изменилась. Можно конечно udf написать, которая по отдельному порту по TCP пакетик высылает с ID записи и на триггер повесить, но это тоже изврат нехилый - отдельный коннект на такую штуку держать... Короче, объясните мне, кто может, в чём я ошибаюсь и почему параметр в эвенте является вселенским злом? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 13:49 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
to АВП Ну вот опять. Если миллион записей вставляем, куда складывать параметры до комита и в какой форме давать параметры клиенту. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 13:54 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Лебедкин Тогда чем обновление по таймеру лучьше обновления по событитю? Смотря как часто eventы приходят. Если за эти N секунд, что юзер на экран не смотрит - их десяток наваливается, то перечитываться запрос реже будет. Если за N*10 - один event, то ничем, хуже даже. Просто изначально вопрос был "как тут без event'ов", ну я и выдал идею, _как_. А _надо ли_ - это отдельный вопрос. ;) Лебедкин fyndaНе заметно или пока не заметно? ;) Уже два с половиной года не заметно А, ну тогда конечно "работает - не трогай" :) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 14:01 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Лебедкин Sash*угу, сел пользователь - прицелился, ткнул дважды в запись - а она возми и поменяйся на другую Тоже не угадал (хотя в первых версиях у меня так было), клинтский датасет перед рефрешем запоминает номер позиции по айдишнику, а после рефреша на него же перескакивает. В результате создается впечатление что при исчезновении строки сверху все строки просто сдвигаются, вместе с прицелом. ну так это если он в кнопку редактировавать жмет, а если он дважды щелкает на третей сверху строке - то она еще как из под курсора может выскочить ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 15:25 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Лебедкин И что бы тут не говорили про кривое программирование, система на основе рефрешей по событиям реально работает (не без огрехов кончно, а где их нет?), а значит имеет право на жизнь Право на жизнь имеют все, включая олигофренов. Не нам решать кому жить, на то повыше есть. А вот как жить... Ысчо раз: диспетчеру информация о заявках нужна только в момент, когда он готов и собирается принять решение об обслуживании и выбор заявки. В режиме idle ему нужна информация только о _наличии_ заявок, чтобы принять другое решение - просмотреть список или пойти попысать. То есть, по уму эвенты нужны всего лишь для накручивания визуализации счётчика заявок при регистрации (а возможно и скручивания по событию завершения обслуживания), ну и, может, помявкивания в стиле аськи. Но если нужно поддерживать у начальства уверенность в том, что не зря вбухали бабки в высокоскоростную сеть с дорогими свитчами и мощный сервак - что ж, можно и порефрешить. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 15:33 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
FreemanZAVНу вот опять. Если миллион записей вставляем, куда складывать параметры до комита и в какой форме давать параметры клиенту. а сейчас где "миллион эвентов" лежит"? - шутка ;) Ну мне как-то не приходило в голову, что такая система может использоваться кем-то для отбработки массовых операций. В моей задаче всегда присутствует иникальный ПК и все операции производятся только с конкретной записью. Возможно можно решить задачу хранения "миллиона параметров", например ограничением использования этой системы на работу с выборкой возвращающей одну запись. Есть же такие проверки при других операциях. Хотя я конечно не специалист по написанию серверов БД и может есть еще тысяча других причин, по которым невозможно реализовать такую систему. Это уже будет объяснение получше чем "патамучто", т.к. информация о возможной реализации параметров была, а потом вопрос как-то "рассосался". FreemanZAV и в какой форме давать параметры клиенту. Можно как виндовое сообщение. или еще проще один int и хватит, а в него хоть ID из конкретной таблички, хоть тот же ID из таблицы "событий", в которой может быть хоть 100кб информации. В любом случае имеем однозначно идентифицируемую ссылку на инициатора события. система отклика может проста и прозрачна без массы дополнительных таблиц и запросов. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 15:40 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
АВП FreemanZAVНу вот опять. Если миллион записей вставляем, куда складывать параметры до комита и в какой форме давать параметры клиенту. а сейчас где "миллион эвентов" лежит"? - шутка ;) Гусары, молчать! В одном счётчике. АВП Ну мне как-то не приходило в голову, что такая система может использоваться кем-то для отбработки массовых операций. В моей задаче всегда присутствует иникальный ПК и все операции производятся только с конкретной записью. Возможно можно решить задачу хранения "миллиона параметров", например ограничением использования этой системы на работу с выборкой возвращающей одну запись. Иногда лучше жевать (С). Примерный код _строкового_ (а у нас других нет, но насчёт табличного тоже можно похихикать) триггера: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
АВП Есть же такие проверки при других операциях. При каких, если не секрет? Имеется в виду изумление сервера на подзапросе, возвращающем курсор, в селекте? Разницы не осчусчаем? АВП Хотя я конечно не специалист по написанию серверов БД Это заметно. Однако тут нужно просто быть специалистом сначала подумать, потом сказать, а не наоборот. Серп что-то совсем ржавчиной зарос, пора заточить да омыть красненьким. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 15:55 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Привет, Amris! Ты пишешь: AmrisAM> Серп что-то совсем ржавчиной зарос, пора заточить да омыть красненьким. Недосуг мне. Сочинительствую я. Процессы и структуры рисую, мыслю чё ещё понадобится, походу дополняю чего нету ... А серп готов передать в твои руки. Вот он: -- With best regards, Мимопроходящий. Posted via ActualForum NNTP Server 1.2 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 16:06 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
kdv -> МП МП -> AM ... всемирная история, банк и.............л чё-то заскучали гуры ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 16:07 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Нафик-нафик. Всё на мои старческие плечи взвалить возжелал? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 16:08 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Привет, Amris! Ты пишешь: Amris AM> Нафик-нафик. Всё на мои старческие плечи взвалить возжелал? Ну, тады пущай ржавеет (пока) -- With best regards, Мимопроходящий. Posted via ActualForum NNTP Server 1.2 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 16:13 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Хотетелям event-ов с параметрами: 1. Заводим в базе табричку под параметры с PK, заполняемым из генератора 2. В триггере/SP/прямо с клиента заполняем параметры и дергаем Event (он один на всю систему) 3. Пишем программу-робота которая висит рядом с сервером и слушает именно этот Event. 4. Робот, получив Event, стартует снапшот транзакцию, вычитывает из таблички еще неотправленные Event-ы с параметрами и рассылает их клиентам. Помечает вычитанные Event-ы как отправленные и коммитит транзакцию. Протокол передачи по вкусу - хоть UDP, хоть TCP, хоть по почте, хоть SMS или вообще голосовым сообщением... ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 16:18 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
основная проблема - не перевыполнять запрос целиком, а получить с сервера только те записи, которые изменились. Причем даже в последнем случае совершенно необязательны евенты с идентификаторами. Я где-то видел статью про то, как 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. (тут бы и удалить эти записи в буфере клиентдатасета) Комментарии? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 16:20 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
да, добавлю, что это описание примера репликации, или рассылки изменений, на самом деле. то есть здесь никто "рефрешить", и тем более через евенты, не собирался :-) Есть сервак, а есть туча агентов, которые сами по себе, когда им надо, получают информацию об изменениях данных на сервере. Просто потому, что их предполагалось много, и если бы они по евенту ломанулись сразу на сервак, то ... Собственно, еще более на самом деле это описание "серверного" приложения. Потому что клиент только сообщал, в каком он состоянии, а серверная аппликуха для него подгребала данные и отправляла. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 16:24 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
kdvКомментарии?Да брось ты, тут уже этих рекомендаций и советов дадено. А людЯм нуна эвенты и шоп было круто и без телодвижений. У них РЕЛИГИЯ. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 16:27 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Лентяй Л> Хотетелям event-ов с параметрами: Л> 1. Заводим в базе табричку под параметры с PK, заполняемым из генератора Л> 2. В триггере/SP/прямо с клиента заполняем параметры и дергаем Event (он Л> один на всю систему) ........Я похожим образом сообщения юзверям рассылаю когда надо их повыгонять из проги. А можно и принудительно выкинуть. -- Dik76 Posted via ActualForum NNTP Server 1.2 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 16:32 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
kdv Комментарии? Мл.. Ё.. Ох.. Вы чо с Лентяем на пару курите-то? Повелись на прокто-логгию? Не стыдно? Раз не дают сервер с сеткой убить штатными средствАми, приделаем свои лисапедные костыли? Сам же говоришь насчёт того, что по смещению от читанного в прошлый раз хрень получается с некоммиченными. На колу мочало. Всё просто дОнельзя. У мя уже мозоль на языке в этом месте, а dimitr молчит который год аки рыба в пироге. Current_Transaction колонкой записи и в параметры евента и ВСЁ. Получил эвент завершения транзакции - тривиально выбираешь её данные. А впендюрить в просмотровый ClientDataSet проще некуда - Edit-Insert-Post, Delete. Он же изменения за щекой держит. Только ApplyUpadates не давать и всё. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 16:35 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
kdvЯ где-то видел статью про то, как ClientDataSet сделать так, чтобы в него закачивать (прямо в буфер) нужные записи, а не все целиком. Но - не помню, увы. Код: plaintext 1. 2. 3. 4. 5.
kdv3. для отлова удалений все несколько сложнее. Или на удаления надо положить, если их нет, или сделать отдельную таблицу, параллельную исходной, и при удалении складывать туда идентификаторы (pkfield) удаленных записей. Тут, правда, с генераторами ничего не выйдет, т.к. записи могут удаляться как попало, поэтому если требуется проверять "удаленные за сегодня", то надо добавить в ПК этой доп. таблицы еще и столбец типа DATE. (тут бы и удалить эти записи в буфере клиентдатасета) Комментарии?Зачем DATE ? Ещё один генератор, именно для таблицы удалённых. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 16:58 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Сам же говоришь насчёт того, что по смещению от читанного в прошлый раз хрень получается с некоммиченными. На колу мочало. нет никакой хрени с некомиченными. генератор - это просто указатель на максимальный ид на текущий момент. если мы получим идентификаторы меньше - ничего страшного, прочитаем в след. раз. у нас же есть максимальный реально полученный (коммиттед) идентификатор. Current_Transaction колонкой записи и в параметры евента и ВСЁ ну дак нет же этого. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 17:01 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Ну вот. Получил чего хотел. Натыкали носом в это самое... Ну да я не в обиде. В принципе такой реакции и ждал, иначе молчал бы и оставался дальше в неведении, что хочу невозможного да еще в извращенной форме :) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 17:07 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
kdv нет никакой хрени с некомиченными. генератор - это просто указатель на максимальный ид на текущий момент. если мы получим идентификаторы меньше - ничего страшного, прочитаем в след. раз. у нас же есть максимальный реально полученный (коммиттед) идентификатор. Твой запрос: select * from table where pkfield > :saved_pkfield_value and pkfield <= gen_id(pk_gen, 0) що буим делать с pkfield<:saved_pkfield_value которые в момент назначения его таковым не были ещё закоммиченными? Без лога изменения гарантированно не вытаскиваются. Лог может гарантированно применяться для вытаскивания изменений только в случае пометки вытаскивающей транзакцией вытаскиваемых данных. В частном случае - пометки удалением из лога. kdv Current_Transaction колонкой записи и в параметры евента и ВСЁ ну дак нет же этого. Из-за таких вот и нет, видать, наверное никак не придумает как дать _только разумные_ параметры к евенту приделывать. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 17:15 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Amris Mirddin Из-за таких вот и нет, видать, наверное никак не придумает как дать _только разумные_ параметры к евенту приделывать. Да почему же никак не придумает. Сделал я уже давным давно систему с "внешней табличкой", в которой и идентификаторы юзеров и регистрация на события и внешний монитор, который отслеживает корректность действий и то что юзер зарегестрированный еще не "отлетел". Только вот хотел поинтересоваться, почему собственно не реализуется параметр для эвента, что мешает. Вот собственно и всё. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 17:27 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Amris MirddinМл.. Ё.. Ох.. Вы чо с Лентяем на пару курите-то? Повелись на прокто-логгию? Не стыдно? Раз не дают сервер с сеткой убить штатными средствАми, приделаем свои лисапедные костыли? Ну вот, попал под раздачу, да еще в какой компании! Я, собственно говоря, только изложил, как можно своими силами организовать Event с параметрами, но нигде вроде не говорил, что я за рефрешение гридов по Event-ам. Да и ДК вроде о репликации размышляет... ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 17:35 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Amris MirddinУ мя уже мозоль на языке в этом месте, а dimitr молчит который год аки рыба в пироге. Current_Transaction колонкой записи и в параметры евента и ВСЁ. я пять лет курю эту траву и меня уже не цепляет ;-) на самом деле, current_transaction архитектурно никак не кошернее rec_id, просто на практике безопаснее. Но усраться можно и с ней. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 18:30 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
що буим делать с pkfield<:saved_pkfield_value которые в момент назначения его таковым не были ещё закоммиченными? да ничего не будем! saved_pkfield_value это грубо говоря MAX(pkfield_value) из полученных. я ж там написал, специально, что на генератор ориентируемся как на теоретический максимум, а не на фактический. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 18:41 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
dimitr Amris MirddinУ мя уже мозоль на языке в этом месте, а dimitr молчит который год аки рыба в пироге. Current_Transaction колонкой записи и в параметры евента и ВСЁ. я пять лет курю эту траву и меня уже не цепляет ;-) Курить надо менше. Даже Минздрав вон предупреждает. dimitr на самом деле, current_transaction архитектурно никак не кошернее rec_id, просто на практике безопаснее. Но усраться можно и с ней. Ай, я тебя умоляю. Как это не кошернее? Усраться с current_transaction = усраться с потоком транзакций как таковым, и несколько байт в размере посылки, а не в количестве посылок, тут никакой рояли не играет. Так штаа... Не катит твой радикализьм. Даже свинина становится кошерной если свинья почесалась об стену синагоги. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 18:43 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
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. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 18:54 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
в промежуток времени после срабатывания ивента на клиенте, но перед повторным взводом его в режим ожидания, может закоммититься несколько транзакций. Т.е. клиент после этого получит одно уведомление с несколькими ID. Архитектурно - те же яйца, просто безопасней на практике. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 18:55 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
dimitrв промежуток времени после срабатывания ивента на клиенте, но перед повторным взводом его в режим ожидания, может закоммититься несколько транзакций. Т.е. клиент после этого получит одно уведомление с несколькими ID. Архитектурно - те же яйца, просто безопасней на практике. Привет Дима. А в очередь их никак не выстроить? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 19:00 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
dimitrв промежуток времени после срабатывания ивента на клиенте, но перед повторным взводом его в режим ожидания, может закоммититься несколько транзакций. Т.е. клиент после этого получит одно уведомление с несколькими ID. Архитектурно - те же яйца, просто безопасней на практике. Несколько - это сколько в риали? 100? 1000? Фигня по сравнению с мировой революцией. А вот записей - да, может быть и 10 000 000. Тебя же философии ещё успели поучить, в отличие от нынешнего поколения, должен понимать, что количество переходит в качество не непрерывно, а диалектическим скачком. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 19:00 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
уточняю свою позицию. Я не против данной фичи, при условии ее эффективной и безопасной реализации. Amris не даст соврать, как давно эта работа началась. Но на сабжевый вопрос буду продолжать отвечать "патамучта". Ибо тема уже набила оскомину. А большинство хотельщиков - неумытые извращенцы, истязающие себя с особым цинизмом. Прикручивать к ивентам событийную семантику - архитектурное зло. Альтернативные варианты (в том числе предложенный current_transaction) рассматриваются, но с низким приоритетом. У меня на эту тему все. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 19:06 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
ЛентяйА в очередь их никак не выстроить? можно, но тогда придумай для них новый термин и напиши новый код. К ивентам это уже отношения иметь не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 19:09 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
dimitr ЛентяйА в очередь их никак не выстроить? можно, но тогда придумай для них новый термин и напиши новый код. К ивентам это уже отношения иметь не будет. Пажди-пажди-пажди. Чё-т я окончательно запутался как ты эти параметры видишь. Промой мозги плиз: Event 'MyEvent'+Param в случае множественного срабатывания это MyEvent 1,2,3 или MyEvent 1 MyEvent 2 MyEvent 3 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 19:15 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Amris Mirddinколичество переходит в качество не непрерывно, а диалектическим скачком для вас все вполне приемлемо, спору нет. Но яйца с точки зрения реализации в обоих случаях безумно схожи. А я уже не уверен, что предложенный мной 5 лет назад вариант действительно красив и оптимален. Ибо долго читал пейджер. Возможно, зря :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 19:15 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Amris MirddinEvent 'MyEvent'+Param в случае множественного срабатывания это MyEvent 1,2,3 или MyEvent 1 MyEvent 2 MyEvent 3 в моей реализации многолетней давности - первое. Бо второе имеет мало общего с бессмертными идеями г-на Старки. Но сейчас в моей смутной голове все это видится малость по другому: MyEvent (3) 1 2 3 т.е. ивент со счетчиком пихаются клиенту насильно, а вот параметры он вытягивает сам, если они ему нужны. Эдакое сочетание push+pull, синхронизированный кентавр DMBS_ALERT+DMBS_PIPE (в терминологии оракла). ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 19:26 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
dimitr[quot Amris Mirddin]Event 'MyEvent'+Param в случае множественного срабатывания это MyEvent 1,2,3 или MyEvent 1 MyEvent 2 MyEvent 3 в моей реализации многолетней давности - первое. Бо второе имеет мало общего с бессмертными идеями г-на Старки. Иопть. А я-то, дурень, мыслил в плане второго. И жаль и странно, что в бессмертном не так, оно как-то имхо органичнее - событие отличающееся от предыдущего, неважно чем, есть другое событие. dimitr Но сейчас в моей смутной голове все это видится малость по другому: MyEvent (3) 1 2 3 т.е. ивент со счетчиком пихаются клиенту насильно, а вот параметры он вытягивает сам, если они ему нужны. Эдакое сочетание push+pull, синхронизированный кентавр DMBS_ALERT+DMBS_PIPE (в терминологии оракла). На первый взгляд кривенько как-то - раз параметры заказывали, значит они будут нужны вроде как скорее всего всегда. Очередь на клиенте была бы логичнее чем лазать за ней на сервер. Гридорефрешераторов приструнит пожалуй, а вот репликаторам-логоводам лишние телодвижения. Настораживают не как таковые, а дополнительными задержками, и, пожалуй, относительно немалыми. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 19:47 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Amris Mirddinжаль и странно, что в бессмертном не так, оно как-то имхо органичнее - событие отличающееся от предыдущего, неважно чем, есть другое событие событие есть строка, на которую подписывается клиент. Отсюда вывод - параметр не есть часть события. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 20:16 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Привет, dimitr! Ты пишешь: dimitrd> событие есть строка, на которую подписывается клиент. d> Отсюда вывод - параметр не есть часть события.Походу. Подписку по маске, сложно сделать? -- With best regards, Мимопроходящий. Posted via ActualForum NNTP Server 1.2 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 20:18 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
в общем, так. Буду писать статью про то, как эти долбаные ивенты задумывались, как были сделаны и как работают. С мега-доскональными деталями. После чего все курят оный опус. В конце лета тему продолжим. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 20:20 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
МимопроходящийПодписку по маске, сложно сделать? с этого я и начинал. По сути те же яйца. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 20:24 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Привет, dimitr! Ты пишешь: dimitr МимопроходящийПодписку по маске, сложно сделать? d> с этого я и начинал. По сути те же яйца.Ну, тебе виднее... -- With best regards, Мимопроходящий. Posted via ActualForum NNTP Server 1.2 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 20:26 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
dimitr Amris Mirddinжаль и странно, что в бессмертном не так, оно как-то имхо органичнее - событие отличающееся от предыдущего, неважно чем, есть другое событие событие есть строка, на которую подписывается клиент. Отсюда вывод - параметр не есть часть события. Нда. Вот к чему приводит отклонение от общесистемных принципов при проектировании подсистемы. Это как с денормализацией - никогда не делай её вместо, а только кроме, а то самая извращённая фантазия не поможет предугадать когда и на какие грабли наступишь при малейшей подвижке постановки. Нет чтоб rdb$events, возможность подписаться только на зарегистрированные там события и к ним уже хоть колбасу привязывай - не, притянутые за уши строки на клиенте, клиент вмешивается в серверную логику и она начинает зависеть от того, что ни малейшим боком к серверу не относится... В общем ты как всегда прав, самое разумное - забить до лучших времён. Как оно есть, оно почти неюзабельно, переделывать капитально - заломаешь тучу действующих приложений, пристраивать сбоку другой правильный мезонинчик - не настолько велика потребность, есть чем заняться более практически востребованным... ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2005, 20:38 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
kdv3. для отлова удалений все несколько сложнее. Или на удаления надо положить, если их нет, или сделать отдельную таблицу, параллельную исходной, и при удалении складывать туда идентификаторы (pkfield) удаленных записей. Тут, правда, с генераторами ничего не выйдет, т.к. записи могут удаляться как попало, поэтому если требуется проверять "удаленные за сегодня", то надо добавить в ПК этой доп. таблицы еще и столбец типа DATE. (тут бы и удалить эти записи в буфере клиентдатасета) я далеко не гуру, и очень боюсь, что на меня накричат, мол велосипед ... но я делаю так (вариант 100% рабочий): в таблицах, за изменением которых надо следить, заводятся дополнительно 2 поля: FCHANGECNT integer, FDEL integer FCHANGECNT - заполняется из отдельного генератора при любом измении или добавлении FDEL изначально =0, если хотим удалить запись, то ставим его в 1, и не забываем перезаполнить FCHANGECNT из генератора а теперь, на клиенте, когда первый раз грузим табличку, выполняем select * from tabler where FDEL=0, запоминаем максимальное FCHANGECNT, которое встретим в ней, грузим только с FDEL=0 а если хотим обновить табличку, выполняем select * from table where FCHANGECNT>(значение, запомненное клиентом) для каждой полученной этим запросом записи 3 варианта: 1. если запись с таким ПК в локальном буфере уже есть и новое FDEL=1, то удаляем ее из локального буфера, 2. если запись с таким ПК в локальном буфере уже есть, то перезаписываем остальные поля из полученной записи в буфер 3. если заиси с таким ПК нет, добавляем ее в лок. буфер конечно, для реализации этой логики пришлось написать свой компонент :(( ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2005, 08:01 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Да, забыл уточнить, после обновления опять-таки надо запонить максимальное значение FCHANGECNT, чтобы обновлять в следующий раз ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2005, 08:07 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
А вот не по теме. Если у меня 200 пользователей и я каждого подпишу на 2 события, много ли будет проблем. Есть, в принципе возможность евенты не юзать, но сними удобнее. В общем при таких условиях юзать или не юзать? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2005, 08:23 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Карабас Барабасконечно, для реализации этой логики пришлось написать свой компонент :(( А компонентом, в исходниках, не поделишся? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2005, 09:31 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
FreemanZAVЕсли у меня 200 пользователей и я каждого подпишу на 2 события, много ли будет проблем. что ты называешь проблемой? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2005, 09:56 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Лебедкин Карабас Барабасконечно, для реализации этой логики пришлось написать свой компонент :(( А компонентом, в исходниках, не поделишся? думаешь, он тебе понравится ? 1. он не потомок датасета, представляет собой TList с записями, т.е. в дбгриде его не отобразить :)) умеет только в DrawGrid отображаться 2. в гриде редактор не предусмотрен 3. транзакция у каждого компонента своя (ну так исторически сложилось, а переделывать сейчас некогда и неохота) 4. он на бильдере сделан, в дельфи проблемы могут быть 5. работат только с integer, double precision, varchar, char ну и т.д. и т.п. вобщем заточен под мои конкретные нужды ... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2005, 10:07 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
dimitrв общем, так. Буду писать статью про то, как эти долбаные ивенты задумывались, как были сделаны и как работают. С мега-доскональными деталями. После чего все курят оный опус. В конце лета тему продолжим. Кстати, спасибо за чтиво на ночь . Я лично при сочинении запроса всегда абстрактно представляю, как с ним будет разбираться сервер. Надеюсь с прочтением статьи мои абстрактные представления стали ближе к реальности . И по поводу Event-ов - в этой ветке тоже наступило некое просветление. А уж когда статья будет... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2005, 10:20 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
4. В билдере мне и надо (вернее предподчительние) 1. Мда - а я думал именно потомок DS Для связи с сервером IB API использует или IBX/FIB? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2005, 10:24 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
ЛебедкинДля связи с сервером IB API использует или IBX/FIB? IBX - цепляется компонет к IBDatabase, создаются внутренние IBSQL, IBTransaction (2 штуки - на чтение и на модификацию, хотя особого смысла в 2-х нет, т.к. он читает данные и всегда завершает транзакцию) да, еще, он не расчитан на квотированные идентификаторы, все имена полей приводит к одному регистру короче, ограничений куча, единственный плюс - возможность обновления больших наборов данных на клиенте мне не жалко, могу и выложить исходники, только ведь сам потом ко мне придешь, мол то не так, да это не эдак ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2005, 10:41 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Кхм. Вполне можно совместить при визуализации/редактировании данных синхронное отображение без перечитывания всего набора данных. Просто нужно несколько иначе рассматривать методы отображения и синхронизации. Чтобы трафик не нагружать, не требовать от эвентов IB того, что они не могут, и чтобы картинка на экране не мельтешила. Сразу скажу - без Bold, хотя идею стянул оттуда; все "стандартными" средствами. Ну, почти стандартными. С использованием эвентов InterBase. Проверено и запущено - работает. Кому действительно нужно, могу прислать демку и рассказ "о том, как.", пишите на e-mail. Только без обсуждения того, нужно это или нет - это просто есть, сделано и работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2005, 10:55 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
mv Проверено и запущено - работает. Кому действительно нужно, могу прислать демку и рассказ "о том, как.", пишите на e-mail. Ты лучше по прошлой теме отчитайся, а то только тайну наводишь, а как рассказать - так нет тебя :( ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2005, 11:02 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
dimitrчто ты называешь проблемой? В 1.0 кажеться были проблемы с событиями, при отваливании коннекта. Но вообще, проблема в том, что в короткий срок туева хуча народу должна заколотить туеву хучу данных, да докучи еще столько же делают отчеты. Не хотелось бы иметь напрягов с производительностью. (А кстати, в FB HASH JOIN планируется? ) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2005, 11:06 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Карабас Барабасда, еще, он не расчитан на квотированные идентификаторы, все имена полей приводит к одному регистру это фигня все - некритично Карабас Барабас короче, ограничений куча, единственный плюс - возможность обновления больших наборов данных на клиенте так это и есть главная фишка Карабас Барабас мне не жалко, могу и выложить исходники, только ведь сам потом ко мне придешь, мол то не так, да это не эдак давай файл с основной логикой идеи, я использовать твой компонент, как таковой, не сбираюсь, мне идея понравилась - хочу подробно разобраться. Ну, возможно, задам еще пару вопросов что там для чего. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2005, 11:07 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
тут основные методы: LoadFromDB и UpdateFromDB ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2005, 11:27 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Вот, понадобилось тоже заняться этой ерундой интересной темой. Собственно, вполне подойдет, думаю, способ с пометкой записей timestamp или счетчиком обновления таблицы и последующей выборкой на клиента записей, измененных с момента последней выборки. А что касается опасности пропуска записей, между получением метки и завершением транзакции которых клиент успеет произвести выборку - то не так это и страшно. Назад в будущееВремя... У меня сколько угодно времени! У меня машина времени! Можно брать записи не с момента последней выборки, а чуть раньше. Ну да, записи будут рефрешиться повторно, но ведь это Amris MirddinФигня по сравнению с мировой революцией. Конечно, если сидят сотни машинисток, то это уже будет серьезной проблемой, но ведь в реальности это редкость. А если теоретически. Неужели нельзя отследить момент пропуска записей? Теоретически количество событий (а ведь мы его знаем, не так ли?) должно быть не больше, чем количество обновленных записей при очередной выборке (на каждое закомиченное обновление получаем одно событие). Если вести лог изменений в отдельной таблице, то достаточно подсчитывать количество событий и количество выбранных из лога записей. А если не вести лог, а ограничиться метками в основной таблице? Тогда можно завести поле "версия" и в after update делать NEW.Версия = OLD.Версия + 1 . Тогда при выборке where Update_ID > :LastUpdateID суммировать разницы версий (между полученной из базы и локальной - полученной ранее) для всех обновленных записей и сравнивать с количеством полученных событий. Ну а если обнаружили "недосдачу", то откатываться назад до тех пор, пока количество событий и количество обновленных записей как минимум не сравняются. Трава хороша, но одному курить скучно. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2006, 07:18 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Sextonспособ с пометкой записей timestamp или счетчиком обновления таблицыесли ты используешь счетчик обновлений, то пропуска быть не должно, если я все правильно понимаю ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2006, 07:26 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Под окатом назад можно теоретически понимать, например, повтор выборки с постепенным уменьшением LastUpdateID (если установить сразу в 0, то будет FullRefresh, так?). Да, речь идет о случае отсутствия удалений (или предположении, что отслеживание удалений нас не интересует). ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2006, 07:35 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Карабас Барабас Sextonспособ с пометкой записей timestamp или счетчиком обновления таблицыесли ты используешь счетчик обновлений, то пропуска быть не должно, если я все правильно понимаю Неправильно, ибо тынц. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2006, 07:40 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
SextonНеправильно, ибо тынц.дак ты храни на клиенте последнее значение счетчика, зачем из генератора брать ? или я чего-то не догоняю ? Posted via ActualForum NNTP Server 1.3 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2006, 07:51 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Sextonв after update делать NEW.Версия = OLD.Версия + 1 Ой, after update, конечно, заменить на before update, а в before insert делать NEW.Версия = 1 Карабас Барабасдак ты храни на клиенте последнее значение счетчика, зачем из генератора брать ? или я чего-то не догоняю ? Еще раз тынц внимательнее. Зачем там сравнене с генератором (то есть, хуже то не будет, но зачем?), я и сам не понял. Там суть не в этом. Ну и Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2006, 08:07 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
А, дак ты совсем про другое PS: А ты зачем полугодовалый топик поднял ? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2006, 13:20 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Карабас БарабасА ты зачем полугодовалый топик поднял ? Возникла необходимость сделать автообновление данных при многопользовательской работе. Столкнулся с проблемами реализации. Стал искать топики на эту тему, чтобы найти ответы, а нашел описание тех же самых проблем. Так как тема далеко не новая, то поднял старый топик, чтобы новый не плодить. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2006, 13:35 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
SextonТеоретически количество событий (а ведь мы его знаем, не так ли?) должно быть не больше, чем количество обновленных записей при очередной выборке (на каждое закомиченное обновление получаем одно событие). Уточнение. Общее количество полученных событий должно быть не больше, чем общее количество обновленных записей. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2006, 13:39 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
SextonВозникла необходимость сделать автообновление данных при многопользовательской работеКак один из вариантов - способ, описанный мною же, тут же, там и удаленные записи отслеживаются /topic/187250&pg=-1#1586487 Posted via ActualForum NNTP Server 1.3 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2006, 13:40 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
SextonУточнение. Общее количество полученных событий должно быть не больше, чем общее количество обновленных записей.Да нафига вобще обновление делать по событию ? Чтобы все моргало непрерывно ? Даже если ты ограничишь обновления по минимальному промежутку между ними, все равно это неудобно. Мое ИМХО состоит в том, что только пользователь должен решать, когда ему надо увидеть обновленные данные. Posted via ActualForum NNTP Server 1.3 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2006, 13:44 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Карабас Барабас SextonВозникла необходимость сделать автообновление данных при многопользовательской работеКак один из вариантов - способ, описанный мною же, тут же, там и удаленные записи отслеживаются /topic/187250&pg=-1#1586487 Так и я пришел к такому же способу в конце концов (только мне больше понравился вариант с timestamp, так как timestamp у меня все равно используется). И в реализации прост, учитывая, что формы у меня генерятся автоматом. Гонял возможные варианты работы этого метода и понял, что теоретически может быть пропуск данных. Думал, умные люди знают, как сделать правильно. А умные люди пишут о той же самой проблеме. Стал думать дальше и пришел в голову способ, который сюда и запостил: может кто подскажет, где в нем ошибка. Карабас БарабасДа нафига вобще обновление делать по событию ? Чтобы все моргало непрерывно ? Даже если ты ограничишь обновления по минимальному промежутку между ними, все равно это неудобно. Мое ИМХО состоит в том, что только пользователь должен решать, когда ему надо увидеть обновленные данные. А с чего будет моргать? Как правило, в событии обновляется всего несколько записей (а в большинстве случаев одна). Разумеется, запоминаю состояние курсора и отключаю обновление Data-Aware компонентов, а потом все это восстанавливаю. Разумеется, если DataSet не в dsBrowse, данные кладутся в буфер и выбираются из него, как только DataSet переходит в этот режим. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2006, 14:01 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
SextonА с чего будет моргать? Как правило, в событии обновляется всего несколько записей (а в большинстве случаев одна). Разумеется, запоминаю состояние курсора и отключаю обновление Data-Aware компонентов, а потом все это восстанавливаю. Разумеется, если DataSet не в dsBrowse, данные кладутся в буфер и выбираются из него, как только DataSet переходит в этот режим.может быть, я не прав, может быть ты права ... (С) Бутусов Posted via ActualForum NNTP Server 1.3 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2006, 14:35 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Карабас Барабасможет быть, я не прав, может быть ты права ... (С) Бутусов Да не так это и важно. Идеальных решений все равно нет. Я просто выложил способ, так как не могу обнаружить в нем проколов. Вдруг кто-то другой сможет. Может, предположние, что всегда известно количество посланных из базы событий не верно, может еще чего... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2006, 14:43 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Никогда не возникало необходимости динамически обновлять наборы данных на клиенте. Обычно вешаю на форму кнопочку "Обновить" и пользователю этого достаточно. Ну и сам при необходимости refresh выполняю. Перед редактированием к примеру. Ну да ладно... Вот интересно, как народ поступает с добавленными записями. На клиенте висит набор данных уфильтрованный и засортированный ползателем насмерть. И тут приходит event, по поводу того, что запись с id таким-то добавили. И чего делать? Считать эту запись с сервера, потом на клиенте разбираться попадает ли она под условие в selectsql? А там черте-что может быть. Это-ж на клиенте еще один мини-сервер под эту фигню реализовать надо. Ну и с сортировкой не проще... Или просто переоткрыть Query? Тогда нафига пляски с event-ами? Да и может переоткрытие операция серьезная (висим n минут пока сервер запрос выполнит, и соседи тоже не в восторге). А в результате ползателю эта запись нафик не нужна была... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2006, 15:39 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Лентяй Вот интересно, как народ поступает с добавленными записями. На клиенте висит набор данных уфильтрованный и засортированный ползателем насмерть. И тут приходит event, по поводу того, что запись с id таким-то добавили. И чего делать? TpFIBDataSet.CacheAppend(id, true) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2006, 16:36 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Sexton Лентяй Вот интересно, как народ поступает с добавленными записями. На клиенте висит набор данных уфильтрованный и засортированный ползателем насмерть. И тут приходит event, по поводу того, что запись с id таким-то добавили. И чего делать? TpFIBDataSet.CacheAppend(id, true) И чего, FibDataSet при этом распарсит Sql-оператор в SelectSql проверит, попадает ли добавляемая запись под where кляузу и решит, нано ли вставлять этот id в локальные буфера DataSet? Если да, снимаю шляпу. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2006, 16:57 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Лентяй И чего, FibDataSet при этом распарсит Sql-оператор в SelectSql проверит, попадает ли добавляемая запись под where кляузу и решит, нано ли вставлять этот id в локальные буфера DataSet? Если да, снимаю шляпу. Fib просто вставит запись в локальный буфер, а потом сделает для нее Refresh. А по теме вопроса, есть ли просчеты в предложенном способе так никто ничего... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2006, 18:58 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Да нет проблем. Но платно ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2006, 19:09 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Amris MirddinДа нет проблем. Но платно Да меня бы устроила даже инфракрасная коагуляция анальной трещины: да, нет. Ну а потом можно и комментарии добавить. Вопрос ведь не практический, а так - спортивный. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2006, 19:13 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Amris Mirddin Но платно Я плакаль! Сцылку в мемориз! ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2006, 19:31 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
А вот еще интересная ситуация (вариаций много придумать можно). Имеем SelectSQL такого скажем вида: Код: plaintext 1. 2. 3.
Ладно, это цветочки. А что вот с этим делать? Код: plaintext 1. 2.
Удаляем запись из Tbl2 и, о чудо, - у соседа добавляется тысченка-другая записей в гриде. Класс, теперь вставляем другую запись в Tbl2 - у соседа пропадет сколько-там записей из грида. Или вааще все. А теперь корректируем значение какой нибудь записи - у соседа какая-то часть записей пропадает, и еще сколько-то добавляется... Вообщем на select-ах чуть сложнее палки и веревки проктология становиться все очевиднее... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2006, 22:11 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
ЛентяйА вот еще интересная ситуация (вариаций много придумать можно). Имеем SelectSQL такого скажем вида: Код: plaintext 1. 2. 3.
Один обработчик вешается сразу на события от всех таблиц, входящих в запрос (на Фибах получить список таблиц элементарно). В обновляющем запросе используется тот же select, что и в основном, с наложением дополнительного условия Datastamp >= :LastDataStamp (ну или кому что нравится). Дата (или счетчик - опять же, кому что нравится) обновления записи берется максимальная между t.Дата и s.Дата. Версия записи определяется суммированием t.Версия+s.Версия. Далее все сводится к случаю с одной таблицей. Но с одним условием: в составном select'е должны учавствовать только таблицы, связанные 1:1, причем выбираться должны все записи. Иначе, нарушится связь между количеством событий и количеством выбранных версий. То есть, в общем случае метод с версиями не подходит и отследить пропуск записей при обновлении невозможно, что и требовалось доказать. Доказано Лентяем Получается, что обновление действительно проще делать по таймеру с выборкой записей, измененных с момента последней выборки минус какое-то "буферное время", а события использовать лишь для того, чтобы не делать "холостые" обновления: если между тиками не произошло событий, то и обновлять нечего. Лентяй Ладно, это цветочки. А что вот с этим делать? Код: plaintext 1. 2.
Удаляем запись из Tbl2 и, о чудо, - у соседа добавляется тысченка-другая записей в гриде. Класс, теперь вставляем другую запись в Tbl2 - у соседа пропадет сколько-там записей из грида. Или вааще все. А теперь корректируем значение какой нибудь записи - у соседа какая-то часть записей пропадает, и еще сколько-то добавляется... Реальный пример этого случая мне в голову не пришел, но не важно - мы же рассуждаем теоретически. Такой запрос не сделает то же самое, но без подзапроса: Код: plaintext 1. 2. 3.
Как я написал выше, удаление я не рассматриваю: в моем случае удаление отсутствует по причине необходимости репликации, а лог вести не хочется. К тому же, желательна необходимость восстановления недавно удаленных записей. Так что удаление делается пометкой записи на удаление. Время от времени записи, помеченные на удаление "давно" удаляются физически. Вообщем, типичный проктологический способ. Невозможность вставки записи с такими же значениями уникальных полей, что и у помеченных на удаление записей не считается проблемой. А что мешает помечать записи в запросе? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Далее все сводится к предыдущему случаю, который сводится к случаю с одной таблицей (но в общем случае уже без отслеживания соответствия версий событиям). А вот проблема с тем, что одновременно может измениться большое количество записей - это реальная проблема, согласен. В этом случае можно делать так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Лентяй Вообщем на select-ах чуть сложнее палки и веревки проктология становиться все очевиднее... Покупал я сканер сестре недавно. Выбрал по инету подходящую модель со слайд-модулем. В одной комп. фирме ее не оказалось и мне стали впаривать совершенно другую: более старую, более дорогую и без слайд-модуля. Все свелось к попытке убедить меня, что слайд-модуль не так уж и нужен, что сестра вполне может обойтись и без него. Справедливо? Да, наверное. Да, в фотолаборатории сделают все качественнее, чем получится на слайд-модуле бытового сканера. Но в итоге заказ был сделан в другой фирме, где этой модели также не было: ее без лишних вопросов поставили в заказ и через некоторое время привезли. Отсюда вывод: заказчика не должны интересовать технические проблемы исполнителя. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2006, 10:29 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
SextonПолучается, что обновление действительно проще делать по таймеру получается, что обновление НЕ надо делать ни по таймеру, ни по евентам.... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2006, 10:33 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
kdv SextonПолучается, что обновление действительно проще делать по таймеру получается, что обновление НЕ надо делать ни по таймеру, ни по евентам.... Эх, да я понимаю. Но ведь если хочется. Если сделать этот несчастный таймер и сделать возможность его отключения, то хуже-то никому не будет, верно? ;-) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2006, 10:41 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Вот ведь воисстину - когда коту нехрен делать, он себе яйцы лижет ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2006, 14:24 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Amris MirddinВот ведь воисстину - когда коту нехрен делать, он себе яйцы лижет +1 И это продолжается на протяжении нескольких страниц. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2006, 14:31 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Amris MirddinВот ведь воисстину - когда коту нехрен делать, он себе яйцы лижет Да ну знаю я, знаю, что это "грязная работа" (в смысле, не качественная). Но даже если отказаться от синхронизации изменения между пользователями, остается еще необходимость синхронизации изменений между датасетами одного приложения. Если юзер меняет название организации и не наблюдает этого изменения в ранее открытой накладной или отчете, это его сильно огорчает. Делать синхронизацию вручную... нуу... когда-нибудь потом. А пока что всех одной шашкой и ниипет. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2006, 14:58 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
SextonА пока что всех одной шашкой и ниипет. фпотку Posted via ActualForum NNTP Server 1.3 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2006, 14:59 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Карабас Барабас SextonА пока что всех одной шашкой и ниипет. фпотку Ох, праведники все. Да я бы тоже Windows переписал, чтобы он безглючным был, и 1С бы переделал... и мир бы во всем мире... Но увы, суровая реальность: юзеру не нужны красивые технические решения, ему нужно, чтобы в срок и чтобы как-то работало. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2006, 15:11 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Кстати вспомнилось, что когда я впервые прочитал про events первая мысль именно такой и была. Обновлять данные на клиенте. С интернетом тогда было не очень, поэтому потыркался сам. Единственный прок от тырканья был в том, что более детально разобрался с уровнями изоляции транзакций. Помню тогда попутно родилась такая схема - в триггерах пишуться в спец табличку сведения об изменениях в БД с id измененной записи, именем пользователя и еще чем-то, там же посылается Event. Рядом с сервером висит приложение, которое ловит event-ы от сервера, вычитывает данные из этой таблички и своим протоколом уведомляет клиентов об изменениях, передавая при этом необходимые параметры... Но потом, когда начал пытаться реализовывать все это хозяйство на реальных наборах данных, а не на просто на тестовой табличке - быстро пришел к выводу, что овчинка выделки не стоит. Да и других, РЕАЛЬНЫХ, задач было выше крыши. Поэтому забросил тогда это дело очень быстро и до сих пор как-то обхожусь... P.S. Разобразись тут наконец с моей машиной. Плохо заводилась в морозы. Полетел (как-то с извратом) датчик температуры. Компьютер офигевал и лил слишком много бензину. Причем когда ее всеж-таки удавалось завести, через какое-то время датчик начинал работать нормально. Как раз в это время я подъезжал к ремонту и подключался к диагностическому компьютеру... Попутно вылезла еще одна ошибка которая мне понравилась : "Слишком низкий уровень шума двигателя". ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2006, 15:13 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Sextonчтобы в срок и чтобы как-то работало.нет ничего проще и надежнее, чем кнопка "обновить" Posted via ActualForum NNTP Server 1.3 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2006, 15:16 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Карабас Барабаснет ничего проще и надежнее, чем кнопка "обновить" Это мы знаем. Но этого юзер не знает. А объяснять юзеру, что ему больше идет синий, когда он хочет красный - не в моих правилах. Хочет сомнительную фишку? Пожалуйста. А также кнопочку для отключения и ручной заменитель, когда автоматика надоест. Я свою задачу выполнил? Выполнил. Юзер доволен? Доволен. А что мне еще надо? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2006, 15:24 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
SextonДа ну знаю я, знаю, что это "грязная работа" (в смысле, не качественная). Но даже если отказаться от синхронизации изменения между пользователями, остается еще необходимость синхронизации изменений между датасетами одного приложения. Если юзер меняет название организации и не наблюдает этого изменения в ранее открытой накладной или отчете, это его сильно огорчаетА нехрен открывать накладную в немодальном окне. Нет такой необходимости - водить более одного докУмента одновременно ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2006, 16:23 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
hvladА нехрен открывать накладную в немодальном окне. Нет такой необходимости - водить более одного докУмента одновременноУ меня недавно по этому поводу дискуссия была. Щас глчну чем там закончилос. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2006, 16:57 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
hvladА нехрен открывать накладную в немодальном окне. Нет такой необходимости - водить более одного докУмента одновременно При всем моем уважении - к сожалению есть. Например необходимость обработки более срочного заказа, при этом пользователи почему-то не хотят закрывать текущий заказ, вот и открывают еще одну копию программы. А для немодальных окон есть куча способов решить проблему с уведомлением. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2006, 17:39 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Михаил К.Например необходимость обработки более срочного заказа, при этом пользователи почему-то не хотят закрывать текущий заказ, вот и открывают еще одну копию программы. А для немодальных окон есть куча способов решить проблему с уведомлением.1. Закрыть (откатить) текущую накладную. 2. Передать другому оператору. 3. Открыть вторую копию программы (как это ни некрасиво). 4. Делать модальность на уровне родителя, а не на уровне приложения (хотя лично я от нее отказался). ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2006, 18:27 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
hvladА нехрен открывать накладную в немодальном окне. Нет такой необходимости - водить более одного докУмента одновременно У меня можно открыть любое количество форм, таблиц, отчетов и склеить друг с другом в любом сочетании. Не, не, спорить не буду: изврат и еще какой. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2006, 19:15 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Sextonсклеить друг с другом в любом сочетанииЧего-чего? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2006, 19:26 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам Sextonсклеить друг с другом в любом сочетанииЧего-чего? Docking windows ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2006, 19:44 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
SextonDocking windowsА зачем? Чтобы было попроктологичнее? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2006, 19:48 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам SextonDocking windowsА зачем? Чтобы было попроктологичнее? Ну вот, я же предупреждал: Sextonспорить не буду: изврат и еще какой. Лень мне было формочки расставлять. А так они генерятся в виде отдельных табов внизу главной формы при выборе юзером формы в дереве компонентов (типа дельфийского), а юзер может табы-формы отрывать и располагать в нужных ему порядке и комбинации с автозапоминанием заданного положения. Надо мне с ленью как-то бороться. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2006, 19:58 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Sexton Гаджимурадов Рустам SextonDocking windowsА зачем? Чтобы было попроктологичнее? Ну вот, я же предупреждал: Sextonспорить не буду: изврат и еще какой.Проехали, все равно оффтоп. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2006, 20:01 |
|
Вопрос по POST_EVENT
|
|||
---|---|---|---|
#18+
Господа, есть новости, новые идеи, предпосылки к новым идеям... по сабжевому вопросу? Или, возможно есть, то что Дима обещал в тут тыц . ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2016, 16:54 |
|
|
start [/forum/topic.php?all=1&fid=40&tid=1562165]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
46ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
175ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 277ms |
0 / 0 |