← Назад к вопросам

Как работает Sync?

1.8 Middle🔥 141 комментариев
#Многопоточность и асинхронность

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Принцип работы Sync

Sync — это фреймворк от Realm для автоматической синхронизации данных между локальным хранилищем на устройстве и облачной базой данных Realm в реальном времени. Он работает по модели активного-активного репликации, где изменения могут происходить как на клиенте, так и на сервере, и автоматически распространяются между всеми подключенными устройствами.

Архитектура и основные компоненты

1. Локальная база данных Realm

Каждое приложение использует локальную базу данных Realm, которая является полноценной NoSQL-базой данных:

// Создание локальной Realm с синхронизацией
let config = user.configuration(
    partitionValue: "user=\(user.id)"
)
let realm = try! Realm(configuration: config)

2. Сервер Realm Object Server

Серверная часть (MongoDB Realm) выступает в роли:

  • Центрального хаба для синхронизации
  • Сервера аутентификации
  • Контроллера разрешений
  • Источника истины для данных

3. Протокол синхронизации

Sync использует эффективный бинарный протокол, основанный на операциональных преобразованиях (Operational Transformation):

  • Только изменения (дельта) передаются по сети
  • Разрешение конфликтов происходит автоматически
  • Поддержка офлайн-работы с последующей синхронизацией

Как происходит синхронизация

Механизм отслеживания изменений

Каждая транзакция в локальной базе отслеживается:

// Изменения автоматически отслеживаются
try! realm.write {
    let task = Task()
    task.name = "Купить молоко"
    realm.add(task)
    // Изменение помечается для синхронизации
}

Процесс репликации

  1. Отправка изменений: При изменении данных генерируется операция изменения
  2. Передача по сети: Операция шифруется и передается на сервер
  3. Применение на сервере: Сервер проверяет разрешения и применяет изменения
  4. Распространение: Сервер рассылает изменения всем подписанным клиентам
  5. Применение на клиентах: Локальная база обновляется автоматически

Разрешение конфликтов

Sync использует алгоритм автоматического разрешения конфликтов:

  • "Последняя запись побеждает" для простых полей
  • Слияние списков для коллекций
  • Кастомные стратегии через обработчики конфликтов
// Пример настройки политики конфликтов
let configuration = user.configuration(
    partitionValue: "partition",
    clientResetMode: .discardUnsyncedChanges(
        beforeReset: { localRealm in
            // Резервное копирование перед сбросом
        },
        afterReset: { localRealm, remoteRealm in
            // Восстановление после сброса
        }
    )
)

Офлайн-работа и очередь изменений

Важнейшая особенность Sync — надежная офлайн-работа:

  • Все изменения сохраняются в локальной очереди
  • При восстановлении соединения происходит автоматическая синхронизация
  • Очередь гарантирует доставку "хотя бы раз"

Модель разрешений и безопасность

Sync предоставляет детальную систему контроля доступа:

  • Разрешения на уровне партиций
  • Гибкие роли пользователей
  • Шифрование данных при передаче и хранении

Подписки на данные

Для работы с большими наборами данных используется механизм подписок:

// Создание подписки на определенные данные
let results = realm.objects(Task.self)
    .filter("completed == false")
    
let subscription = results.subscribe(
    name: "incompleteTasks",
    updateExisting: true
)

Производительность и оптимизация

Sync оптимизирован для мобильных устройств:

  • Инкрементальная синхронизация — передаются только изменения
  • Сжатие данных при передаче
  • Интеллектуальное кэширование часто запрашиваемых данных
  • Фоновый режим синхронизации на iOS

Типичный жизненный цикл операции

  1. Пользователь вносит изменение в приложении
  2. Изменение фиксируется в локальной транзакции
  3. Синхронизационный движок формирует операцию
  4. Операция ставится в очередь на отправку
  5. При наличии сети операция отправляется на сервер
  6. Сервер проверяет, применяет и рассылает изменения
  7. Другие устройства получают и применяют изменения

Преимущества подхода Realm Sync

  • Автоматическая синхронизация без ручного кода
  • Реальное время с минимальной задержкой
  • Надежная офлайн-работа
  • Встроенное разрешение конфликтов
  • Масштабируемость для миллионов пользователей

Важно: Начиная с 2021 года, Realm Sync эволюционировал в MongoDB Realm Sync с улучшенной интеграцией с MongoDB Atlas и расширенными возможностями, сохраняя при этом основные принципы работы, описанные выше.

Как работает Sync? | PrepBro