Загрузка на яндекс диск в спящем режиме

Обновлено: 06.07.2024

Доброго времени суток!

Для быстрой передачи файлов другим людям, да и между своими ПК, ноутбуком и телефоном очень удобно использовать Яндекс диск (облачный сервис для хранения файлов) . Загрузил на него один раз фото (например) - и их можно просматривать со всех устройств, на которых есть доступ к интернету. К тому же, можно существенно экономить место в памяти телефона (многим часто его не хватает), настроив авто-загрузку видео и фото в облако.

Добавьте к этому возможность работу с документами Word, Excel и Power Point в режиме онлайн (ничего не устанавливая на ПК). Это очень удобно!

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

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

И так, ближе к теме .

ускорение ПК

Как пользоваться Яндекс диском

В общем-то, регистрация на сервисе достаточно стандартна для подобных продуктов. Сначала переходите по ссылке ниже на официальный сайт Яндекс диска и жмете кнопку "Завести диск" (см. скриншот ниже).

Завести диск

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

Форма регистрации стандартна

Форма регистрации стандартна

После того, как зарегистрируетесь, можно приступать к скачиванию приложений для Windows и Android (для доступа к файлам на диске, и работы с ним).

Для Windows

Перейдя по ссылке выше, загрузите программу и запустите инсталляцию.

Яндекс диск - программа для Windows

Яндекс диск - программа для Windows

Весь процесс установки не привожу, т.к. установка стандартна (как и у др. программ) и ничего сложного (интересного) не содержит.

Стандартный установщик

После установки приложения, у вас на рабочем столе и в системном трее появиться характерный значок "Яндекс диска", см. скрин ниже. Щелкнув по нему, откроется окно со всеми файлами, папками

В системном трее появился значок для быстрого доступа к диску

В системном трее появился значок для быстрого доступа к диску

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

Программа Яндекс диск на Windows установлена

Программа Яндекс диск на Windows установлена

Для Android

Установка приложения на Андроид так же стандартна. Достаточно перейти на Google Play (ссылка выше) и нажать кнопку установки.

Установка

После установки, откройте ярлычок приложения, введите логин и пароль (указанные при регистрации), задайте пин-код (это нужно, чтобы никто кроме вас не смог зайти на диск, даже если вы потеряете телефон) , и ву-а-ля - вы в диске. См. скрины ниже.

Яндекс диск на смартфоне

Яндекс диск на смартфоне

Как увеличить свободное место на Яндекс диске

Вообще, выделяемое место на диске постоянно меняется (в зависимости от разных акций, условий и пр.): например, мне несколько лет назад при регистрации дали 10 ГБ (сколько дадут на момент регистрации вам - предугадать сложно).

Также в качестве бонуса дают доп. место за использование почтового ящика (в моем случае 9 ГБ), и за установку приложения на телефон (32 ГБ). Итого, суммарно, получается около 47 ГБ (что вполне достаточно для документов, фото, файлов).

Бесплатные способы

Если вам нужно значительно больше места - можно его прикупить за небольшую сумму в месяц. Для того, чтобы увидеть текущие тарифы: просто откройте приложение "Яндекс диск" и внизу окна кликните по ссылке "Купить еще" (см. скрин ниже).

Яндекс диск - купить место

Яндекс диск - купить место

Например, на сегодняшний день "лишних" 100 ГБ стоит всего 67 руб./мес. Если нужно значительно больше, например, 1 ТБ - то придется раскошелится на 167 руб./мес.

Как загрузить файлы и фото на диск

В Windows

Обычно такой вопрос задают люди, которые еще не работали с Яндекс диском. Вообще, на самом деле все очень просто: сначала необходимо открыть диск (можно с помощью иконки в трее, см. скрин ниже).

В системном трее появился значок для быстрого доступа к диску

Открываем Яндекс диск

Далее выберите нужную папку, нажмите кнопку "Загрузить" и выберите файлы/папки, которые хотите загрузить на облачный носитель.

Загрузить (приложение Яндекс Диск)

Загрузить (приложение Яндекс Диск)

Через некоторое время файлы будут загружены: напротив них вы увидите небольшие зеленые галочки (синхронизированы). См. пример ниже.

Файлы загружены

Кстати, приложение "Яндекс диск" запускать не обязательно: например, в проводнике (Windows 10) есть ссылка на папку с диском. Достаточно открыть нужный каталог и скопировать в нее файлы (если у вас в настройках приложения включена синхронизация - файлы будут также отправлены в облако).

