Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » InterBase и FireBird: вопросы по работе и их решение

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104

Открыть новую тему     Написать ответ в эту тему

AlexCoRu

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Вышли новые фибы, так что теперь алертер может принимать любые события а не только те под которые подписан клиент.
Если правда, то как добиться того же в IBDAC? Или через api.

Всего записей: 911 | Зарегистр. 04-09-2003 | Отправлено: 11:50 29-06-2012
exteris

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
один из ПК перестал видеть сеть, а я ума не приложу - куда податься...

А при чем здесь Firebird?

Всего записей: 382 | Зарегистр. 14-04-2003 | Отправлено: 13:07 29-06-2012
AlexCoRu

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
delover
Цитата:
Вышли новые фибы, так что теперь алертер может принимать любые события а не только те под которые подписан клиент.
А пиздеть не мешки ворчить?

Всего записей: 911 | Зарегистр. 04-09-2003 | Отправлено: 16:39 29-06-2012
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AlexCoRu
))))))) Наполовину пиздёж - фибы вышли но я ещё не успел купить

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 20:28 29-06-2012
EugeneBoss3



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AlexCoRu
delover
О Великий и Могучий русский ненормативный...

Всего записей: 247 | Зарегистр. 15-09-2009 | Отправлено: 01:56 30-06-2012
AlexCoRu

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
delover
Цитата:
теперь алертер может принимать любые события а не только те под которые подписан клиент.
А так? Я новые фибы уже опробовал, но мне они не нужны. Или в копилке какие-то не те фибы?

Всего записей: 911 | Зарегистр. 04-09-2003 | Отправлено: 07:56 30-06-2012 | Исправлено: AlexCoRu, 07:57 30-06-2012
AlexCoRu

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Раз уж с евентами так глухо и использовать практически невозможно. Зайдём с другой стороны. Посоветуйте лёгенький простенький компонент для очереди сообщений (MQ).

Всего записей: 911 | Зарегистр. 04-09-2003 | Отправлено: 16:34 30-06-2012
AnGo



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
delover
Если русский язык для тебя родной, то может быть ты станешь ставить знаки препинания?
Уж больно напрягает читать твой поток слов.  
 
Добавлено:
delover

Цитата:
Вышли новые фибы,

Когда, какие, что нового?

Всего записей: 1078 | Зарегистр. 07-07-2002 | Отправлено: 17:39 30-06-2012
miwa

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AnGo

Цитата:
Когда, какие, что нового?

После 7.3 ничего не выходило, delover сидит в танке и радуется жизни иногда радуя и нас
 
AlexCoRu

Цитата:
Раз уж с евентами так глухо и использовать практически невозможно. Зайдём с другой стороны. Посоветуйте лёгенький простенький компонент для очереди сообщений (MQ).

Штатно в ФБ отсутствуют очереди сообщений, если я правильно понял вопрос. Как правило обходится связкой event + отдельная таблица с соответвующей логикой обработки.

Всего записей: 455 | Зарегистр. 10-10-2004 | Отправлено: 20:54 30-06-2012 | Исправлено: miwa, 20:57 30-06-2012
ant0ni02004

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AlexCoRu
по поводу событий - есть вариант анализировать количество, которое вместе с событием приходит(т.е. сколько раз событие произошло). когда клиент после редактирования получает событие, и количество = 1 то это именно он и отредактировал. а если >1 значит еще кто-то успел за это же время.
 
подписываться на события по маске, увы, нельзя. там проблемы возникнуть могут при большом количестве записей, и можно сеть положить. вот их и не сделали (хотя хотели)
 

Всего записей: 442 | Зарегистр. 26-10-2004 | Отправлено: 21:10 30-06-2012
miwa

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ant0ni02004
Там не столько проблемы с сетью, сколько с самой логикой. Дело в том, что события отправляются клиенту только по завершении транзакции, что логично - ведь если транзакция откатится, то и событие не наступит.
 
Так вот - если в транзакции, например, 10 тысяч раз произошла вставка (апдейт) в таблицу - зачем клиенту 10 тысяч одинаковых событий? Поэтому событие и отправляется один раз, независимо от того, сколько раз в транзакции отработал post_event.

Всего записей: 455 | Зарегистр. 10-10-2004 | Отправлено: 21:31 30-06-2012
AlexCoRu

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Кстати, в ibdac у алертера есть метод SendEvent (у фибов аналога нет), но от этого не легче. Согласен и с ant0ni02004, и с miwa - можно перегрузить очередь событий. Но как вариант использовать сторонний MQ-сервер, а триггерах вызывать UDF которая сгенерирует сообщение тому самому MQ-серверу, а клиент (компонет делфи, как часть клиента) получит сообщение. Вроде, так в MSSQL делается.
 

Всего записей: 911 | Зарегистр. 04-09-2003 | Отправлено: 22:10 30-06-2012
miwa

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AlexCoRu
Вариант безусловно имеет право на жизнь, но во-первых тянуть внешнюю UDF (+дополнительный гемор при смене платформы), а во-вторых еще и внешний MQ-сервер. При том, вопрос «что делать, когда после пары тысяч изменений пользователь откатил транзакцию» в этом случает стает еще интереснее.
 
