Подтвердить что ты не робот

Существует ли ограничение на длину значений метаданных в Google Cloud Storage?

При загрузке файла в облачное хранилище Google есть поле пользовательских данных metadata.

Пример Google довольно короткий:

var metadata = {
  contentType: 'application/x-font-ttf',
  metadata: {
    my: 'custom',
    properties: 'go here'
  }
};

file.setMetadata(metadata, function(err, apiResponse) {});

Есть ли максимальный размер того, насколько большой GCS позволит объект метаданных, должен ли я хранить манифесты tar и zip файлов или несколько сотен КБ там?

4b9b3361

Ответ 1

Используя следующую команду для загрузки метаданных в GCS:

$ echo '{"metadata": {"large": "' > body ; tr -dC '[:print:]' < /dev/urandom | tr -d '\\"' | head -c SIZE_OF_METADATA_IN_BYTES >> body ;  echo '"}}' >> body; curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -X PATCH -H "Content-type: application/json" -d @body -o return_body https://www.googleapis.com/storage/v1/b/manifest-geode-357/o/empty

Я нахожу, что выше заголовка 2097KB служба возвращает "HTTP 413 Request Too Large", а метаданные не установлены. Ниже этого уровня он установлен как ожидалось. Если я использую более сжимаемый вход (например, вывод yes), я могу получить больше данных, но отсечка имеет то же значение длины содержимого (которое является пост-сжатием). Как 2097KB == 2MiB почти точно, я ожидаю, что истинное ограничение - весь HTTP-запрос должен соответствовать 2MiB.


Однако комментарий Брэндона правильный: это не отличная идея для целого каталога причин:

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

Простое сохранение манифеста в отдельном объекте решает все эти проблемы. Вы можете сохранить местоположение манифеста в метаданных и получить преимущество обоих параметров.