Совместимость облачного хранилища Google с многокомпонентной загрузкой aws s3

Хорошо, у меня есть рабочие приложения, которые используют amazon s3 multipart, они используют CreateMultipart, UploadPart и CompleteMultiPart.

Сейчас мы переходим на облачное хранилище Google, и у нас проблема с multipart. Насколько я понял, Google не поддерживает s3 multipart, получил информацию отсюда Поддержка Google Cloud Storage для многокомпонентной загрузки S3.

Итак, я вижу, что у Google есть ближайший метод Compose https://cloud.google.com/storage/docs/composite-objects, где я просто загружаю разные объекты, а затем отправляю запрос на их объединение, или я могу использовать uploadType = multipart https://cloud.google.com/storage/docs/json_api/v1/how-tos/upload#resumable, но это вроде полностью отличается от s3 multipart. И есть возобновляемая загрузка https://cloud.google.com/storage/docs/resumable-uploads, который, кажется, позволяет загружать файлы кусками, но без полной составной части.

Какой вариант лучше всего использовать? Некоторые службы уже используют CreateMultiPart, UploadPart, CompletePart, и мне нужно написать «адаптер» для этих служб, чтобы они были совместимы с облачным хранилищем Google.


person NIck    schedule 29.04.2020    source источник


Ответы (1)


Обновление: приведенный ниже ответ больше неверен. GCS поддерживает загрузку нескольких частей: https://cloud.google.com/storage/docs/xml-api/post-object-multipart.

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

Основные преимущества многостраничной загрузки - это возможность одновременной загрузки нескольких потоков с одного или нескольких компьютеров и возможность частичного сбоя загрузки, чтобы не испортить всю загрузку. Лучший способ получить те же преимущества с GCS - это загрузить части как отдельные объекты, а затем использовать Compose для объединения их в окончательный объект. Действительно, именно это и делает утилита командной строки gsutil при параллельной загрузке.

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

uploadtype = multipart-загрузки немного отличаются. Это способ указать полные метаданные объекта, а также его данные в одной операции загрузки с использованием составного HTTP-запроса.

person Brandon Yarbrough    schedule 29.04.2020
comment
Мне интересно, полезно ли multipart вообще в случае, если загрузка происходит с одного компьютера, поскольку пропускная способность может быть разделена между частичными загрузками по сравнению со всей пропускной способностью, используемой отдельной частью в случае прямой загрузки. Все SDK S3 используют multipart под капотом при загрузке чего-либо большего, чем несколько мегабайт. Мне интересно, действительно ли это улучшает пропускную способность, есть идеи? - person pinkpanther; 03.08.2020
comment
Параллельная загрузка нескольких частей объекта с одной машины на самом деле часто увеличивает пропускную способность из-за работы TCP. Вы можете добиться этого с помощью GCS, загрузив несколько объектов как отдельные объекты, а затем используя вызов API compose, чтобы объединить их в один конечный объект. Команда gsutil может сделать это для ваших загрузок, если вы используете флаг -m. - person Brandon Yarbrough; 04.08.2020
comment
Спасибо. Я должен был сказать один и тот же клиент / процесс вместо одной машины. Но я думаю, что ответ такой же, не так ли? - person pinkpanther; 06.08.2020
comment
Будьте осторожны при различении поддерживаемых и предлагаемых в качестве функции предварительного просмотра. Последнее немного более рискованно для использования в производственных системах, и в упомянутой статье говорится, что это все еще считается функцией предварительной версии и может иметь ограниченную поддержку. К сожалению, это означает, что ваш исходный ответ все еще в силе. - person NBJack; 10.06.2021