# Replication

Каждая коллекция обрабатывается в отдельном треде. На каждую коллекцию отдельный сокет, поэтому сверять значения можно по отдельности для каждой коллекции. Так же можно настривать разные константы для коллекций, время синхронизации и т.д., в зависимости от загруженности коллекции, важности данных, требований к согласованности.

Все изменения отправляются в резервный пул на основе подписки в БД. Так же в фоне происходит проверка данных внутри коллекции, проверка происходит сегментами, чтобы не блокировать всю коллекцию.

Проверка заключается в запросе контрольной суммы для диапазона пар ключ-значение, раз в N-ное время. Если контрольная сумма не совпадает с резервной БД, запрашивается этот диапазон данных для обновления.

Но могут быть конфликты, когда в мастере есть обновления, а в реплике еще нет. Либо делать маленькими диапазоны, либо точечно запрашивать изменения, либо сделать какую то систему версионирования.

Как быть со статусом в идентификаторе? Если поменяется статус, получается он удаляется и добавляется новая запись. Думаю тут можно пока оставить как есть.

Можно хранить дату обновления и/или версию значения, и тогда будет понятно что и когда изменилось.
Версия записи может уместиться в u16. Дата может уместиться в u32? Нам нужны миллисекунды для более точного контроля, если обновления были в одно и то же время?
