复合对象

转到示例

本页面介绍了复合对象,您可以通过现有对象来创建复合对象,而无需传输其他对象数据。复合对象可用于对现有对象执行附加操作,以及重新创建作为多个组成部分并行上传的对象。

组合操作

组合操作会创建一个新的复合对象,其内容由一系列指定序列的源对象串联而成。所有源对象都必须满足以下条件:

在执行复合操作时:

  • 源对象不会受影响。
  • 您可以使用 1 到 32 个源对象。
  • 源对象本身可以是复合对象。
  • 生成的复合对象与源对象具有相同的存储类别。
  • 如果源对象随后被替换或删除,生成的复合对象不会更改。
  • 使用 gsutil 执行对象复合时,生成的复合对象的 Content-Type 将匹配第一个源对象的 Content-Type

复合对象元数据

复合对象的元数据与其他对象的元数据之间有几点不同:

  • 复合对象没有 MD5 哈希值元数据字段。

  • 复合对象的 ETag 值并非基于 MD5 哈希值,客户端代码不应对复合对象 ETag 做任何假设,除了这些值会随着基础对象的更改而变化(请参阅面向 HTTP/1.1 的 IETF 规范)。

  • 每个复合对象都有一个“组件计数”元数据字段,用于计算复合对象中包含的非复合对象的数量。

    • 如果将一个复合对象重写到其他位置和/或重写为不同存储类别,则结果为一个组件计数为 1 的复合对象。

复合对象完整性检查

Cloud Storage 采用 CRC32C 对每个源对象执行完整性检查,不仅在上传时使用,还可让调用者在下载生成的复合对象时对其执行完整性检查。CRC32C 是一种错误检测代码,可根据各个组件的 CRC32C 值进行高效计算。您的应用在使用 CRC32C 时应遵循以下几点:

  • 上传源对象时,您应使用 CRC32C 库(如下面列出的其中一个库)计算每个对象的 CRC32C 值,并将该值包含在请求中。
  • 对于组合操作,您应将 CRC32C 包含在请求中。Cloud Storage 会返回复合对象的 CRC32C 值,您可以对该值进行验证,方法是根据源对象的 CRC32C 值构建新 CRC32C 值。
  • 下载时,您应计算所下载对象的 CRC32C 值,并将所得结果与响应中包含的值进行比较。
  • 如果您的应用可能会在源对象的上传到组合这段时间内更改这些对象,则应为源对象指定有特定世代的名称,以避免出现争用情况。

用于计算 CRC32C 值的库包括 Boost(适用于 C++)、GoogleCloudPlatform crc32c(适用于 Java)、crcmod(适用于 Python)和 digest-crc(适用于 Ruby)。另请注意,最新 Intel CPU 硬件支持 CRC32C。

有限的附加和修改功能

您可以通过组合操作来执行有限的对象附加和修改操作。

附加操作的实现方式是,将数据上传至一个新的临时对象,对要执行附加操作的对象以及此新数据进行组合,(可选)按照与原始对象相同的名称来命名组合操作的输出,然后删除此临时对象。

您还可以使用组合功能来为基本的对象修改操作提供支持。 例如,您可以从序列 {Y1, Y2, Y3} 组合对象 X,替换 Y2 的内容,并从这些相同组件重新组合 X。请注意,这要求不删除 Y1、Y2 和 Y3,因此您需要为这些组件和组合付费。

后续步骤