Проводник - Яндекс Диск

Проводник - Яндекс Диск

На Android [+настройка авто-загрузки фото и видео в облако]

Загрузка нужных файлов вручную:

Далее откройте нужный каталог (куда хотите загрузить файлы) и нажмите кнопку "Загрузить" (см. скрин ниже).

Загрузить файл на диск

Загрузить файл на диск

Для автоматической загрузки фото на Яндекс диск:

  1. запустите приложение;
  2. затем в меню откройте вкладку "Настройки";
  3. включите автозагрузку фото по Wi-Fi (либо вообще выберите вариант "По любой сети", если пользуетесь безлимитным интернетом на телефоне);
  4. теперь все фото будут автоматически загружаться на Яндекс диск. Если даже что-то нехорошее произойдет с телефоном - сможете быстро восстановить все свои снимки. Надежно и удобно!

Автозагрузка фото с телефона на Яндекс диск по Wi-Fi

Автозагрузка фото с телефона на Яндекс диск по Wi-Fi

Как сделать файлы доступными для скачивания другими пользователями

Далее ее можно передать по соц. сети, чату, e-mail и др. способами. Ссылку достаточно вставить в адресную строку браузера - и файл можно просмотреть или скачать (см. пример ниже).

Смотрим фото

Затем скопируйте ссылку и передайте (например, через соц. сети) тем людям, с которыми хотели поделиться файлами. Когда они их просмотрят/скачают - файл с раздачи можно снять (аналогично).

Копировать ссылку

Сначала открываете приложение "Диск" и переходите в нужный каталог.

Яндекс диск - главное меню (Андроид)

Яндекс диск - главное меню (Андроид)

Яндекс диск на Андроид

Яндекс диск на Андроид

Как настроить авто-создание копии моих документов в облачный диск (бэкап!)

Все достаточно просто. Рассмотрю по шагам.

1) Сначала открываем настройки Яндекс диска (для этого можно использовать значок в трее, рядом с часами. См. скриншот ниже).

Настройки диска

2) Далее сразу же рекомендую зайти во вкладку "Дополнительно" и проверить, чтобы была включена синхронизация (т.е. все созданные и измененные файлы в вашей папке на жестком диске будут сразу же в авто-режиме загружаться на Яндекс диск (то бишь дублироваться)).

Проверьте, чтобы была включена синхронизация!

Проверьте, чтобы была включена синхронизация!

3) Во вкладке "Основные" проверьте, чтобы программа автоматически запускалась. После откройте настройку расположения папок.

Настройка расположения папок

Настройка расположения папок

4) Посмотрите, где расположена папка, которая будет синхронизироваться с облаком (при необходимости переместите ее на другой раздел HDD).

Узнаем (настраиваем) папку для синхронизации

Узнаем (настраиваем) папку для синхронизации

5) Теперь откройте проводник, щелкните правой кнопкой мышки по системной папке "Документы" и откройте ее свойства . Пример ниже.

Открываем проводник и переходим в свойства папки

Открываем проводник и переходим в свойства папки "Документы"

6) Во вкладке "Расположение" нажмите кнопку "Переместить" и переместите ее в любую из папок, расположенных в "C:\Users\alex\YandexDisk" * (* путь показан в качестве примера, у вас будет свой каталог - см. п.4 чуть выше, где мы смотрели каталоги в настройках приложения) . Т.е. мы перемещаем нашу системную папку "Документы" в папку, которая будет синхронизироваться с Яндекс диском.

Смотрим расположение системной папки. Перемещаем ее в любую папку Яндекс диска!

Смотрим расположение системной папки. Перемещаем ее в любую папку Яндекс диска!

7) Лично у себя так и назвал папку "Мои документы", в которую и переместил системную "Документы". Теперь все файлы (фото, документы, видео и т.д.), которые попадают в эту папку - будут автоматически дублироваться в облачный диск!

Теперь папка будет синхронизирована с Яндекс диском

Теперь папка будет синхронизирована с Яндекс диском

8) С перенесенными документами можно будет работать, как и в каталоге, расположенным на HDD, так и открыв приложение Яндекс диска. Удобно!

Эта же папка только в приложении

Восстановление измененного файла

Кстати, что еще подкупает в Яндекс диске: вы можете просмотреть историю изменений файла. Вот представьте, вы отредактировали неправильно документ и сохранили его. А потом вспомнили, что удалили из него лишнее. Что делать?

