События с параметрами

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

Модератор: kdv

Deem
Сообщения: 22
Зарегистрирован: 18 фев 2005, 17:37

События с параметрами

Сообщение Deem » 25 май 2007, 15:56

Народ, а события с параметрами у FB бывают?
Это я ваще. Еще во втором издании "Мир Interbase" 2003 Востриков с Ковязиным напсали такой пример:

POST_EVENT 'MY_EVENT' , 'parameter'; (не дословно).

И написали, что для получения параметров есть функция isc_event_params.

Может это только для линуха? Они ничего не говорят об этом. На винде не работает. В доке для виндового, уже 1.5.4*(и даже сторого) , ничего нету.

Они доку не читали?

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Сообщение CyberMax » 25 май 2007, 19:04


Deem
Сообщения: 22
Зарегистрирован: 18 фев 2005, 17:37

Сообщение Deem » 29 май 2007, 11:33

Ге-ге-гее :twisted: .... Так про объединение security с базой, обещанное во втором, и не спрашиваю.
В "Мир IB" написано, что событие с параметрами УЖЕ реализовано. :)

И тогда я его долго пытался вызвать из "мира мертвых".

А уж это был бы прорыв. Это вам не булеан, который заменяется 0 и 1. Тут, чтобы реализовать что-то подобное, приходится городить такой огород!... А надо-то всего получить по событию ID-шку измененной записи.

Ну, ясно. Спасибо.

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

Сообщение kdv » 29 май 2007, 12:06

В "Мир IB" написано, что событие с параметрами УЖЕ реализовано.
оно и было реализовано. в приватном билде. а потом - разреализовано.

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

Сообщение Merlin » 29 май 2007, 12:30

kdv писал(а): оно и было реализовано. в приватном билде. а потом - разреализовано.
Именно по причине позывов пользователей применять для получения ID изменённой записи :wink:

ivl
Сообщения: 59
Зарегистрирован: 22 мар 2006, 15:29

Сообщение ivl » 29 май 2007, 13:06

Merlin писал(а): Именно по причине позывов пользователей применять для получения ID изменённой записи :wink:
Хотелось бы услышать развернутое объяснение чем такой подход не приемлим для использования в базе данных?

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

Сообщение Merlin » 29 май 2007, 13:42

Поиск рулит. Если вкратце - делаем безусловный update таблички-миллионника, укладываем этим сервак, который инфу о них должен прихранить где-то за щекой, после этого делаем коммит и укладываем и сетку и клиента миллионом событий. А главное - зачем. 99% желают рефрешить гриды автоматом, вводя юзера в ступор мелькающим и прыгающим экраном во время его действий и независимо от этих действий.

ivl
Сообщения: 59
Зарегистрирован: 22 мар 2006, 15:29

Сообщение ivl » 29 май 2007, 14:24

Merlin писал(а):Поиск рулит. Если вкратце - делаем безусловный update таблички-миллионника, укладываем этим сервак, который инфу о них должен прихранить где-то за щекой, после этого делаем коммит и укладываем и сетку и клиента миллионом событий. А главное - зачем. 99% желают рефрешить гриды автоматом, вводя юзера в ступор мелькающим и прыгающим экраном во время его действий и независимо от этих действий.
Но это же если у разработчика с головой проблемы. Никто же не заставляет разработчика использовать этот механизм таким зверским образом. Мне кажется странным, что из-за возможности таким образом использовать механизм событий с параметрами, его вообще выкинули.

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

Сообщение Merlin » 29 май 2007, 14:41

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

ivl
Сообщения: 59
Зарегистрирован: 22 мар 2006, 15:29

Сообщение ivl » 29 май 2007, 16:08

Merlin писал(а): Дык, собсно, как только начинаем пользовать для передачи ID, так и попадаем в статистическую зависимость от запросов, которые бог кто бог знает когда бог знает как напишет.
Всё это так. Но при наличии нескольких пользователей (больше одного), большом объёме данных в таблице и их относительно редком штучном изменении, передача ID в событии была бы неплохим способом узнать какие записи изменились и выбрать только их не пребегая к дополнительным и порой изощрённым действиям.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 29 май 2007, 16:19

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

ivl
Сообщения: 59
Зарегистрирован: 22 мар 2006, 15:29

Сообщение ivl » 29 май 2007, 17:05

WildSery писал(а):Даже для пары пользователей и одном изменении в час бредово.
Событие в лучшем случае должно сказать клиенту "у тебя данные протухли".
А клиент это дело обдумать не торопясь, и если ползатель не возражает, считать данные, либо обновив целиком, либо по таймштампу поля, если это почему-то важно (хотя я чё-та с ходу не придумал, когда важно).
А если клиент должен сразу отреагировать на изменения? Если ему вообще не нужны записи, которые не изменялись? Такие ситуации есть и смысла перечитывать всю таблицу я не вижу.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 29 май 2007, 17:33

