Добрый день,
Есть центральная локальная БД (главная), есть БД с похожей структурой на сайте. Необходимые обновления (например обновления или расширение прайс-листа) шлются из центральной БД на удаленную через веб-сервис. Шлю партиями, например по 1000 строк за раз.
Проблема в том, что так как пересылка данных идет через интернет, а так же нет контроля удаленного сервера (т.е. он может просто уйти в даун или еще что угодно в общем-то), то возможны какие-либо ошибки, которые приведут к рассинхронизации, потере некоторых данных на удаленной БД.
Мне предложили сделать версионность, т.е. на удаленной БД в таблице вводится колонка version, строки теперь только добавляются (а не добавляются и обновляются) с выставлением поля version на 1 больше версии при последнем удачном апдейте. В случае возникновения ошибки — производим откат, т.е. удаляем все строки с нужным номером версии. При выборке же данных (например показе прайс-листа на сайте) выбираем строку с максимальной версией, т.е. например в случае mysql так:
SELECT * FROM price WHERE ... ORDER BY version DESC LIMIT 1
У данного подхода есть несколько минусов, главным из которых является разрастание БД:
если например в прайсе часто будут обновления по несколько сотен тысяч строк, что в принципе возможно — то таблица прайса будет довольно разрастаться, со всеми вытекающими (требования к месту на сайте, скорость работы с этой таблицей и т.д.)
Вопрос:
Может кто-то предложит более лучший (по каким-либо параметрам) подход к обеспечению надежности синхронизации?
Заранее спасибо.