Страница 1 из 2

Синхронизация локальной БД с сервером

СообщениеДобавлено: 17.06.2012 21:44:48
Delphi
Есть бд на сервере и есть несколько клиентов.
Нужно сделать так, чтобы клиент работал с локальной БД, а при появлении интернета(он есть не всегда) обе БД синхронизировались.
Подскажите, пожалуйста, как правильно сделать?
Спасибо

Re: Синхронизация локальной БД с сервером

СообщениеДобавлено: 17.06.2012 22:21:53
ronin
какая бд?

Re: Синхронизация локальной БД с сервером

СообщениеДобавлено: 17.06.2012 22:41:35
Delphi
ronin писал(а):какая бд?

На сервере сейчас MySQL, локальной пока нет.

Re: Синхронизация локальной БД с сервером

СообщениеДобавлено: 17.06.2012 23:03:59
Little_Roo
Delphi писал(а):Нужно сделать так, чтобы клиент работал с локальной БД, а при появлении интернета(он есть не всегда) обе БД синхронизировались.

Не понял идею...
Предположим, инета нет -> базы у клиентов локальные - так?
Клиент А -> добавил-удалил-отредактировал запись, отвалил...
Клиент Б -> добавил-удалил-отредактировал другую запись...и тут инет появился...синхронизация...и вся работа клиента А коту ректально... :(
Синхронизация локальная-сетевая как должна работать?
Вариантов можно еще придумать...

Или описанная проблема криво сформулирована, либо ой...

Re: Синхронизация локальной БД с сервером

СообщениеДобавлено: 17.06.2012 23:11:51
Delphi
Извините, если плохо сформулировал вопрос.
Тогда нужно синхронизировать только изменения, а не всю бд.
Юзер вообще не должен почувствовать есть/нет интернета.
Редактирование 1 записи 2-умя пользователями одновременно исключено.

Re: Синхронизация локальной БД с сервером

СообщениеДобавлено: 17.06.2012 23:37:41
Brainenjii
когда инет отрубается - начинать вести лог действий с базой. Как только появляется - отправлять лог на сервер, где обрабатывать...

Re: Синхронизация локальной БД с сервером

СообщениеДобавлено: 18.06.2012 00:49:14
Delphi
Brainenjii писал(а):когда инет отрубается - начинать вести лог действий с базой. Как только появляется - отправлять лог на сервер, где обрабатывать...

Вот я так сначала и хотел сделать.
Но есть проблема.
В программе есть таблица, данные в которую идут из MySQL на сервере.
Нужно сделать так, что бы юзер мог смотреть эту таблицу (выбирая нужную дату) в оффлайн режиме тоже.

Re: Синхронизация локальной БД с сервером

СообщениеДобавлено: 18.06.2012 03:58:00
Vadim
Delphi писал(а):Нужно сделать так, что бы юзер мог смотреть эту таблицу (выбирая нужную дату) в оффлайн режиме тоже.

Если Вы получили данные запросом из этой таблицы, когда связь с сервером есть, то пока Вы этот запрос не закроете, этот набор данных завсегда будет на клиенте - пусть смотрит и выбирает, что хочет и когда хочет.

Re: Синхронизация локальной БД с сервером

СообщениеДобавлено: 18.06.2012 07:12:50
xcod
в mysql есть свои механизмы репликации данных
мжт это будет возможно использовать
сам не пользовал, все в теории :)

Re: Синхронизация локальной БД с сервером

СообщениеДобавлено: 18.06.2012 09:11:05
Delphi
Vadim писал(а):
Delphi писал(а):Нужно сделать так, что бы юзер мог смотреть эту таблицу (выбирая нужную дату) в оффлайн режиме тоже.

Если Вы получили данные запросом из этой таблицы, когда связь с сервером есть, то пока Вы этот запрос не закроете, этот набор данных завсегда будет на клиенте - пусть смотрит и выбирает, что хочет и когда хочет.

А если при запуске программы уже нет интернета?
По идеи нужно как-то организовать локальную бд + на сервере, но как сделать?

Re: Синхронизация локальной БД с сервером

СообщениеДобавлено: 18.06.2012 12:31:18
alexey38
Можно и не сложно написать свою технологию синхронизации.
В таблицы, которые могут изменяться введите поля с пользователем и временем модификации.
Также храните время последней синхронизации. Далее потабличные выборки на своей и серверной стороне.
Все остальное уже техника.

Re: Синхронизация локальной БД с сервером

СообщениеДобавлено: 18.06.2012 14:10:19
Ism
Может это поможет

Репликация в MySQL
http://www.mysql.ru/docs/man/Replication.html

Как вариант сделать в программе локальную базу MySql в Embedded режиме , сливать данные туда, а при соединении сбрасывать на сервер

http://dev.mysql.com/doc/refman/5.1/en/libmysqld.html

Re: Синхронизация локальной БД с сервером

СообщениеДобавлено: 18.06.2012 14:18:47
Delphi
Наверное такой вариант подойдет лучше всего.
1 БД на сервере (MySQL)
1 БД у клиента (LiteSQL3, но лучше MySQL, правда тогда поднимать локальный MySQL)
Клиент работает с локальной бд, все команды записываются в лог.
При подключении к интернету команды из лог идут на сервер, а потом сливаем MySQL с сервера клиенту.
Варианта, что 2 клиента отредактировали 1 запись одновременно быть не должно.
Пройдет такая схема?
Ism, спасибо за ссылки, пошёл читать.

Re: Синхронизация локальной БД с сервером

СообщениеДобавлено: 18.06.2012 17:59:14
Vadim
Ism писал(а):Как вариант сделать в программе локальную базу MySql в Embedded режиме

Если я ничего не путаю, Embedded-режим в MySQL только для коммерческого применения.

Re: Синхронизация локальной БД с сервером

СообщениеДобавлено: 18.06.2012 18:40:31
Ism
Не знал