Максимальный размер файла на Диске — 50 ГБ. Но для загрузки файлов больше 2 ГБ мы рекомендуем использовать программу Яндекс.Диск.

Вы также можете перетащить на страницу Диска или скопировать любую папку из вашего компьютера в программу Яндекс.Диск, и папка автоматически загрузится на сервер со всем содержимым.

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

Загрузка с помощью браузера

Откройте папку на Яндекс.Диске, в которую вы хотите добавить файлы. Перетащите на страницу отдельные файлы или всю папку целиком (для загрузки отдельных файлов также можно использовать кнопку Загрузить на панели слева или в контекстном меню). Примечание. С помощью браузера папки можно загружать только в Яндекс.Браузере версии 1.7 и выше, Google Chrome версии 25.0 и выше, Opera версии 17.0 и выше, в Mozilla Firefox версии 48.0 и выше, в браузерах на основе проекта Gecko версии 48.0 и выше. Если вы используете другой браузер, загружайте папки с помощью программы Яндекс.Диск. Вы можете продолжить загрузку в фоновом режиме — для этого нажмите Свернуть . Загрузку тех файлов, которые еще не успели загрузиться до конца, можно отменить — нажмите  → Отменить загрузки .

Вы также можете поделиться ссылкой на файл сразу после его загрузки.

Загрузка с помощью программы Яндекс.Диск

Чтобы загружать файлы с компьютера, установите программу Яндекс.Диск и копируйте нужные файлы в папку, которую создает программа.

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

Подробнее о работе программы Яндекс.Диск читайте в разделе Яндекс.Диск для компьютера.

Загрузка с iOS и Android

Мобильные приложения Яндекс.Диска позволяют загружать как уже имеющиеся на телефоне файлы, так и делать фотографии, сразу сохраняя их на Диск.

Чтобы загружать файлы с телефона или планшета, установите мобильное приложение Диска. О том, как загрузить файлы с помощью приложения, см. в разделах для iOS и Android.

Копирование публичных файлов и папок на свой Диск

Если с вами поделились ссылкой на файл или папку, которые хранятся на Яндекс.Диске, вы можете скопировать их на свой Диск.

Чтобы скопировать файл или папку, перейдите по полученной ссылке и нажмите кнопку Сохранить на Яндекс.Диск . Файл или папка будут помещены в папку Загрузки вашего Диска.

В папку Загрузки вы можете перейти из панели слева.

Скачивание публичных файлов и папок

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

Внимание. Опубликованную папку можно скачать на компьютер в виде архива, если ее размер не превышает 5 ГБ и в ней меньше 500 файлов.

Проблемы с загрузкой

Файл определился как вирус

Все файлы размером до 1 ГБ, создаваемые, загружаемые или уже хранящиеся на Яндекс.Диске, проверяются антивирусной программой Яндекс.Диска. Если антивирус посчитал файл подозрительным, скорее всего, файл действительно заражен.

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

Вы можете самостоятельно проверить файл на сервисе Virus Total, где файлы проверяются десятками разных антивирусных систем.

Не загружается файл на сервер

Ошибка при загрузке файла может появляться, потому что:

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

Место на Диске закончилось

Место могло закончиться на вашем Диске или, если вы участник общей папки, на Диске владельца папки.

файлы, которыми вы поделились ранее, недоступны по публичным ссылкам; Совет. Чтобы не потерять файлы, перед удалением скачайте их на компьютер.

Не загружается папка на сервер

Ошибка при загрузке папки может появляться, потому что:

Содержимое папки изменилось во время загрузки

Пока папка загружалась, файлы в этой папке были перемещены или удалены. Если файлы перемещает или удаляет другая программа, закройте ее. После этого попробуйте загрузить папку заново.

В папке есть файлы больше 2 ГБ

Такие файлы нельзя загрузить с помощью браузера. Загружайте большие файлы (размером от 2 до 50 ГБ) через программу Яндекс.Диск.

В этой папке большая вложенность папок

Попробуйте заархивировать эту папку и загрузить на Диск получившийся архив. Также вы можете загружать папки через программу Яндекс.Диск.

Ваш браузер не поддерживает загрузку папок

Папки можно загружать только в Яндекс.Браузере версии 1.7 и выше, Google Chrome версии 25.0 и выше, Opera версии 17.0 и выше. Если вы используете другой браузер, загружайте папки с помощью программы Яндекс.Диск.

