Ответ 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.
Однако комментарий Брэндона правильный: это не отличная идея для целого каталога причин:
- Это приведет к тому, что вы будете потреблять больше полосы пропускания (с соответствующей производительностью и ценовым штрафом).
- Вы не будете экономить деньги на стоимости хранения (по-прежнему оплачиваются метаданные).
- Он полагается на недокументированное поведение, которое может быть изменено без каких-либо уведомлений.
- В отличие от реальных данных объекта, при загрузке нет возобновляемого поведения, поэтому ошибки ухудшают вас.
- Контрольная сумма для проверки целостности во время процесса загрузки отсутствует.
- Вероятно, многие клиентские библиотеки хранят метаданные в памяти, а не на диске, или сохраняют несколько копий, поэтому вы, скорее всего, увидите давление памяти в своем приложении.
Простое сохранение манифеста в отдельном объекте решает все эти проблемы. Вы можете сохранить местоположение манифеста в метаданных и получить преимущество обоих параметров.