Обеспечение надежности при синхр-ии таблиц БД чере вебсервис
От: MozgC США http://nightcoder.livejournal.com
Дата: 26.11.07 19:05
Оценка:
Добрый день,
Есть центральная локальная БД (главная), есть БД с похожей структурой на сайте. Необходимые обновления (например обновления или расширение прайс-листа) шлются из центральной БД на удаленную через веб-сервис. Шлю партиями, например по 1000 строк за раз.

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

Мне предложили сделать версионность, т.е. на удаленной БД в таблице вводится колонка version, строки теперь только добавляются (а не добавляются и обновляются) с выставлением поля version на 1 больше версии при последнем удачном апдейте. В случае возникновения ошибки — производим откат, т.е. удаляем все строки с нужным номером версии. При выборке же данных (например показе прайс-листа на сайте) выбираем строку с максимальной версией, т.е. например в случае mysql так:

SELECT * FROM price WHERE ... ORDER BY version DESC LIMIT 1

У данного подхода есть несколько минусов, главным из которых является разрастание БД:
если например в прайсе часто будут обновления по несколько сотен тысяч строк, что в принципе возможно — то таблица прайса будет довольно разрастаться, со всеми вытекающими (требования к месту на сайте, скорость работы с этой таблицей и т.д.)

Вопрос:
Может кто-то предложит более лучший (по каким-либо параметрам) подход к обеспечению надежности синхронизации?

Заранее спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.