Ответ
При синхронизации клиент-сервера в базе данных обычно хранится:
-
Локальные изменения - данные, изменённые на клиенте, но ещё не отправленные на сервер (помечаются флагом
isSynced=false) -
Метаданные синхронизации:
data class SyncMetadata(
val lastSyncTime: Long,
val syncToken: String?,
val pendingOperations: List<Operation>
)
-
Конфликтующие версии - если сервер и клиент изменили одни данные
-
Очередь операций - для случаев, когда синхронизация прервалась
Ключевые моменты:
- Используются временные метки или версии для разрешения конфликтов
- Хранится состояние синхронизации каждого объекта
- Часто применяется стратегия "последний писатель побеждает" или более сложные merge-алгоритмы
Пример SQL таблицы:
CREATE TABLE items (
id TEXT PRIMARY KEY,
data TEXT,
local_version INTEGER,
server_version INTEGER,
is_dirty BOOLEAN,
last_modified TIMESTAMP
);