Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» InterBase и FireBird: вопросы по работе и их решение

Автор: AlexCoRu
Дата сообщения: 28.06.2012 16:29
ant0ni02004
Ну это ж старая сказка, я думал что-то новое. Другие клиенты будут подписаны на событие "CLIENTS_CHANGED_123"?

Добавлено:
Было б кстати иметь возможность подписаться на все события или подписавшись на событие "CLIENTS_CHANGED" клиент получал бы события начинающиеся с "CLIENTS_CHANGED", но целиком и часть после "CLIENTS_CHANGED" интерпретировал самостоятельно. И тогда параметров никаких передавать не надо.
Автор: delover
Дата сообщения: 28.06.2012 21:16
All
Вышли новые фибы, так что теперь алертер может принимать любые события а не только те под которые подписан клиент.

Добавлено:
Хочу начать с простого - с Английского языка. Не все понимают что SQL похож на английский. Найдите английскую букву которая похожа на спрятавшуюся под крышей
abcdefghijklmnopqrstuwvxyz.
Если Вы нашли такую букву и Вы не против что муха жужжит так же, то простите англичан, муха жужжит, но у букв нет крыши. Я к тому что если кто в SQL букву z видел отпишите а то птички не делятся.
Автор: delover
Дата сообщения: 28.06.2012 23:26
Групбай - полезная автоматика превращающая людей в монстров. Неправильная реакция людей очевидна но не полезна - уходит от математики. Всё же моя хотелка касается простых запросов. Да в моих проектах и сервер и приложение в одном процессе в одних исходниках, это не значит что я плебей. Пока мы не поймём что такое плохо а что хорошо не будет этики. Я буду лгуном если не признаю. При группировке требуется индекс. Если он не создан он создаётся в любом случае. И последовательное чтение делается по нему - в любом случае. Чтобы дурень мухлюющий индексами не догадался можно зажержку врубать. Если групбай работает медленно попробуйте создать индекс. Но аналитика SQL мне тоже не нравится временами, есть не формализованные недовольства, но всё же я благодарен аггрегатным функциям.
Автор: Oslik18
Дата сообщения: 29.06.2012 01:01
Такая ситуация - посадили меня на место сисадмина в сетку с 40-50 ПК. установлен фаербёрд. никогда с серверами не сталкивался, увы. подскажите - с чего начать? что почитать? один из ПК перестал видеть сеть, а я ума не приложу - куда податься...
Автор: EugeneBoss3
Дата сообщения: 29.06.2012 06:04
Oslik18
Начни хотя бы с Начинаем работать с Firebird Sql Server
Автор: AlexCoRu
Дата сообщения: 29.06.2012 10:50

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

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

А при чем здесь Firebird?
Автор: AlexCoRu
Дата сообщения: 29.06.2012 15:39
delover
Цитата:
Вышли новые фибы, так что теперь алертер может принимать любые события а не только те под которые подписан клиент.
А пиздеть не мешки ворчить?
Автор: delover
Дата сообщения: 29.06.2012 19:28
AlexCoRu
))))))) Наполовину пиздёж - фибы вышли но я ещё не успел купить
Автор: EugeneBoss3
Дата сообщения: 30.06.2012 00:56
AlexCoRu
delover
О Великий и Могучий русский ненормативный...
Автор: AlexCoRu
Дата сообщения: 30.06.2012 06:56
delover
Цитата:
теперь алертер может принимать любые события а не только те под которые подписан клиент.
А так? Я новые фибы уже опробовал, но мне они не нужны. Или в копилке какие-то не те фибы?
Автор: AlexCoRu
Дата сообщения: 30.06.2012 15:34
Раз уж с евентами так глухо и использовать практически невозможно. Зайдём с другой стороны. Посоветуйте лёгенький простенький компонент для очереди сообщений (MQ).
Автор: AnGo
Дата сообщения: 30.06.2012 16:39
delover
Если русский язык для тебя родной, то может быть ты станешь ставить знаки препинания?
Уж больно напрягает читать твой поток слов.

Добавлено:
delover

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

Когда, какие, что нового?
Автор: miwa
Дата сообщения: 30.06.2012 19:54
AnGo

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

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

AlexCoRu

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

Штатно в ФБ отсутствуют очереди сообщений, если я правильно понял вопрос. Как правило обходится связкой event + отдельная таблица с соответвующей логикой обработки.
Автор: ant0ni02004
Дата сообщения: 30.06.2012 20:10
AlexCoRu
по поводу событий - есть вариант анализировать количество, которое вместе с событием приходит(т.е. сколько раз событие произошло). когда клиент после редактирования получает событие, и количество = 1 то это именно он и отредактировал. а если >1 значит еще кто-то успел за это же время.

подписываться на события по маске, увы, нельзя. там проблемы возникнуть могут при большом количестве записей, и можно сеть положить. вот их и не сделали (хотя хотели)

Автор: miwa
Дата сообщения: 30.06.2012 20:31
ant0ni02004
Там не столько проблемы с сетью, сколько с самой логикой. Дело в том, что события отправляются клиенту только по завершении транзакции, что логично - ведь если транзакция откатится, то и событие не наступит.

