Доброго времени суток.
Появилась проблемка в реализации омена данными удаленного и центрального веб-приложений (php+postgresql). Голову сломал почти от возможных вариантов. Постараюсь сформулировать корректно, в чем требуется помощь.
Суть приложения кратко - учет заявок организации. Есть центральный офис, ктр работает с центральной БД (далее ЦБД), а есть филиалы, ктр работают с локальной БД (далее ЛБД). Для простоты по структуре они одинаковы.
Интернет коннект центрального офиса и филиалов не всегда стабилен, т.е в какой-то момент связь может пропасть - в нашем случае просто пропасть интернет у филиала.
Задача в том, что когда сотрудник в центральном офисе создал новую заявку или апнул старую, нужно отправить эту новую/измененную заявку из ЦБД в ЛБД, чтобы уведомить об этой заявке филиалы. Также необходимо, чтобы соблюдался хотя бы близко к реал-тайму режим обмена. И так же учтен момент возможной пропажи интернета у филиала.
Решение в данный момент мне представляется таким:
1) В ЦБД создать некую табличку, в ктр писать данные для обмена. По триггеру на таблице заявок в эту таблу ложить строку, а далее по крону скрипт на ПХП на стороне центрального офиса обрабатывает эту таблу и рассылает эти данные по списку филиалов - коннект к удаленной БД и вставка в нее записей.
2) В ЦБД создать некую табличку, в ктр писать данные для обмена. По триггеру на таблице заявок в эту таблу ложить строку, а далее из триггера же вызывать скрипт на ПХП, ктр обрабатывает эту таблу и рассылает эти данные по списку филиалов - коннект к удаленной БД и вставка в нее записей.
3) В ЦБД создать некую табличку, в ктр писать данные для обмена. По триггеру на таблице заявок в эту таблу ложить строку, а далее по крону скрипт на ПХП на стороне филиала делает запрос к этой табле и принимает эти данные себе.
Есть ли какие то у вас более правильные/элегантные решения данной задачи? Может возможно как-то из триггера вызывать пхп скрипт, в том числе удаленный?
Заранее спасибо за советы.
По-моему>Интернет коннект
По-моему
>Интернет коннект центрального офиса и филиалов не всегда стабилен, т.е в какой-то момент связь
>может пропасть - в нашем случае просто пропасть интернет у филиала.
и
>Также необходимо, чтобы соблюдался хотя бы близко к реал-тайму режим обмена.
это взаимоисключающие условия.
То что вы описали как решения - вполне имеет право на существования.
Есть и ещё один способ, который называется "выгрузки".
С определённой периодичностью, вы выгружаете табличку в текстовый файл, который затем пробрасывается по филиалам и данные из этого файла загружаются в табличку локальных баз данных. Разумеется, надо сделать по уму, т.е.
- от полученного файла считается MD5. если MD5 совпадает с предыдущей, то грузить данные нет смысла - ничего не менялось.
- при загрузке, данные сперва грузятся во временную табличку, создаются нужные индексы, затем старая табличка подменяется этой новой (временной), а старую даже можно положить в архив, для истории или восстановления.
Достоинства:
1. Не будет "пропавших" записей в любом случае, потому что даже если одна выгрузка не прошла из-за интернета, следующая всё-равно актуализирует данные.
2. Не будет расхождений локальной и центральной баз из-за ошибок или несрабатываний скриптов в филиалах.
3. Возможность работы даже в отсутствии Интернета. На предприятиях, где я работал, для обмена выгрузками вообще часто использовалась электронная почта, из письма робот доставал прикрёплённый файл и обрабатывал его.
Недостатки:
1. Синхронизация данных всё-таки будет осуществляться с определённой периодичностью, т.е. не такая быстрая актуализация данных, как в реальном времени.