Как пользоваться Яндекс.Диском на своем смартфоне. Выборочная синхронизация папок на Яндекс.Диске

В последнее время все большую популярность набирают сервисы облачного хранения данных, такие как Яндекс.Диск, Google Drive и т.д и т.п. Они позволяют Вам подстраховаться от потери важных данных, таких как документы фотографии и др. В принципе это удобно, за исключением одного момента — программное обеспечение сервиса создаёт на компьютере свою папку, с которой осуществляет синхронизацию облачный сервис, т. е. чтобы отправить какие-то данные в «облако» нужно скопировать их в эту папку. Это неудобно при больших объемах данных: так если у вас, к примеру, 300 Гб фотографий, то для синхронизации их нужно выделить и скопировать в папку сервиса (а копирование такого объема явно не для слабонервных), и это процесс нужно повторять при обновлении данных. Но нашлось решение проблемы — символическая ссылка.

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

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

Это по материалам Wikipedia, а если «по-русски», то все что у вас в каталоге, на который указывает ссылка, то и в целевом каталоге. Сама символьная ссылка широко используется на Linux системах, но есть возможность создать ее и в системе Windows.

Создать ссылку можно с помощью командной строки, но гораздо-гораздо проще с помощью утилиты Link Shell Extension , которая умеет создавать требуемый тип ссылки.

Рассматривать данный метод мы будем на примере сервиса Яндекс.Диск.

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

Также будет создана папка Яндекс.Диск на компьютере в указанном вами месте.

Затем скачиваем утилиту Link Shell Extension , устанавливаем ее, перезагружаем компьютер и в контекстном меню, вызываемом нажатием правой кнопки мыши, у нас появляются новая строка «Запомнить источник ссылки».

Чтобы синхронизировать папку с «облаком», находим ее на Компьютере, нажимаем по ней правой кнопкой мыши и выбираем «Запомнить источник ссылки».

После всего этого переходим в папку Яндекс.Диск, нажимаем правой кнопкой мыши и выбираем «Поместить как -> Символическую ссылку»

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

Как установить Яндекс Диск на компьютер

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

Щелкаем по кнопке «Скачать» и ждем окончания загрузки файла YandexDiskSetupRu.exe. Можете сразу скачать это файл по . Запускаем полученный файл.

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

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

Нажмите кнопку «Готово» и ознакомьтесь с краткой инструкцией по работе с программой. Нажимайте кнопку «Далее» пока не дойдете до последнего окна, в котором надо щелкнуть по кнопке «Готово».

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

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

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

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

А теперь перейдем к настройкам программы.

Настройка Яндекс диска

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

Основные

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

Папка – Путь к папке на вашем компьютере, которая будет соответствовать корневой папке на вашем Яндекс диске в интернет. Рекомендую создать на диске D: или E: (на любом, где не установлена операционная система) папку «Яндекс.Диск» (вы можете назвать ее по своему) и указать ее в качестве папки Яндекс диска на вашем ПК.

Не указываете здесь пути типа C:\, D:\, E:\ и т.п. Потому что как только вы нажмете кнопку «Применить», программа начнет синхронизацию, в ходе которой попытается перенести все, что есть на этих дисках в ваше облачное хранилище и наоборот. Получите кашу из папок и файлов, на разбор которой вам придется затратить свое время.

Аккаунт

Аккаунт – Название Яндекс аккаунта к которому «привязан» Яндекс диск на вашем компьютере. У вас может быть несколько учетных записей (адресов e-mail) на Яндексе и для каждой вы можете использовать свой Яндекс диск.

Место на диске – Показывает общее и свободное место на Яндекс диске в интернет. Занятое пространство на Яндекс диске в интернет будет соответствовать таковому на вашем ПК. Общее пространство доступное программе Яндекс.Диск на компьютере ограничено только размерами жесткого диска.

Отключить компьютер от Диска – Кнопка, с помощью которой можно разорвать связь между папкой Яндекс диска на компьютере и вашим облачным Яндекс хранилищем. Также можно выполнить обратную операцию.

Синхронизация

