Google云端存储中的元数据值是否有限制?

时间:2017-04-05 04:59:26

标签: google-cloud-storage

将文件上传到Google云端存储时,会有一个自定义数据字段metadata

Google's example相当简短:

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

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

对于元数据对象,GCS允许的最大值是否存在,我是否希望存储tar和zip文件的清单,或者几百KB?

2 个答案:

答案 0 :(得分:9)

使用以下命令在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标题&#34; HTTP 413请求太大&#34;和元数据未设置。低于该级别,它按预期设置。如果我使用更多可压缩输入(例如yes的输出),我可以获得更多数据,但截止值是相同的内容长度值(即压缩后)。由于2097KB == 2MiB几乎完全正确,我预计真正的限制是整个HTTP请求必须适合2MiB。

然而,布兰登的评论是正确的:对于整个目录而言,这不是一个好主意:

  1. 这将导致您消耗更多带宽(相关性能和成本损失)
  2. 您无法节省存储成本(因为元数据仍在收取费用)。
  3. 它依赖于无证的行为,Google可能会在没有任何通知的情况下对其进行更改。
  4. 与真实对象数据不同,上传时没有可恢复行为,因此错误会让你更糟。
  5. 在上传过程中没有校验和来验证完整性。
  6. 很可能许多客户端库将元数据存储在内存中而不是存储在磁盘上或保留多个副本,因此您更有可能在应用程序中看到内存压力。
  7. 只需将清单存储在单独的对象中即可解决所有这些问题。您可以将清单的位置存储在元数据中,并从中获益。

答案 1 :(得分:0)

根据this

<块引用>

这是所有自定义元数据键和值的最大组合大小限制,每个对象 8 KiB