Синхронизация — это когда в нескольких местах лежат одни и те же данные: файлы, папки, записи в базе данных, информация о пользователе и что угодно ещё. Снаружи кажется, что всё просто: указал, что нужно синхронизировать, а дальше оно всё само. Но на самом деле в синхронизации есть много тонких моментов, про которые разработчикам нужно подумать заранее, например:
- откуда и куда отправлять данные;
- что синхронизировать, а что нет;
- что делать с дублями;
- удалять данные при синхронизации или нет.
Сейчас разберём эти вопросы. Цель — повышение общей компьютерной грамотности и развитие кругозора.
Направление синхронизации
Есть два вида синхронизации — односторонняя и двусторонняя.
Для бэкапов чаще всего пользуются односторонней синхронизацией, которая работает так:
- есть две стороны — источник и приёмник данных;
- источник главный, а задача приёмника — сделать так, чтобы на нём была точная копия данных;
- если в источнике что-то меняется, это сразу же меняется и в приёмнике;
- если что-то меняется в приёмнике, источник на это не обращает внимания.
Пример такой синхронизации — синхронизация важных файлов на внешний диск. Системе всё равно, что было на диске до этого, её задача — отправить туда нужные папки и убедиться, что всё скопировалось. Если после этого мы что-то добавим на внешний диск — компьютер никак не отреагирует. А вот если удалим файл из папки с документами, то этот же файл тут же удалится и с внешнего диска.
Двусторонняя синхронизация работает иначе:
- есть две стороны, у которых одинаковые права;
- если что-то меняется на одной стороне, то же самое происходит и на другой.
Такая синхронизация чаще всего работает в онлайн-хранилищах типа Яндекс Диска: вы выбираете папки у себя на компьютере и получаете их полную копию в облаке. Если мы что-то удаляем на компьютере, то это удаляется и из облака. Наоборот тоже работает: если мы зайдём из браузера в облачное хранилище и удалим там ненужное, то после синхронизации с компьютера эти данные тоже исчезнут.
Что синхронизировать, а что нет
Бывает так, что нам нужно синхронизировать только определённые данные: фотографии, записи логов или информацию о дате и сумме покупок. Например, в настройках мобильного телефона можно указать, что в облако нужно отправлять только фото, а видео и остальные файлы — нет.
Другой пример — синхронизация кассовых терминалов в магазинах с сервером, который обслуживает продажи. На сервере в базе хранится очень много разной информации о товарах: дата поступления, название поставщика, размер скидки, дата следующей поставки и ещё 50 параметров. Но с терминалом в магазине синхронизируется только часть данных: цена, количество остатка и срок годности товара.
Удалять данные или нет?
Даже если мы настраиваем полную синхронизацию, у нас всегда есть вариант, при котором мы не удаляем данные, даже если их удалили на той стороне. Такое используется в системах бэкапов и в облачных хранилищах, когда удалённые файлы можно восстановить, например, в течение 30 дней. Они складываются в корзину и хранятся там до конца этого срока или пока мы их не восстановим раньше.
Второй вариант — файлы просто помечаются как удалённые и не участвуют в синхронизации. У них, например, меняется иконка, они видны на своём старом месте, но скопировать их можно только вручную.
Конфликты при синхронизации
Представьте такое: один и тот же документ открыли на разных компьютерах, внесли правки и сохранили в том же месте. Какой файл система возьмёт как основной для синхронизации? А что делать со вторым? А если сохранять два, то как именно?
Все подобные конфликты тоже нужно решить заранее до синхронизации. Например, какой файл сохранили последним — тот и использовать для синхронизации. Или можно сохранить оба файла, но под разными именами, добавив к названиям «-conflict1» и «-conflict2», а исходный файл вообще не трогать.
Или вот ещё вариант: при синхронизации в папке оказывается файл с тем же именем, который там уже есть, — что делать системе в этом случае? Здесь нет правильного ответа, всё будет так, как придумал разработчик или настроил пользователь. Системы поумнее спросят, что делать, а системы попроще просто заменят одно другим.