ivl писал(а):А если клиент должен сразу отреагировать на изменения? Если ему вообще не нужны записи, которые не изменялись? Такие ситуации есть и смысла перечитывать всю таблицу я не вижу.
Вот и задумайся над смыслом термина "сразу", а конкретно что для тебя оно означает. Для меня это обычно значит "как только ползатель перестал работать с предыдущей порцией и хочет освежить данные".
"Записи, которые не изменялись" - вообще никогда или за последние N секунд? (минут, дней)

ivl
Сообщения: 59
Зарегистрирован: 22 мар 2006, 15:29

Сообщение ivl » 29 май 2007, 18:57

WildSery писал(а):Вот и задумайся над смыслом термина "сразу", а конкретно что для тебя оно означает. Для меня это обычно значит "как только ползатель перестал работать с предыдущей порцией и хочет освежить данные".
"Записи, которые не изменялись" - вообще никогда или за последние N секунд? (минут, дней)
Лично для меня смысл термина "сразу" означает именно сразу как изменились, а ни когда он что-то закончил делать. И дело тут совсем не в "скачущих" гридах, коих в клиенте может вовсе не быть. А в измененных данных, важность которых может превышать сам процес действий пользователя. Порой с данными которые изменились важно не только что-то делать, а и знать что именно и на что изменилось.
Что касается "N секунд" -- то лично для меня было важно не "N секунд" и не "никогда", а с момента последнего изменения чего-либо подобного. На много проще выбрать в клиент одну запись, чем весь набор.
В своих разработках я безусловно реализовал данную функциональность другими средствами. Но, на мой взгляд, на сколько проще это было бы сделать существуй подобный механизм.
Воспримите это просто как попытку оправдать полезность существования данной возможности в некоторых ситуациях.

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

Сообщение Merlin » 29 май 2007, 19:59

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

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 29 май 2007, 20:21

Надеюсь, это не NASDAQ :wink:

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

Сообщение kdv » 29 май 2007, 21:00

А если клиент должен сразу отреагировать на изменения?
какие "сразу" - вы смеетесь? Существует 3 (три!) уровня буферизации

1. уровень сервера. "наихудший" - при plan sort в запросе.
2. уровень сервер -> клиент. примерно равен размеру пакета
клиент пока не выдаст все записи пакета "компонентам", сервер не спрашивает.
3. уровень клиентских компонент. буферизация зависит от. самая сильная - clientDataSet.

то есть. пока клиент "отреагирует", буферизация при частых изменениях приведет к тому, что до клиента доедут тыщу раз устаревшие данные.
Забудьте про "реалтайм".

причем, замечу, это никак не зависит от архитектуры сервера - версионник он или блокировочник.

ivl
Сообщения: 59
Зарегистрирован: 22 мар 2006, 15:29

Сообщение ivl » 29 май 2007, 22:38

kdv писал(а): то есть. пока клиент "отреагирует", буферизация при частых изменениях приведет к тому, что до клиента доедут тыщу раз устаревшие данные.
Забудьте про "реалтайм".
Я не говорил про "реалтайм". 1, 2, 3, секунды -- это не критично. Я просто хотел подчеркнуть, что это не часы, минуты или десятки секунд, и тем более не "по желанию пользователя". И не говорил про частый апдейт, а про избирательность выборки на большом объеме данных с их относительно редким и нерегулярным изменением, но с быстрой реакцией на них. Вот набор характеристик, которые оправдывали бы, на мой взгляд, не просто события с параметрами, но и передачу в качестве параметров именно ID записи, чтобы не гонять по сети большие объемы данных и не прибегать к дополнительным ухищрениям. А использовать такой механизм или нет, по моему дело разработчика.
Приводить реальную задачу не хочу. Я просто сомневаюсь, что обсуждение реальной задачи будет иметь далеко идущие последствия в плане реализации параметров у сообщений.
Всё равно, где мне надо было, я сделал по другому, но с большими издержками.

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

Сообщение kdv » 30 май 2007, 09:18

Вот набор характеристик, которые оправдывали бы, на мой взгляд, не просто события с параметрами, но и передачу в качестве параметров именно ID записи, чтобы не гонять по сети большие объемы данных и не прибегать к дополнительным ухищрениям.
все равно на клиенте придется перечитывать больше чем нужно было бы.
в идеале система с передачей событий об изменениях должна быть связана с визуальными клиентскими компонентами, которые при получении события определяют, попадает запись в "окно", видимое пользователем, или в буфер, и перечитывают только ее.
Приводить реальную задачу не хочу.
так всегда и заканчивается.

ivl
Сообщения: 59
Зарегистрирован: 22 мар 2006, 15:29

Сообщение ivl » 30 май 2007, 11:56

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

Ответить