2017-04-05 76 views
13

将文件上传到Google云端存储时,会有一个自定义数据字段metadataGoogle云端存储中的元数据值的长度是否有限制?

Google's example是相当短的:

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

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

是否有GCS有多大允许的元数据对象最大,我应该要存储的焦油和zip文件,或几百KB体现在那里?

+0

您可以尝试,但是无论如何,元数据存储都会以正常速率进行计数和计费。 –

+0

关键是要在那里放置一些东西,让我知道我是否需要3Gig文件... – Paul

+0

这是无证的,只有谁试过或工程师知道。你为什么不尝试在其中放入3GB? –

回答

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头中的服务回报“HTTP 413请求太大”和元数据未设置。低于该水平时,按预期设定。如果我使用更多的可压缩输入(例如yes的输出),我可以获得更多的数据,但截止点具有相同的内容长度值(这是压缩后)。正如2097KB == 2MiB几乎完全一样,我期望真正的限制是整个HTTP请求必须适合2MiB。


但是布兰登的评论是正确的:这是不适合的原因,整个目录一个好主意:

  1. 这将导致你消耗更多的带宽(与相关的性能和成本损失)
  2. 您不会节省任何存储成本(因为元数据仍然收取费用)。
  3. 它依赖于未经记录的行为,Google可能会对其进行更改,恕不另行通知。
  4. 与真实对象数据不同,上传时不存在可恢复的行为,所以错误对您造成更大的影响。
  5. 在上传过程中没有校验和来验证完整性。
  6. 很可能许多客户端库将元数据存储在内存中而不是磁盘上或保留多个副本,因此您更有可能在应用程序中看到内存压力。

只需将清单存储在单独的对象中即可解决所有这些问题。您可以将清单的位置位置存储在元数据中,并获得这两个选项的好处。

+0

字母“ABC”一遍又一遍地重复将gzip相当好。 1MB的“ABC”通过gzip变成只有1KB。如果数据更随机一些,会发生什么? – Paul

+0

使用'tr -dC'[:print:]' David

+0

这对我来说已经够用了。尽管如此,赏金却被其他人放置。 – Paul

相关问题