SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 05.05.2010 23:00:07

Артём Н.
Активист
Зарегистрирован: 03.11.2009
Сообщений: 156

Синхронизация данных

Есть проблема в синхронизации данных между несколькими клиентами.
Клиенты имеют списки, например: список неиспользованных бланков, список договоров и т.д., которые загружаются из БД.
Например, один клиент резервирует бланк или добавляет страховую компанию.
Второй клиент должен это отобразить.

Наиболее удобно, я так думаю, было бы оповещение всех клиентов сервером.
Но, вряд ли это возможно.
Т.е., как я думаю, нужно делать опрос сервера через определённый временной интервал.

Но я не могу полностью перестраивать все списки. Или даже списки на активной странице. Если даже полностью перестраивать дерево компаний, будет видно мелькание.
Т.е., я сейчас думаю так, что сервер, по триггерам должен записывать в некую таблицу все добавления/изменения/удаления каждой таблицы, которую клиент может изменить.

В общем-то, такая задача, наверное, достаточно распространена.
Но вот я не знаю откуда подступиться.

Отсюда два вопроса:
1.) Возможно ли сделать оповещение клиентов сервером?
2.) Вариант с таблицей выгляди монструозным. Возможно ли как-то приемлемо реализовать такой вариант?


"И ни птица, ни ива слезы не прольет,
Если сгинет с земли человеческий род.
И весна, и весна встретит новый рассвет,
Не заметив, что нас уже нет..."

Неактивен

 

#2 06.05.2010 11:39:50

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Синхронизация данных

Я в свое время, когда работал программистом, реализовывал второй вариант.
Не очень-то он и монструозен (только сделайте еще в этой табличке id автоинк-
рементальный, и каждый клиент должен помнить id, с которого ему надо вытя-
гивать обновления).

А первый вариант тоже можно сделать, но прийдется немного попрограммировать.
Вы можете написать пользовательскую функцию на компилируемом языке прог-
раммирования (например, С или С++) и встроить ее в MySQL. Таким образом
Вы можете осуществить вообще любое действие, в т.ч. и информирование клиентов.

Неактивен

 

#3 06.05.2010 12:24:58

Артём Н.
Активист
Зарегистрирован: 03.11.2009
Сообщений: 156

Re: Синхронизация данных

Я в свое время, когда работал программистом, реализовывал второй вариант.
Не очень-то он и монструозен (только сделайте еще в этой табличке id автоинк-
рементальный, и каждый клиент должен помнить id, с которого ему надо вытя-
гивать обновления).

Я думал, вообще, про таблицу, в которой фиксируются изменения и время изменения. Клиенты тоже хранят время последней загрузки изменений.
Но таблиц, подверженных изменению через клиент - много... Надо хранить имя таблицы, дополнительно что-то придумывать. Короче, каша какая-то, пока что. %-|
А что делать с автоинкрементным ID?

А первый вариант тоже можно сделать, но прийдется немного попрограммировать.
Вы можете написать пользовательскую функцию на компилируемом языке прог-
раммирования (например, С или С++) и встроить ее в MySQL. Таким образом
Вы можете осуществить вообще любое действие, в т.ч. и информирование клиентов.

Я думал об этом. Вариант не лучший... А что-то вроде LISTEN/NOTIFY нет в MySQL?


"И ни птица, ни ива слезы не прольет,
Если сгинет с земли человеческий род.
И весна, и весна встретит новый рассвет,
Не заметив, что нас уже нет..."

Неактивен

 

#4 06.05.2010 13:20:11

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Синхронизация данных

С id — SELECT * FROM changelog WHERE id > $myid.

Встроенных нотификаций нету, к сожалению.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson