Репликация своими руками.

woof

Guest
Репликация своими руками.

Помогите плз, разрешить такую проблему.

Для синхронизации БД на удаленном и домашнем серверах решил написать нечто вроде механизма репликации. Для этого создал таблицу вида

id, query, timestamp, md5(query)

В этой таблице сохраняются все необходимые запросы в полe query. При синхронизации баз данных информация из таблицы запросов записывается в файл, архивируется и отправляется клиенту, который успешно вставляет инфорацию в БД на домашнем компьютере.

Все это работает и достаточно неплохо, за исключением одной проблемы. Рассмотрим в качестве примера некоторую таблицу table с таким набором полей id, field1, field2, ... где id - autoincrement. Информация в эту таблицу заносится с помощью такого запроса

insert into table (field1, field2, ...) values (val1, val2, ...)

Именно эта строка и сохраняется в поле query таблице репликации.

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

Я вижу два способа решения этой задачи.
1. Формирование полной строки вставки в таблицу
insert into table (id, field1, field2, ...) values (idval, val1, val2, ...), но в этом случае появятся дополнительные накладные расходы на формирование idval - лишний select.
2. Создание уникальных индексов, в которые будет включен полный список полей кроме id

В связи с тем что опыт в написании web приложений у меня небольшой хочу спросить - какой из этих способов лучше использовать? А может есть какой-то другой более правильный вариант?

P.S. Надеюсь что понятно описал проблему :)
 
Сверху