Выбранные папки синхронизируются с этим компьютером – Список папок, которые будут синхронизироваться. Зачем это нужно? Вы можете установить программу Яндекс.Диск дома и на работе. На рабочем ПК, вам вовсе не обязательно иметь точную копию вашего Яндекс диска с личными фотографиями и другими файлами. Достаточно выбрать только «рабочую» папку, в которой хранятся деловые документы, инструкции, презентации и пр. Она и будет синхронизироваться.

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

Автозагрузка

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

Кнопка «Забыть устройства» отключит загрузку фотографий и видео с фотоаппаратов, видеокамер и др. устройств, которые могут создавать графические файлы. Например, сканеры.

Скриншоты

Программа Яндекс.Диск позволяет делать скриншоты (снимки экрана). Если вам нужна эта функция, на вкладке «Скриншоты» установите галочку «Перехватывать системные сочетания клавиш». Тогда, например, нажав одновременно Ctrl+Shift+1, вы сможете выделить область экрана и сохранить ее в виде изображения на Яндекс диске.

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

Прокси

Этот раздел используется для указания настроек прокси-сервера. Для большинства пользователей здесь ничего менять не надо.

Дополнительно

Устанавливать обновления автоматически – По умолчанию, программа будет проверять обновления, и устанавливать их. В обновлениях устраняются ошибки, добавляется новый функционал. Например, в первых версиях Яндекс.Диск не было возможности делать скриншоты. Она появилась в более поздних реализациях программы. Если вам не нужные обновления, отключите эту настройку.

Автоматически отправлять сообщения об ошибках в Яндекс – Название этого параметра говорит само за себя.

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

Кнопка «Сбросить» — Восстанавливает параметры по умолчанию.

---
Команда Яндекс.Диска,
помогаем сохранить важное
","html":"

Для Windows и Mac OS X появилась важная функция - выборочная синхронизация. Теперь вы можете выбирать, какие папки хранить на компьютере, а какие - только на Яндекс.Диске.

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

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

Управление синхронизацией папок доступно в настройках приложений.

---
Команда Яндекс.Диска,
помогаем сохранить важное

","contentType":"text/html"},"proposedBody":{"source":"

Для Windows и Mac OS X появилась важная функция - выборочная синхронизация. Теперь вы можете выбирать, какие папки хранить на компьютере, а какие - только на Яндекс.Диске.

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

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

Управление синхронизацией папок доступно в настройках приложений.

---
Команда Яндекс.Диска,
помогаем сохранить важное

Для Windows и Mac OS X появилась важная функция - выборочная синхронизация. Теперь вы можете выбирать, какие папки хранить на компьютере, а какие - только на Яндекс.Диске.

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

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

Управление синхронизацией папок доступно в настройках приложений.

---
Команда Яндекс.Диска,
помогаем сохранить важное

