Как Dropbox определяет, когда перезаписывать локальный файл, а не перезаписывать файл облака?


10

Когда Dropbox обнаруживает файл на своем компьютере, который отличается от облачной версии этого файла, о которой он знает, как он решает, следует ли ему синхронизировать их, перезаписывая локальный файл с файлом облака, или синхронизируя их, перезаписывая файл облака с помощью локальный файл?

Перефразировать:

  • Если копия сервера и локальная копия файла отличаются,

  • и если программа dropbox запущена и заканчивает синхронизацию,

  • тогда эти два файла будут одинаковыми.

Эти два файла также будут идентичны одному из старых файлов. Мой вопрос, который --- старая копия сервера или старая локальная копия? Как это решить?


Мммм, не уверен, что твоя перефразировка делает это понятнее. Но я думаю, что Dropbox использует (версию) контрольную сумму файла (и, возможно, дату изменения), чтобы увидеть, нужно ли загружать файл. (У него есть старые в своей локальной базе данных). Если контрольная сумма отличается, это идет для загрузки. Если в сети есть версия с более новой датой и другой контрольной суммой, чем старая, в локальной базе данных, кто-то другой должен был изменить файл, и файл будет переименован с добавлением «конфликтующей копии». (конечно, это предположение, и я пока не нашел подтверждения этому онлайн)
Rik

Ответы:


5

Я не знаю технических подробностей этого, но у меня есть ситуация, когда я и мой помощник работаем с общим 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.

Надеюсь это поможет.


1

У меня есть частичная информация, которая начинает отвечать на этот вопрос. Я не уверен, насколько это полезно для опытных пользователей, но я знаю, что новые пользователи, такие как я, сочтут этот отчет полезным.

Кроме того, разработка этого делает меня еще более озадаченным, что у невероятно основного вопроса нет никакого официального или авторитетного ответа. Отсутствие доступной документации или дискуссий говорит мне о том, что пользователи Dropbox вполне могут принять то, что Dropbox действительно делает, так, как они ожидали, что он будет делать в таких обстоятельствах. (то есть я бы даже не сказал, что у пользователей есть конкретное ожидание, что они держат Dropbox)

Примеры поведения Dropbox:

В моих примерах компьютер A и компьютер B никогда не включаются одновременно. Представьте себе, что один пользователь работает дома и на работе без совместной работы, при этом каждый компьютер выключается перед тем, как вернуться к другому.

Что происходит, если папка Dropbox на одном компьютере не идентична папке облачной папки Dropbox? Для максимальной наглядности я предпочитаю представить, как dropbox.exeреагирует, когда на одном компьютере есть пустая папка Dropbox. Будут dropbox.exeсчитать эти отсутствующие файлы «удаленными» (что означает, что они удалят их из папки облачного хранилища) или «устаревшими» (что означает, что они будут создавать новые копии в локальной папке удаленного хранилища).

  1. Начните с ситуации, когда поведение явно очевидно: компьютер A включен, а компьютер B выключен. Если dropbox.exeон запущен и изменения внесены в A, то они распространяются в облачную папку, а не наоборот. Таким образом, в данный момент, если папка А очищается, эти отсутствующие файлы / папки считаются «удаленными», а папка облака очищается.

  2. Предположим, что в B есть пустая папка Dropbox, а A создает файлы и синхронизирует их с облачной папкой Dropbox. Если мы переключимся на компьютер B, ситуация dropbox.exeбудет такова, что пустая папка Dropbox будет интерпретирована как «устаревшая», и новые копии из облачной папки будут созданы на B.

  3. Теперь для менее очевидного: предположим, мы вносим некоторые изменения в 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 синхронизировался, он синхронизировал папку, которая отличалась от того, что он в настоящее время находит внутри папки.


1
Дело не в том, что dropbox.exeпросто проверяет каталог в автономном режиме и онлайн Как вы указали в своем последнем абзаце, dropbox хранит записи о каждом файле, хранящемся локально и онлайн, поэтому он точно знает, когда / что (и когда / что нет) синхронизировать. Посмотрите на мою Dropbox-каталог в C:\Users\<name>\AppData\Roaming\Dropbox. Вы видите множество .dbxфайлов, где dropbox будет хранить эту информацию (не только даты, но и контрольные суммы и т. Д.). (Удалите эти файлы, и Dropbox серьезно испортит ваш каталог Dropbox онлайн и офлайн;)
Rik

Я не знаю, как вы ожидаете, что Dropbox будет отслеживать изменения, когда он вообще не работает. В Сценарии 2 вы добавляете файлы в Dropbox, S3 стирает файлы из Dropbox. Это два разных сценария и должны вести себя по-разному. Не уверен, откуда твоя путаница. Dropbox приложит все усилия в зависимости от того, что находится в облаке и на вашем жестком диске, когда вы включаете Dropbox. Лучший способ использовать Dropbox - всегда держать его включенным. Если вам нужно выключить компьютеры, будьте осторожны с удалениями. По крайней мере, DropBox дает вам 30-дневное восстановление. Вы считаете Dropbox плохим, попробуйте OneDrive.
Солнце

«Я не знаю, как вы ожидаете, что Dropbox будет отслеживать, когда он выключен» <- возможно, вы ожидаете этого, если вы ожидаете, что S3 будет действовать не так, как S2. «Если вы выключаете компьютеры, будьте осторожны с удалениями» <- Как пользователь Dropbox, это предупреждение я бы хотел увидеть в документации. Вам очень легко сказать «он должен вести себя по-другому», потому что вы не указываете, что именно он должен делать. Что меня беспокоит, так это то, что я не смог найти документацию, в которой действительно указано, что он должен делать. Именно поэтому я был сбит с толку: вынужден был угадать, что это за переменные, и ошибся!
Эйн

Это на самом деле очень актуальный вопрос, и я пришел сюда от поиска вопроса. Мой ноутбук не был полностью синхронизирован с Dropbox по крайней мере год, потому что мне не хватило места. Поэтому я использовал выборочную синхронизацию. Теперь я обновил свой HD до большего SSD и хочу снова синхронизировать все. Многие файлы отсутствуют в некоторых папках на моем ноутбуке, и я боюсь, что Dropbox неправильно интерпретирует, что делать при синхронизации. Будет ли он добавлять файлы из облака в локальные папки или вместо этого удалит отсутствующие файлы из облака? Я не совсем уверен!
Marlar

-2

Из Dropbox FAQ :

В отличие от настольного приложения Dropbox, которое постоянно проверяет ваши файлы на наличие изменений, мобильное приложение обычно синхронизируется только по требованию. Это предотвращает использование Dropbox всей полосы пропускания и пространства.

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

Это тоже упоминается на их сайте :

Перед передачей файла мы сравниваем новый файл с предыдущей версией и отправляем только часть файла, которая изменилась. Это называется «бинарным diff» и работает с любым типом файлов. Dropbox сжимает файлы (без потери данных или качества) перед их передачей. Таким образом, вам также никогда не придется беспокоиться о повторной загрузке файла Dropbox или потере пропускной способности.


1
Я спрашиваю о более простом вопросе, не связанном со сжатием / diffs ... как он узнает, когда локальный файл должен стать новой «самой последней версией», по сравнению с тем, является ли локальный файл «устаревшим».
Эйн

Это не связано с различиями. API Dropbox знает, как сравнивать эти различия, когда конкретный файл становится «устаревшим», и решает синхронизировать этот файл. Кроме этого я не мог найти больше информации. Сам Dropbox, будучи закрытым источником, больше не обнародовал информацию.
Каран Радж Баруа

Я отредактировал вопрос, чтобы перефразировать то, что я спрашиваю, потому что, вероятно, происходит некоторая путаница. Кроме того, я не могу разобрать ваше второе предложение.
Эйн
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.