| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Синхронизация таблиц в разных базах данных. |
| Автор: unkis 14.1.2011, 22:27 |
| Ребята подскажите пожалуйста, существует ли готовое решение, алгоритм или метод для синхронизации двух таблиц в разных базах данных? У меня следующая задача: Есть Клиент (К) - Сервер (С) приложение. На клиенте установлена H2 база данных а на Сервере MySQL. Общаются они между собой при помощи Вебсервися. Задача заключается синхронизавать одну одинаковую таблицу находящуюся на Клиенте и на Сервере. Данные в эту таблицу могут писаться как на клиентской стороне так и на серверной. Прежде чем изобретать велосипед хотел узнать у вас, может кто-то сталкивался с таким и знает в какую сторону смотреть? Спасибо |
| Автор: COVD 15.1.2011, 17:29 | ||||
Возможно, надо искать решение не в контексте синхронизации баз данных, а как синхронизацию кеша. Клиентов, по определению, может быть много. А сервер один. Поэтому обычно синхронизируют клиентов с сервером, но не наоборот. Клиентская база данных по сути обычно является разновидностью клиентского кеша. Отсюда следует, что клиент должен сначала внести изменение в мастер-таблицу на сервере, и только потом, в случае успеха, продублировать это в локальном кеше, т.е. в вашем случае в локальной таблице. Локальный кеш, вообще говоря, необязателен. Тогда и проблемы синхронизации нет. Синхронизация локального кеша предполагает использование понятия версии. Например, это время последнего обновления. Один из вариантов - клиенты периодически посылают на сервер условный запрос, где в хедере указывается имеющаяся на клиенте версия.
"distributed cache", "in-memory data grid", .. - там вопросы синхронизации решены, но такие системы предполагают в основном внутрисерверное применение, т.е. там мультикаст, тср. Например, Hazelcast. |
| Автор: Старовъръ 15.1.2011, 23:27 |
| Distributed Cache - здесь, по-моему, не причем, вопрос о синхронизации таблиц, а не кешей; хотя с другой стороны, если все записи будут проходить через кеш, то, наверно, как-то можно расширить распределенный кеш, чтоб он в БД клал данные при изменении оных на другой машине. Data Grid - это вообще по сути замена базы данных, т.к. данные хранятся постоянно в памяти, а в обычную БД как правило пишутся только для архивации. По-моему задача вообще решается не на уровне баз данных. Если данные пишутся только из самих приложений, то можно какой-то механизм оповещений придумать, как и предложил COVD, - с optimistic lock'ом. В противном случае мм.. проблема однозначно есть |
| Автор: COVD 17.1.2011, 19:58 | ||
Но ведь раз встает задача синхронизации, значит эта клиентская бд не основное хранилище данных, а .. локальный персистент кеш. Нет? |
| Автор: v2v 18.1.2011, 11:12 |
впервые слышу такое понятие. Погуглив немного, нашёл http://www.rsdn.ru/forum/db/3702520.flat.aspx. таким образом данное понятие и ассоциируется с ембедед(клиентской) бд . |
| Автор: COVD 18.1.2011, 13:51 |
| Браузер сохраняет загруженные странички на диске. Говорят, что браузер кеширует. Не вижу принципиальной разницы, когда сохраняется в локальную базу данных. ОК, не применяют термин, значит не применяют. |
| Автор: Старовъръ 19.1.2011, 09:40 |
| Ну вообще да - это вполне катит на название локального кеша. Единственное в таком случае все данные, которые берутся из-вне и сохраняются, можно называть локальным кешем |
| Автор: COVD 23.1.2011, 21:54 | ||
А если не "из-вне"? Если программа использует локальную базу данных, которую надо раз в сутки синхронизировать с чем-то, то, возможно, эта программа вовсе не "клиент", а терминал, рабочая станция, или еще что-то? |