Zenodo: Студенческий проект: Оптимизация производительности загрузки/выгрузки больших файлов по HTTP

Созданный на 12 февр. 2016  ·  6Комментарии  ·  Источник: zenodo/zenodo

Вариант использования

  • A) Исследователь хочет загрузить свой исследовательский набор данных объемом 260 ГБ в Zenodo. У исследователя есть только свой браузер для выполнения работы. Вариант: исследователи немного знают Python и могут написать скрипт, загружающий файл в Zenodo через API.
  • Б) Исследователь хочет загрузить исследовательский набор данных объемом 260 ГБ из Zenodo.

Здесь речь идет о больших файлах (минимум 100мб,

Цель
Оптимизируйте производительность загрузки и/или выгрузки данных в/из Zenodo.

Загрузить
Переместите данные из в Zenodo как можно быстрее. Используя 1) JavaScript (браузер) и/или 2) Python (API).

_Сторона клиента_
JavaScript: файл фрагмента (многие существующие библиотеки поддерживают это - например, PLUpload), загружать фрагменты параллельно (нигде такого не видел - можно использовать, например, веб-воркеры javascript).

Python: то же самое, что и JavaScript — фрагментация/распараллеливание + просмотр конвейера HTTP и уровня TCP.

Вопросы, которые необходимо принять во внимание:

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

_Серверная_

  • Модель процесса (блокирующий/неблокирующий ввод-вывод) — мы используем Gunicorn для запуска наших процессов Python, которые имеют разные модели событий.
  • Анализ производительности на стороне сервера (например, может ли сервер передать файлы прямо в хранилище файлов или ему нужно хранить фрагмент в памяти).
  • Как мы можем увеличить количество одновременных подключений.

Скачать
Пример 1: набор данных объемом 260 ГБ в 1000 файлов. Как исследователь может легко загрузить файлы, не нажимая 1000 ссылок.
Пример 2: набор данных объемом 260 ГБ в 4 файлах. Что произойдет, если сетевое подключение потеряно (т. е. возобновляемые загрузки).

_Сторона клиента_
Возможно, можно написать приложение JavaScript, которое поможет загрузить 1000 файлов. То же приложение может помочь с возобновляемыми загрузками. Опять же, модель веб-воркера Javascript может быть использована для загрузки файла по частям.

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

Вне области (но следует обсудить): другие методы оптимизации доставки файлов, такие как сети доставки контента.


Часть Python в первую очередь войдет в inveniosoftware/invenio-files-rest
Части JavaScript будут отдельными репозиториями.

Самый полезный комментарий

Есть ли лучший способ загрузки больших файлов, чем использование обычного интернет-браузера? Большие файлы через http, как правило, выходят из строя в течение нескольких часов, и загрузка не может быть возобновлена.

В моем случае я пытаюсь загрузить набор данных объемом 50 ГБ.
Скорость загрузки составляет около 500 Кбит/с, а соединение прерывается в течение 12 часов, в течение которых длится загрузка.

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

Все 6 Комментарий

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

Есть ли лучший способ загрузки больших файлов, чем использование обычного интернет-браузера? Большие файлы через http, как правило, выходят из строя в течение нескольких часов, и загрузка не может быть возобновлена.

В моем случае я пытаюсь загрузить набор данных объемом 50 ГБ.
Скорость загрузки составляет около 500 Кбит/с, а соединение прерывается в течение 12 часов, в течение которых длится загрузка.

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

Я даже не смог загрузить набор данных размером 2,2 ГБ после 5 попыток, менеджер загрузок тоже не смог помочь.

@Vichoko , тебе удалось это решить? если да, то как?

Я тоже был очень разочарован, пытаясь загрузить набор данных, который включает два больших файла (12 ГБ и 37 ГБ) в течение нескольких дней.

Я нашел https://zenodo.org/record/1261813 (https://gitlab.com/dvolgyes/zenodo_get), и это очень помогло. Мне удалось скачать всю запись с первого раза.
На первый взгляд, я не вижу в этом ничего волшебного , поэтому я предполагаю, что трюк должен быть в некоторых внутренних компонентах Python-реализации wget .

Link: https://zenodo.org/api/files/cb4ca1fa-1db1-40f9-8f39-0e9d3b2af7ae/musdb18hq.zip   size: 21607.1 MB
  0% [                                             ]     3121152 / 22656664047

В 2006 году я мог скачивать файлы размером 21 ГБ быстрее, используя коммутируемое соединение. Zenodo не хватает инфраструктуры CDN? Почему бы не использовать ведро S3 или GCS?

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

Была ли эта страница полезной?
0 / 5 - 0 рейтинги