Что было бы записано в базе данных в приложении с синхронизацией клиент-сервера

«Что было бы записано в базе данных в приложении с синхронизацией клиент-сервера» — вопрос из категории Базы данных, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

При синхронизации клиент-сервера в базе данных обычно хранится:

  1. Локальные изменения - данные, изменённые на клиенте, но ещё не отправленные на сервер (помечаются флагом isSynced=false)

  2. Метаданные синхронизации:

data class SyncMetadata(
    val lastSyncTime: Long,
    val syncToken: String?,
    val pendingOperations: List<Operation>
)
  1. Конфликтующие версии - если сервер и клиент изменили одни данные

  2. Очередь операций - для случаев, когда синхронизация прервалась

Ключевые моменты:

  • Используются временные метки или версии для разрешения конфликтов
  • Хранится состояние синхронизации каждого объекта
  • Часто применяется стратегия "последний писатель побеждает" или более сложные merge-алгоритмы

Пример SQL таблицы:

CREATE TABLE items (
    id TEXT PRIMARY KEY,
    data TEXT,
    local_version INTEGER,
    server_version INTEGER,
    is_dirty BOOLEAN,
    last_modified TIMESTAMP
);