","contentType":"text/html"},"authorId":"120228024","slug":"57789","canEdit":false,"canComment":false,"isBanned":false,"canPublish":false,"viewType":"old","isDraft":false,"isSubscriber":false,"commentsCount":164,"modificationDate":"Tue Jan 29 2013 12:13:00 GMT+0000 (UTC)","showPreview":true,"approvedPreview":{"source":" для Windows и Mac OS X появилась важная функция - выборочная синхронизация. Теперь вы можете выбирать, какие папки хранить на компьютере, а какие - только на Яндекс.Диске.","html":"В приложениях Яндекс.Диска для Windows и Mac OS X появилась важная функция - выборочная синхронизация. Теперь вы можете выбирать, какие папки хранить на компьютере, а какие - только на Яндекс.Диске.","contentType":"text/html"},"proposedPreview":{"source":" для Windows и Mac OS X появилась важная функция - выборочная синхронизация. Теперь вы можете выбирать, какие папки хранить на компьютере, а какие - только на Яндекс.Диске.","html":"В приложениях Яндекс.Диска для Windows и Mac OS X появилась важная функция - выборочная синхронизация. Теперь вы можете выбирать, какие папки хранить на компьютере, а какие - только на Яндекс.Диске.","contentType":"text/html"},"titleImage":null,"tags":[{"displayName":"Диск","slug":"disk","categoryId":"120469667","url":"/blog/company??tag=disk"}],"isModerator":false,"commentsEnabled":true,"url":"/blog/company/57789","urlTemplate":"/blog/company/%slug%","fullBlogUrl":"https://yandex.ru/blog/company","addCommentUrl":"/blog/createComment/company/57789","updateCommentUrl":"/blog/updateComment/company/57789","addCommentWithCaptcha":"/blog/createWithCaptcha/company/57789","changeCaptchaUrl":"/blog/api/captcha/new","putImageUrl":"/blog/image/put","urlBlog":"/blog/company","urlEditPost":"/blog/56288d577eba6ef16f808526/edit","urlSlug":"/blog/post/generateSlug","urlPublishPost":"/blog/56288d577eba6ef16f808526/publish","urlUnpublishPost":"/blog/56288d577eba6ef16f808526/unpublish","urlRemovePost":"/blog/56288d577eba6ef16f808526/removePost","urlDraft":"/blog/company/57789/draft","urlDraftTemplate":"/blog/company/%slug%/draft","urlRemoveDraft":"/blog/56288d577eba6ef16f808526/removeDraft","urlTagSuggest":"/blog/api/suggest/company","urlAfterDelete":"/blog/company","isAuthor":false,"subscribeUrl":"/blog/api/subscribe/56288d577eba6ef16f808526","unsubscribeUrl":"/blog/api/unsubscribe/56288d577eba6ef16f808526","urlEditPostPage":"/blog/company/56288d577eba6ef16f808526/edit","urlForTranslate":"/blog/post/translate","urlRelateIssue":"/blog/post/updateIssue","urlUpdateTranslate":"/blog/post/updateTranslate","urlLoadTranslate":"/blog/post/loadTranslate","urlTranslationStatus":"/blog/company/57789/translationInfo","urlRelatedArticles":"/blog/api/relatedArticles/company/57789","author":{"id":"120228024","uid":{"value":"120228024","lite":false,"hosted":false},"aliases":{},"login":"anyksenya","display_name":{"name":"anyksenya","avatar":{"default":"21377/120228024-6941905","empty":false}},"address":"[email protected]","defaultAvatar":"21377/120228024-6941905","imageSrc":"https://avatars.mds.yandex.net/get-yapic/21377/120228024-6941905/islands-middle","isYandexStaff":false},"originalModificationDate":"2013-01-29T08:13:52.000Z","socialImage":{"orig":{"fullPath":"https://avatars.mds.yandex.net/get-yablogs/49865/file_1465551301378/orig"}}}}}">

Выборочная синхронизация папок на Яндекс.Диске

---
Команда Яндекс.Диска,
помогаем сохранить важное

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

Возможно, синхронизация просто выключена


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

Закончилось место в облаке






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

Антивирус заблокировал синхронизацию

Такое случается крайне редко. Для того, чтобы это проверить, просто отключите на время ваше антивирусное ПО. Если все восстановится, то необходимо добавить программу в исключения. Ни в коем случае не оставляйте компьютер без защиты!

Сбои в работе интернета






Еще одна из распространенных проблем, это неполадки в сети. Если вы видите перебои в загрузке сайтов, то на Яндекс. Диске это тоже отразится. Он просто не сможет синхронизировать данные. Для решения проблемы, снова обратимся к области уведомлений. Здесь нажимаем на значок монитора правой кнопкой мыши. Выбираем «Центр управления сетями и общим доступом». В открывшемся окне, с левой стороны кликаем по надписи «Изменение параметров адаптера». Вы увидите все ваши сетевые подключения. Если используется Wi-Fi, тогда смотрим на беспроводные подключения. Проводной интернет, тогда подключения по локальной сети. В обоих случаях, должно быть указано состояние «Подключено». Если это не так, необходимо обратиться к провайдеру за диагностикой.

Ничего не помогло?


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

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

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

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

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

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

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

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

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

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

    В этой версии алгоритма мы использовали три основных дерева: локальное (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Кб

    Вычисление дайджестов уникальных 20000 файлов по 10кб (индексация)

    Запуск с 20000 синхронизированных файлов по 10Кб

    Upload 1Gb. Соединение Wi-Fi 10 МБит
    Время, сек

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

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

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



    Есть вопросы?

    Сообщить об опечатке

    Текст, который будет отправлен нашим редакторам: