Как Dropbox определяет, когда перезаписывать локальный файл, а не перезаписывать файл облака?
Когда Dropbox обнаруживает на своем компьютере файл, который отличается от облачной версии этого файла, о которой он знает, как он решает, следует ли ему синхронизировать их, перезаписывая локальный файл с файлом облака, или синхронизируя их, перезаписывая файл облака с помощью локальный файл?
Перефразировать:
Если копия сервера и локальная копия файла отличаются,
и если программа dropbox запущена и заканчивает синхронизацию,
тогда эти два файла будут одинаковыми.
Эти два файла также будут идентичны одному из старых файлов. Мой вопрос, который --- старая копия сервера или старая локальная копия? Как это решить?
3 ответа
У меня есть частичная информация, которая начинает отвечать на этот вопрос. Я не уверен, насколько это полезно для опытных пользователей, но я знаю, что новые пользователи, такие как я, сочтут этот отчет полезным.
Кроме того, разработка этого делает меня еще более озадаченным, что у невероятно основного вопроса нет никакого официального или авторитетного ответа. Отсутствие доступной документации или дискуссий говорит мне о том, что пользователи Dropbox вполне могут принять то, что Dropbox действительно делает, в соответствии с тем, что они ожидали бы сделать в таких условиях. (то есть, я бы даже не сказал, что у пользователей есть конкретное ожидание, что они держат Dropbox)
Примеры поведения Dropbox:
В моих примерах компьютер A и компьютер B никогда не включаются одновременно. Представьте себе, что один пользователь работает дома и на работе без совместной работы, при этом каждый компьютер выключается перед тем, как вернуться к другому.
Что происходит, если папка Dropbox на одном компьютере не идентична папке облачной папки Dropbox? Для максимальной ясности я предпочитаю представить, как dropbox.exe
реагирует, когда на одном компьютере есть пустая папка Dropbox. Будет dropbox.exe
Рассматривайте эти отсутствующие файлы как "удаления" (что означает, что они будут удалены из папки облачного хранилища) или как "устаревшие" (что означает, что они будут создавать новые копии в локальной папке раскрывающегося списка).
Начните с ситуации, когда поведение явно очевидно: компьютер A включен, а компьютер B выключен. Если
dropbox.exe
выполняется и вносятся изменения в A, затем они распространяются в облачную папку, а не наоборот. Таким образом, в данный момент, если папка А очищается, эти отсутствующие файлы / папки считаются "удаленными", а папка облака очищается.Предположим, что в B есть пустая папка Dropbox, а A создает файлы и синхронизирует их с облачной папкой Dropbox. Если мы переключимся на компьютер B, ситуация такова, что
dropbox.exe
будет интерпретировать пустую папку dropbox B как устаревшую, а новые копии из облачной папки будут созданы на B.Теперь для менее очевидного: предположим, мы вносим некоторые изменения в B и синхронизируем эти изменения в папке облачного хранилища. Если мы переключимся на компьютер A и --- без первого запуска
dropbox.exe
--- мы удаляем вещи в папке Dropbox A, что будет работатьdropbox.exe
потом делать? В этой ситуацииdropbox.exe
пропустит отсутствующие файлы / папки как новые удаления, которые следует распространить в папку облачного хранилища.
Меня смущает, что в ситуациях 2 и 3 у вас есть dropbox.exe
включается и сталкивается с тем же "свежим" состоянием на новом компьютере, которое отличается от облачной папки, но оно будет действовать по-другому.
Если вы хотите изобрести правило, которое объясняет, как dropbox.exe
работает, вы, очевидно, не можете предположить, что это функция трех переменных: (1) то, что он видит на компьютере прямо сейчас, (2) то, что он видит в облачной папке, и (3) какой компьютер был последним синхронизировать с облаком папка. (!!!)
Возможно, дополнительная переменная в том, что Dropbox запоминает, что каждый компьютер в последний раз синхронизировал с облачной папкой. В ситуации 2 мы можем предположить, что в последний раз, когда компьютер B синхронизировался, он синхронизировал пустую папку. В ситуации 3 Dropbox запоминает, что в последний раз компьютер A синхронизировался, он синхронизировал папку, отличную от того, что он в настоящее время находит внутри папки.
Я не знаю технических подробностей этого, но у меня есть ситуация, когда я и мой помощник работаем с общим Dropbox с двумя разными компьютерами, которые включаются и выключаются в разное время.
Ответ на ваш вопрос заключается в том, что когда вы подключаетесь к облаку, Dropbox знает (каким-то образом), что версия, находящаяся в данный момент в облаке, изначально была синхронизирована с вашего компьютера. Таким образом, если версия вашего компьютера отличается, то эта версия будет синхронизирована с облаком.
Если два компьютера (скажем, A и B) используют один и тот же выпадающий список, и каждый вносит изменения в автономном режиме, то первый компьютер включается (скажем, это компьютер A), и будет генерироваться синхронизация его обновления в облаке. Так что теперь будет одна и та же версия (содержащая обновление A) для A и Cloud.
Когда компьютер B включается, Dropbox понимает, что версия файла компьютера B не только отличается от текущей облачной версии (что является нормальным), но и отличается от последней синхронизации Dropbox с ним. Таким образом, если бы он синхронизировал файл B с версией A, изменения B были бы потеряны. Так что Dropbox делает копию версии B и добавляет "конфликтующий файл B" к имени файла. Исходный файл B затем синхронизируется с обновлениями A. Конфликтующий файл, содержащий обновления B, затем синхронизируется с облаком и возвращается обратно в A.
Удаления и конфликты, возникающие в результате выборочной синхронизации, обрабатываются аналогичным образом.
Конфликт также возникает, если один из компьютеров не закрывает файл перед выключением. Синхронизация не происходит с открытым файлом, поэтому в этом случае обновления B будут синхронизироваться, и открытый файл A будет конфликтовать. Это может быть огромной болью для гармонизации, но это наша вина, а не Dropbox.
Надеюсь это поможет.
Из Dropbox FAQ:
В отличие от настольного приложения Dropbox, которое постоянно проверяет ваши файлы на наличие изменений, мобильное приложение обычно синхронизируется только по требованию. Это предотвращает использование Dropbox всей вашей пропускной способности и пространства.
Как оно работает?
Это тоже упоминается на их сайте:
Перед передачей файла мы сравниваем новый файл с предыдущей версией и отправляем только измененный фрагмент файла. Это называется "бинарный diff" и работает с любым типом файлов. Dropbox сжимает файлы (без потери данных или качества) перед их передачей. Таким образом, вам также никогда не придется беспокоиться о повторной загрузке файла Dropbox или потере пропускной способности.