Нет прав на чтение папки или файла

Если вы — администратор компьютера, измените права. Если нет, то такую папку загрузить на Диск не получится.

Длинное или нестандартное название папки или файла

Попробуйте заархивировать эту папку и загрузить на Диск получившийся архив.

Место на Диске закончилось

Место могло закончиться на вашем Диске или, если вы участник общей папки, на Диске владельца папки.


Кроме того, загружать файлы при помощи различных менеджеров закачек (Download Master, FlashGet и т.п.), которые поддерживают докачку файлов после ее остановки или разрыва интернет-соединения, возможности нет. Т.е. ссылки, предоставляемые Яндекс.Диском в подобных менеджерах не работают.

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

Для того чтобы иметь такую возможность, вам нужно всего 2 вещи.

1. Наличие аккаунта в Яндексе и Яндекс.Диска со свободным пространством, которое не должно быть меньше скачиваемых файлов.

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

Если вы еще не пользуетесь этим облачным хранилищем файлов, то вполне логичным может быть вопрос — «а зачем вообще мне это нужно»?

Сейчас я хочу рассказать о явных преимуществах Яндекс.Диска перед всеми другими облачными хранилищами, которые сам выявил.

1. Только в Яндекс.Диске у вас есть возможность получить 57 Гб (или даже больше) диского пространства совершенно бесплатно! Такого или большего объема я еще нигде не встречал.

На данный момент у меня именно имеется 57Гб.

Для того чтобы увеличить размер, вам нужно сделать ряд несложных действий, которые описаны в разделе «Увеличить объем диска».

Там ничего сложного нет, поэтому описывать этот процесс не буду. Этот размер можно получить затратив 5-10 минут.

2. Удобная синхронизация файлов. Лично мне такой способ загрузки файлов из интернета нравится больше, нежели обычное скачивание. Вот, например, мне нужно взять с собой на работу какой-нибудь документ. Я помещаю его в папку Яндекс.Диска (на компьютере) и он сразу же появляется в облачном хранилище.

Если я делаю какие-либо изменения в этом документе, то происходит автоматическая синхронизация и эти изменения также появляются в облаке. Я прихожу на работу, включаю компьютер, при этом происходит автоматическая синхронизация и этот документ появляется на рабочем компьютере. Ну, в общем, я думаю, что вы поняли смысл.

Теперь нет необходимости таскать с собой различные физические носители (флэшки, например), все очень удобно и просто.

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

Также Яндекс.Диск можно использовать с различными мобильными устройствами, все это без проблем работает на моих iPhone 4s и IPad. Там, кстати, можно даже настроить много чего. У меня, например, при подключении iPhone к компьютеру происходит автоматическая синхронизация фотографий.

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

Я пробовал много различных сервисов и все они мне не подошли. То оплата не проходит, то русского языка нет, то еще что. В DropBox, например, если курс качали сразу несколько человек одновременно, то он просто вырубался, и никто ничего не мог скачать.

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

Пока еще там все работает в режиме beta тестирования, но это никак не отражается на стабильности сервиса и на его функциональности. Даже наоборот, Яндекс.Диск постоянно обрастает новыми функциями, а размер бесплатного дискового пространства стремительно увеличивается, что не может не радовать.

Для инфобизнесмена Яндекс.Диск – это отличный вариант! Как говорится, дешево и сердито! 🙂

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

Как качать с Яндекс.Диска при низкой скорости интернета с возможностью докачки файлов

И так, как я уже писал выше, у вас обязательно должен быть аккаунт в Яндексе с Яндекс.Диском и свободное место для сохранения файлов. А также установленная на компьютере и настроенная программа Яндекс.Диск.

После того как вы подписались на какой-либо курс или купили его, вам приходят ссылки на скачивание файлов.

А вот если скорость низкая, интернет постоянно прерывается и т.п., то лучше сохранить файлы на свой Яндекс.Диск.

Для этого нажмите кнопку «Сохранить на Яндекс.Диск» и файлы моментально скопируются с папку «Загрузки» на вашем Яндекс.Диске.

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

Перед тем как писать эту статью, я проверил это. Во время синхронизации я принудительно разрывал интернет-соединение, останавливал синхронизацию, выходил из программы Яндекс.Диск, выключал компьютер, после чего синхронизация успешно продолжалась с места разрыва последнего соединения.

Вот так вот все просто. Пользуйтесь!

На этом у меня все. Надеюсь, что мой пост был полезен для вас.

А вы где храните свои файлы в интернете?

P.S. Напоминаю, что уже завтра 31.05.2013 года в 23 часа 59 минут МСК я подвожу итоги акции для партнеров, которая была объявлена в этой статье. Конкретных победителей пока не вырисовывается, шансы на призовое место есть абсолютно у каждого участника (суммы там небольшие).

На данный момент места распределены следующим образом:

1-ое место: vsevideshey
2-ое место: russianbear
3-е место: specialist

После того как я подведу итоги, то сразу приступлю к выплатам партнерских вознаграждений.

Яндекс.Диск — один из немногих сервисов Яндекса, частью которого является программное обеспечение для десктопа. И одна из самых важных его составляющих — алгоритм синхронизации локальных файлов с их копией в облаке. Недавно нам пришлось его полностью поменять. Если старая версия с трудом переваривала даже несколько десятков тысяч файлов и к тому же не достаточно быстро реагировала на некоторые «сложные» действия пользователя, то новая, используя те же ресурсы, справляется с сотнями тысяч файлов.

В этом посте я расскажу, почему так получилось: чего мы не смогли предвидеть, когда придумывали первую версию ПО Яндекс.Диска, и как создавали новую.


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

Почему это не так просто, как кажется на первый взгляд?

Теоретически задача может показаться достаточно простой, но в реальности мы сталкиваемся с разными сложными ситуациями. Например, человек переименовал папку на своем компьютере, мы это детектировали и послали команду на бекенд. Однако никто из пользователей не ждет, пока бекенд подтвердит успешность переименования. Человек сразу открывает свою локально переименованную папку, создает в ней подпапку, и, к примеру, переносит в нее часть файлов. Мы попали в ситуацию, в которой невозможно сразу выполнить все необходимые операции синхронизации в облаке. Сначала надо дождаться завершения первой операции и только потом можно продолжать.

Ситуация может стать еще сложнее, если с одним аккаунтом одновременно работают несколько пользователей или у них есть общая папка. А это случается достаточно часто в организациях, использующих Яндекс.Диск. Представьте себе, что в предыдущем примере в тот момент, когда мы получили от бекенда подтверждение первого переименования, другой пользователь берет и переименовывает эту папку еще раз. В этом случае опять нельзя сразу выполнить действия, которые уже совершил первый пользователь у себя на компьютере. Папка, в которой он работал локально, на бекенде в это время уже называется по-другому.

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

Прошлая версия алгоритма

В прошлой версии десктопного ПО Яндекс.Диска для поиска изменений использовался алгоритм сравнения деревьев. Любое другое решение на тот момент не позволяло реализовать поиск перемещений и переименований, так как бэкэнд не имел уникальных идентификаторов объектов.

В этой версии алгоритма мы использовали три основных дерева: локальное (Local Index), облачное (Remote Index) и последнее синхронизированное (Stable Index). Кроме этого, чтобы предотвратить повторную генерацию уже поставленных в очередь операций синхронизации, использовались ещё два вспомогательных дерева: локальное ожидаемое и облачное ожидаемое (Expected Remote Index и Expected Local Index). В этих вспомогательных деревьях хранилось ожидаемое состояние локальной файловой системы и облака, после выполнения всех операций синхронизации, которые уже поставлены в очередь.


Процедура сравнения деревьев в старом алгоритме выглядела следующим образом:

  1. Если локальное ожидаемое дерево и облачное ожидаемое дерево пусты, инициализируем их, копируя последнее синхронизированное дерево;
  2. Сравниваем локальное дерево с облачным ожидаемым и по результатам сравнения отдельных узлов добавляем в очередь операции синхронизации в облаке (создание коллекций, передача файлов в облако, перемещение и удаление в облаке);
  3. Для всех операций, которые поставлены в очередь на предыдущем шаге, фиксируем их будущий эффект в ожидаемом облачном дереве;
  4. Сравниваем облачное дерево с локальным ожидаемым и по результатам сравнения отдельных узлов добавляем в очередь операции синхронизации с локальной файловой системой (создание директорий, скачивание файлов из облака, перемещение и удаление локальных файлов и директорий);
  5. Для всех операций, которые поставлены в очередь на предыдущем шаге, фиксируем их будущий эффект в ожидаемом локальном дереве;
  6. Если в очередь попадают одновременные операции с одним и тем же файлом или директорией (например, передача файла в облако и скачивание этого же файла из облака), то фиксируем конфликт — файл изменился в двух местах;
  7. После того, как операция синхронизации выполнена в облаке или с локальной файловой системой, заносим её результат в последнее синхронизированное дерево;
  8. Когда очередь операций синхронизации становится пустой, удаляем локальное ожидаемое и облачное ожидаемое дерево. Синхронизация закончена, и они нам больше не понадобятся.

Почему нам пришлось придумывать новый алгоритм

Главными проблемами алгоритма сравнения деревьев стали большое потребление памяти и необходимость сравнения деревьев целиком даже при небольших изменениях, что приводило к большой нагрузке на процессор. Во время обработки изменений даже одного файла использование оперативной памяти возрастало примерно на 35%. Допустим, у пользователя было 20 000 файлов. Тогда при простом переименовании одного файла размером 10Кб потребление памяти вырастало скачкообразно — со 116Мб до 167МБ.

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

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

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

Новый алгоритм


Мы решили изменить структуру хранения данных и заменить три дерева (Local Index, Remote Index, Stable Index) на одно, что должно было привести к снижению избыточности в главной структуре данных. Из-за того что ключом в дереве является путь к элементу файловой системы, в результате объединения значительно сократился объем используемой оперативной памяти.


Еще мы отказались от использования вспомогательных деревьев во время синхронизации, потому что каждый элемент дерева в новой версии хранит все нужные данные. Это изменение структуры сильно упростило отладку кода.

Так как мы понимали, что это серьезное изменение, то создали прототип, подтвердивший эффективность нового решения. Рассмотрим на примере, как меняются данные в дереве во время синхронизации нового файла.

  1. После того как пользователь добавил в папку Диска новый файл, программа обнаружила его и добавила в дерево новый элемент. У этого элемента известно только одно состояние – local. Так как stable и remote состояния отсутствуют, память под них не выделяется;
  2. Программа выполняет upload файла. Из облака приходит push, подтверждающий появление нового файла, и в дерево добавляется remote состояние;
  3. Состояния local и remote сравниваются. Так как они совпадают, добавляется stable состояние;
  4. Состояния local и remote удаляются. Они больше не нужны, так как вся информация есть в stable.


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

Другие улучшения

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

Яндекс.Диск использует дайджесты sha256 и MD5 для проверки целостности файлов, обнаружения изменившихся фрагментов и дедупликации файлов на бекенде. Так как эта задача сильно нагружает CPU, в новой версии реализация расчетов дайджеста была существенно оптимизирована. Скорость получения дайджеста файла увеличена примерно в два раза.

Цифры


Синхронизация уникальных 20000 файлов по 10Кб
Версия ПО Загрузка на CPU.
Расчет дайджестов
Нагрузка на CPU
upload
Использование оперативной памяти, Мб
Яндекс.Диск 1.3.3 28% (1 ядро 100%) Примерно 1% 102
Яндекс.Диск 1.2.7 48% (2 ядра 100%) Примерно 10% 368

Вычисление дайджестов уникальных 20000 файлов по 10кб (индексация)
Версия ПО Нагрузка на CPU Время, сек Использование оперативной памяти, Мб
Яндекс.Диск 1.3.3 25% (1 ядро 100%) 190 82
Яндекс.Диск 1.2.7 50% (2 ядра 100%) 200 245

Запуск с 20000 синхронизированных файлов по 10Кб
Версия ПО Нагрузка на CPU Время, сек Использование оперативной памяти, Мб
Яндекс.Диск 1.3.3 25% (1 ядро 100%) 10 55
Яндекс.Диск 1.2.7 50% (2 ядра 100%) 22 125

Upload 1Gb. Соединение Wi-Fi 10 МБит
Версия ПО Нагрузка на CPU Время, сек
Яндекс.Диск 1.3.3 5% 1106
Яндекс.Диск 1.2.7 5% 2530

Что получилось

Из примеров видно, что новая версия ПО Яндекс.Диска использует примерно в 3 раза меньше оперативной памяти и примерно в 2 раза меньше нагружает CPU. Обработка мелких изменений не приводит к увеличению объема используемой памяти.

В результате проделанных изменений существенно увеличилось количество файлов, с которым без проблем справляется программа. В версии для Windows – 300 000, а на Mac OS X — 900 000 файлов.

Читайте также: