Подтвердить что ты не робот

Каков наилучший способ синхронизации 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 каждой записи или это последняя синхронизированная временная метка? Как я могу убедиться, что нет дубликатов записей? Есть ли более простой алгоритм, который я мог бы выполнить?

4b9b3361

Ответ 1

Я предполагаю, что изменения, вероятно, будут в конце. Я не знаю характера вставки и обновлений, но вот моя идея;

  • Я бы в SHA1 (или MD5, это не имеет значения в этом случае) дней текущего месяца и месяцев до этого. Сравнение с этими отпечатками пальцев - быстрый способ увидеть различия. (Сегодня я уезжаю без внимания)
  • Если в предыдущие месяцы были различия;
    • Если объем за месяц слишком велик, мы можем разделить месяц и просто генерировать ежедневный отпечаток "на лету" вместо сравнения всего месяца.
    • В противном случае мы можем рассматривать ежемесячное изменение так же, как мы рассматриваем ежедневные изменения.
  • После выяснения, где происходят изменения, главная копия отправит список всех уникальных идентификаторов за этот период. (Всегда отправляя информацию сегодня)
  • Затем ведомое устройство удаляет то, что должно быть удалено, и компилирует список идентификаторов, которые нужно вставить.
  • Мастер отправляет только те записи (в полном объеме).

Временные категории (день, месяц) можно настроить в соответствии с объемом данных.

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