Каков наилучший способ синхронизации таблиц 2 sqlite по http и json? - PullRequest
12 голосов
/ 29 ноября 2008

У меня довольно простая проблема с синхронизацией. У меня есть таблица с примерно 10 столбцами, которую я хочу синхронизировать между файлом sqlite на 3 разных клиентах: клиент Iphone, клиент браузера и клиент Ruby on Rails. Поэтому мне нужно простое решение Sycing, которое будет работать для всех 3, то есть я могу легко реализовать его в Javascript, Objective C и Ruby, и оно работает с JSON по HTTP. Я рассмотрел различные компоненты других решений для синхронизации, такие как git, некоторые учебные пособия, разработанные сообществом Google Gears, и плагин rails activ_as_replica. Мой наивный подход заключается в том, чтобы просто создать последнюю синхронизированную метку времени в базе данных, а затем создать список изменений всех удалений по мере их выполнения. (Я не разрешаю обновления записей в таблице). Затем я могу получить все новые записи со времени последней отметки времени, затем объединить их с удаляемыми данными и отправить журнал изменений в виде json по http между тремя решениями.

Должен ли я рассмотреть использование SHA1-хэша или UUID каждой записи или достаточно последней синхронизированной метки времени? Как я могу убедиться, что нет повторяющихся записей? Есть ли более простой алгоритм, которым я мог бы следовать?

1 Ответ

2 голосов
/ 02 декабря 2008

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...