Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Firebird, Interbase > Синхронизация данных


Автор: jsj 2.7.2011, 01:35
Доброго времени суток.

В программировании БД - новичок)
Есть задача - реализовать программу на базе фб с удаленным сервером.

Основной вопрос у меня - как обычно/удобно/эффективнее синхронизировать данные?

Т.е. один клиент изменил запись, как эффективнее об этом узнать остальным клиентам?

(Рассматриваю вариант, без программной надстройки над сервером фб.)

Автор: Gluttton 2.7.2011, 03:39
Цитата(jsj @  2.7.2011,  01:35 Найти цитируемый пост)

Т.е. один клиент изменил запись, как эффективнее об этом узнать остальным клиентам?

Судя по всему в Firebird для этого есть http://www.firebirdsql.org/file/documentation/papers_presentations/Power_Firebird_events.pdf, но мне с ними сталкиваться не приходилось.

Автор: Akella 2.7.2011, 09:06
Цитата(jsj @  2.7.2011,  01:35 Найти цитируемый пост)
Т.е. один клиент изменил запись, как эффективнее об этом узнать остальным клиентам?

Будь очень осторожен, т.к. если один клиент изменит в цикле 1000 записей, то другим клиент придёт 1000 сообщений, а если клиентов штук 30? Сервер должен разослать 30 тысяч сообщений? О_о

Лучше по таймеру проверять и на форме (в окне или в области уведомлений ОС) показывать сообщение и/или кнопку с текстом "Есть новые записи" и клиенты пусть сами думают, нажимать или нет?

Автор: jsj 2.7.2011, 11:17
Цитата(Akella @ 2.7.2011,  09:06)
Цитата(jsj @  2.7.2011,  01:35 Найти цитируемый пост)
Т.е. один клиент изменил запись, как эффективнее об этом узнать остальным клиентам?

Будь очень осторожен, т.к. если один клиент изменит в цикле 1000 записей, то другим клиент придёт 1000 сообщений, а если клиентов штук 30? Сервер должен разослать 30 тысяч сообщений? О_о

Лучше по таймеру проверять и на форме (в окне или в области уведомлений ОС) показывать сообщение и/или кнопку с текстом "Есть новые записи" и клиенты пусть сами думают, нажимать или нет?

Ок, т.е. все равно по таймеру, но делать select ?
Или есть другой механизм?

Автор: Frees 2.7.2011, 20:44
Цитата(Akella @  2.7.2011,  12:06 Найти цитируемый пост)
Будь очень осторожен, т.к. если один клиент изменит в цикле 1000 записей, то другим клиент придёт 1000 сообщений, а если клиентов штук 30? Сервер должен разослать 30 тысяч сообщений? О_о

это в том случае, если каждое изменение было в своей транзакции.


Цитата(Akella @  2.7.2011,  12:06 Найти цитируемый пост)
Лучше по таймеру проверять и на форме (в окне или в области уведомлений ОС) показывать сообщение и/или кнопку с текстом "Есть новые записи" и клиенты пусть сами думают, нажимать или нет?

дак при получении евента кнопку и показывать, зачем таймер?

Добавлено через 1 минуту и 12 секунд
Цитата(jsj @  2.7.2011,  14:17 Найти цитируемый пост)
Или есть другой механизм?

механизм POST EVENT

Автор: jsj 3.7.2011, 17:10
Цитата(Frees @  2.7.2011,  20:44 Найти цитируемый пост)
механизм POST EVENT 


посмотрел пост_евент, я так понял можно посылать только константу строковую,
а можно как-нибудь передать например номер айди(поле) добавленной записи?

Автор: Frees 3.7.2011, 21:57
Цитата(jsj @  3.7.2011,  20:10 Найти цитируемый пост)
посмотрел пост_евент, я так понял можно посылать только константу строковую,а можно как-нибудь передать например номер айди(поле) добавленной записи?

Нет, только константную строку, 

Автор: jsj 3.7.2011, 23:17
Цитата(Frees @  3.7.2011,  21:57 Найти цитируемый пост)
Нет, только константную строку,

Ясно - спасибо - чтож думаю и так разрулимся )))

Автор: Akella 4.7.2011, 09:45
Создай временную таблицу или хранимую процедуру или ещё что-нить придумай. Туда пиши нужный ID и отправляй строковую константу. П клиент при получении события знает, что нужно проверить таблицу и там узнать ID. Есть глобальные переменные ещё, но они отдельные, для для каждого клиента своё значение переменной, хоть и имя переменной одинаковое.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)