Так вот - если в транзакции, например, 10 тысяч раз произошла вставка (апдейт) в таблицу - зачем клиенту 10 тысяч одинаковых событий? Поэтому событие и отправляется один раз, независимо от того, сколько раз в транзакции отработал post_event.
Автор: AlexCoRu
Дата сообщения: 30.06.2012 21:10
Кстати, в ibdac у алертера есть метод SendEvent (у фибов аналога нет), но от этого не легче. Согласен и с ant0ni02004, и с miwa - можно перегрузить очередь событий. Но как вариант использовать сторонний MQ-сервер, а триггерах вызывать UDF которая сгенерирует сообщение тому самому MQ-серверу, а клиент (компонет делфи, как часть клиента) получит сообщение. Вроде, так в MSSQL делается.

Автор: miwa
Дата сообщения: 30.06.2012 21:25
AlexCoRu
Вариант безусловно имеет право на жизнь, но во-первых тянуть внешнюю UDF (+дополнительный гемор при смене платформы), а во-вторых еще и внешний MQ-сервер. При том, вопрос «что делать, когда после пары тысяч изменений пользователь откатил транзакцию» в этом случает стает еще интереснее.

Не, лично мне табличка с нужными полями (время события, текст события, автор события, еще что надо) + один-единственный event клиенту "посмотри обновления" после успешного коммита транзакции как-то больше нравится
Автор: AlexCoRu
Дата сообщения: 30.06.2012 21:53
miwa, а когда табличку с нужными полями чистить? В случае, если клиенты онлайн круглосуточно.


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

Добавлено:

Цитата:
что делать, когда после пары тысяч изменений пользователь откатил транзакцию
Стоп! Но триггер сработает по коммит.
Автор: miwa
Дата сообщения: 30.06.2012 22:59
AlexCoRu

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

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


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

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

Код:
select event_name, event_owner
from tbl_events
where id > rev_id
and что_еще_надо
Автор: AlexCoRu
Дата сообщения: 01.07.2012 10:56

Цитата:
Перед вставкой КАЖДОЙ записи в таблице. Или перед обновлением опять же каждой записи.
Хм, я бы посылал евент после, но, видимо, сути это не меняет.
Автор: vetal71
Дата сообщения: 01.07.2012 11:15
всем привет.
есть таблица со структурой id integer, parentid integer, item_caption varchar(50). подскажите как в процедуре обойти все узлы дерева по определенному id и получить строку типа Родитель1->Родитель2->....->Элемент
Автор: ant0ni02004
Дата сообщения: 01.07.2012 15:08
miwa
да, сейчас получит 1 раз ('TABLE_CHANGE',10000)
а если бы был подписан на TABLE_CHANGE_* получил бы все TABLE_CHANGE_1...TABLE_CHANGE_10000 что могло бы привести к проблемам в сети
Автор: AlexCoRu
Дата сообщения: 01.07.2012 18:48
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
Автор: ant0ni02004
Дата сообщения: 02.07.2012 02:54
AlexCoRu

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

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

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

надо будет изучить вопрос, не был в курсе такого...
Автор: AlexCoRu
Дата сообщения: 02.07.2012 15:05

Цитата:
надо будет изучить вопрос
Просто как возможность. В плане обмена событиями, как припарка.
Автор: miwa
Дата сообщения: 02.07.2012 20:42

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

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


Из любых компонент доступа можно выполнить код типа

Код:
execute block as
begin
post_event('event_name');
end
Автор: ant0ni02004
Дата сообщения: 02.07.2012 22:25
AlexCoRu
miwa
аааа, ну если всем отсылать event тогда понятно. я-то подумал что вдруг можна серверу отсылать что-нибудь а он отреагирует
Автор: miwa
Дата сообщения: 02.07.2012 22:32
ant0ni02004
Неа, все, что он может нареагировать - это разослать сообщение всем подписанным клиентам по окончанию транзакции

Другое дело, что никто не мешает рядом з firebird-ом запустить какой-то процесс, подписать его на нужные сообщения и соответствующим образом реагировать, если надо.
Автор: delover
Дата сообщения: 05.07.2012 18:33
miwa

Цитата:
соответствующим образом реагировать

1)не советую без особой необходимости.
2) Я бы тоже не чистил, если таблица без индексов.
3) Реагировать каким-то процессом - ну либо маньячество ИМХО, либо третья педаль велосипеду, ещё раз ИМХО.

ant0ni02004
Что послано???? Извините туплю иногда, вся пачка эвентов приходит к Вам только когда транзакция типа того, - комит, а до этого увы - как в танке - алертер молчит.

зы
Сори, пока биш увлёкся историей датасурсов. (Да правильно написал - DataSource, кроме родных D, есть ещё варианты)

Добавлено:
miwa
2)+ Не,... генератор то пусть молотит, цифирька не помешает потом при разборах информации для анализа...

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465

Предыдущая тема: Сравнение двух строк


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.