Теперь предположим несколько вещей:
- Таблица файлов очень большая .
- Данные каждой строки в файлах могут быть обновлены в любое время и имеют столбец последнего обновления.
- Я хочу чтобы получить дельту и убедиться, что я идентичен в обеих средах.
- Сначала я выполняю полную синхронизацию, возвращая все записи клиенту.
- Я сохраняю время LastSync в клиенте среде и продолжайте синхронизировать дельты со временем LastSync.
- Я выполняю полную синхронизацию и дельта-синхронизацию с использованием пейджинга: клиент запускает первый запрос для получения счетчика
- code> результатов для разницы и столько же других запросов, необходимых для размера страницы каждого запроса.
Код: Выделить всё
SELECT COUNT(*) FROM files WHERE last_update > @LastSyncTime
Код: Выделить всё
SELECT col1, col2..
FROM files
WHERE last_update > @LastSyncTime
ORDER BY files.id
LIMIT @LIMIT
OFFSET @OFFSET
Что, если, например, первая выборка (выборка Count) будет потребуется некоторое время (например, несколько минут), и за это время больше записей будут обновлены и добавлены в последнее обновление.
Например:< /p>
[*]Выборка счетчика дала 100 записей за 1000 секунд последнего обновления.
[*]1 запись обновлена при получении счетчика.
[*]Теперь последнее обновление 1000 секунд даст 101 запись.
[*] при выборке страницы будет получено только 100 записей из 101 с упорядочиванием по идентификатору
[*]1 запись пропущена и не синхронизирована с клиентом
Я попробовал еще 2 варианта:
[*]Синхронизация с from-to ограничение даты для последнего обновления.
[*]Упорядочение по последнему обновлению вместо столбца id.
< /ul>
Я вижу проблемы в обоих вариантах.
Подробнее здесь: https://stackoverflow.com/questions/509 ... ing-paging