Каков наилучший способ синхронизации 2 таблиц sqlite по http и json?
У меня довольно простая проблема с синхронизацией. У меня есть таблица с примерно 10 столбцами, которые я хочу синхронизировать между sqlite файлом на трех разных клиентах: клиенте Iphone, клиенте браузера и клиенте Ruby on Rails. Поэтому мне нужно простое решение для сидения, которое будет работать для всех 3, т.е. Я могу легко реализовать его в Javascript, Objective C и Ruby и работать с JSON через HTTP. Я рассмотрел различные компоненты других решений синхронизации, например, один из git, некоторые из обучающих программ, которые появились из сообщества gears Google, и плагин rails, называемый act_as_replica. Мой наивный подход состоял в том, чтобы просто создать последнюю синхронизированную метку времени в базе данных, а затем создать журнал изменений всех удалений по мере их создания. (Я не допускаю обновления записей в таблице). Затем я могу получить все новые записи с момента последней отметки времени, объединить их с удалением и отправить журнал изменений как json через http между тремя решениями.
Должен ли я рассматривать использование хэша SHA1 или UUID каждой записи или это последняя синхронизированная временная метка? Как я могу убедиться, что нет дубликатов записей? Есть ли более простой алгоритм, который я мог бы выполнить?
Ответы
Ответ 1
Я предполагаю, что изменения, вероятно, будут в конце. Я не знаю характера вставки и обновлений, но вот моя идея;
- Я бы в SHA1 (или MD5, это не имеет значения в этом случае) дней текущего месяца и месяцев до этого. Сравнение с этими отпечатками пальцев - быстрый способ увидеть различия. (Сегодня я уезжаю без внимания)
- Если в предыдущие месяцы были различия;
- Если объем за месяц слишком велик, мы можем разделить месяц и просто генерировать ежедневный отпечаток "на лету" вместо сравнения всего месяца.
- В противном случае мы можем рассматривать ежемесячное изменение так же, как мы рассматриваем ежедневные изменения.
- После выяснения, где происходят изменения, главная копия отправит список всех уникальных идентификаторов за этот период. (Всегда отправляя информацию сегодня)
- Затем ведомое устройство удаляет то, что должно быть удалено, и компилирует список идентификаторов, которые нужно вставить.
- Мастер отправляет только те записи (в полном объеме).
Временные категории (день, месяц) можно настроить в соответствии с объемом данных.
Конечно, это наивный и простой алгоритм. Если бы я обрабатывал чувствительные/критические данные, я бы искал алгоритм транзакционный.