Не, лично мне табличка с нужными полями (время события, текст события, автор события, еще что надо) + один-единственный event клиенту "посмотри обновления" после успешного коммита транзакции как-то больше нравится

Всего записей: 455 | Зарегистр. 10-10-2004 | Отправлено: 22:25 30-06-2012
AlexCoRu

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
miwa, а когда табличку с нужными полями чистить? В случае, если клиенты онлайн круглосуточно.
 
 
Добавлено:
EventTable это как? Как с ней оперировать?
 
Добавлено:

Цитата:
что делать, когда после пары тысяч изменений пользователь откатил транзакцию
Стоп! Но триггер сработает по коммит.

Всего записей: 911 | Зарегистр. 04-09-2003 | Отправлено: 22:53 30-06-2012 | Исправлено: AlexCoRu, 22:55 30-06-2012
miwa

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AlexCoRu

Цитата:
а когда табличку с нужными полями чистить? В случае, если клиенты онлайн круглосуточно.

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

Цитата:
EventTable это как? Как с ней оперировать?

Клиент при получении уведомления делает что-то типа

Код:
 
select event_name, event_owner
  from tbl_events
  where id > rev_id
  and что_еще_надо
 

А prev_id он узнал в предыдущий раз как

Код:
 
select gen_id(gen_tbl_events_id, 0) from rdb$database
 

Если все же надо чистить, тогда отдельный процесс делает что-то навроде

Код:
 
delete from tbl_events where event_timestamp < dateadd(-1 hour to current_timestamp)
 

 
 
Добавлено:

Цитата:
Цитата:
что делать, когда после пары тысяч изменений пользователь откатил транзакцию
 
Стоп! Но триггер сработает по коммит.

Почему? Тригер сработает тогда, когда ему указано. Перед вставкой КАЖДОЙ записи в таблице. Или перед обновлением опять же каждой записи. И сработает столько раз, сколько записей вставилось/обновилось/удалилось.

Всего записей: 455 | Зарегистр. 10-10-2004 | Отправлено: 23:59 30-06-2012
AlexCoRu

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Перед вставкой КАЖДОЙ записи в таблице. Или перед обновлением опять же каждой записи.
Хм, я бы посылал евент после, но, видимо, сути это не меняет.

Всего записей: 911 | Зарегистр. 04-09-2003 | Отправлено: 11:56 01-07-2012 | Исправлено: AlexCoRu, 11:58 01-07-2012
vetal71



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
всем привет.
есть таблица со структурой id integer, parentid integer, item_caption varchar(50). подскажите как в процедуре обойти все узлы дерева по определенному id и получить строку типа Родитель1->Родитель2->....->Элемент

Всего записей: 299 | Зарегистр. 08-09-2008 | Отправлено: 12:15 01-07-2012
ant0ni02004

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
miwa
да, сейчас получит 1 раз ('TABLE_CHANGE',10000)
а если бы был подписан на TABLE_CHANGE_* получил бы все TABLE_CHANGE_1...TABLE_CHANGE_10000 что могло бы привести к проблемам в сети

Всего записей: 442 | Зарегистр. 26-10-2004 | Отправлено: 16:08 01-07-2012
AlexCoRu

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ant0ni02004, не совсем так. Если в триггере:
Код:
CREATE OR ALTER trigger table_aiud for table
active after insert or update or delete position 0
AS
begin
  POST_EVENT 'TABLE_CHANGE';
end
и клиент подписан на событие 'TABLE_CHANGE', то, допустим, при вставке 10000 записей клиент получит 1 раз ('TABLE_CHANGE',10000). А если в этом триггере вызывать UDF которая через сторонний MQ будет посылать сообщение, то тогда будет послано 10000 сообщений MQ-серверу, который в свою очередь пошлёт 10000 сообщений клиентам.
 
Добавлено:
Но я хочу сделать иначе. Клиент вставляет 10000 записей, делает коммит, отправляет сообщение MQ-серверу. MQ-сервер рассылает сообщение всем клиентам. Вот и нужно организовать такую очередь.
 
Из справки IBDAC:
Цитата:
TIBCAlerter.SendEvent Method
Call the SendEvent procedure to send an event with Name.
This procedure is supported only for Firebird 2.0 and higher.
А как сам сервер отреагирует на евент посланый с клиента?

Всего записей: 911 | Зарегистр. 04-09-2003 | Отправлено: 19:48 01-07-2012 | Исправлено: AlexCoRu, 20:04 01-07-2012
ant0ni02004

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AlexCoRu

Цитата:
А если в этом триггере вызывать UDF которая через сторонний MQ будет посылать сообщение

это всё хорошо, если Commit транзакции делается. а если Roollback? сообщения-то уже посланы

Цитата:
Из справки IBDAC ... Call the SendEvent procedure to send an event with Name

надо будет изучить вопрос, не был в курсе такого...

Всего записей: 442 | Зарегистр. 26-10-2004 | Отправлено: 03:54 02-07-2012
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » InterBase и FireBird: вопросы по работе и их решение


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru