上传大型文件的一种策略称为并行复合上传。在此类上传中,一个文件最多会分为 32 个数据块,这些数据块会并行上传到临时对象,系统会使用临时对象重新创建最终对象并删除临时对象。
如果网络和磁盘速度足够快,则并行复合上传的速度明显快于其他方式的上传速度;但是,存储在存储桶中的最终对象是复合对象,它仅包含 crc32c 哈希值,不包含 MD5 哈希值。因此,在使用 Python 应用下载对象时,您必须使用 crcmod 来执行完整性检查。只有在以下情况下,您才应执行并行复合上传:
任何需要下载您的对象的 Python 用户(包括 gsutil 用户)都已安装 google-crc32c 或 crcmod。
例如,如果您使用 Python 上传仅由 Java 应用传送的视频资源,则并行复合上传是一种不错的选择,因为 Java 中提供了高效的 CRC32C 实现。
您不需要上传的对象包含 MD5 哈希值。
工具和 API 如何使用并行复合上传
根据您与 Cloud Storage 的交互方式,系统可能会代表您自动管理并行复合上传。本部分介绍不同工具的并行复合上传行为,并说明如何修改该行为。
控制台
Google Cloud 控制台不会执行并行复合上传
命令行
您可以通过修改以下属性来配置 gcloud storage cp
执行并行复合上传的方式和时间:
storage/parallel_composite_upload_enabled
:用于启用并行复合上传的属性。如果为False
,则停用并行复合上传。如果为True
或None
,则对满足其他属性中定义的条件的对象执行并行复合上传。默认设置为None
。storage/parallel_composite_upload_compatibility_check
:用于切换安全检查的属性。如果为True
,则gcloud storage
仅在满足以下所有条件时执行并行复合上传:请注意,为了检查这些条件,gcloud CLI 会在上传命令中检索目标存储桶的元数据。
如果为
False
,gcloud storage
不会执行任何检查。默认设置为True
。storage/parallel_composite_upload_threshold
:执行并行复合上传的文件总大小下限。默认设置为 150 MiB。storage/parallel_composite_upload_component_size
:每个临时对象的大小上限。如果文件总大小太大,以致于按此参数大小分割的数据块数量超过 32 个,则系统会忽略该属性。storage/parallel_composite_upload_component_prefix
:为临时对象命名时使用的前缀。此属性可以设置为绝对路径,也可以设置为相对于最终对象的路径。如需了解详情,请参阅属性说明。默认前缀是绝对路径/gcloud/tmp/parallel_composite_uploads/see_gcloud_storage_cp_help_for_details
。
如需修改这些属性,您可以创建命名配置并使用 --configuration
项目范围标志来按命令应用配置,也可以使用 gcloud config set
命令为所有 gcloud CLI 命令应用配置。
使用 gcloud CLI 执行并行复合上传时,系统不需要额外的本地磁盘空间。如果并行复合上传在组合对象之前失败,请再次运行 gcloud CLI 命令,以便对失败的临时对象执行可续传上传。在恢复上传时,系统不会重新上传并行复合上传失败之前已成功上传的任何临时对象。
临时对象的命名方式如下:
TEMPORARY_PREFIX/RANDOM_VALUE_HEX_DIGEST_COMPONENT_ID
其中:
TEMPORARY_PREFIX
由storage/parallel_composite_upload_component_prefix
属性控制。RANDOM_VALUE
是一个随机数值。HEX_DIGEST
是从来源资源名称派生的哈希值。COMPONENT_ID
是组件的序列号。
通常,系统会在并行复合上传结束时删除临时对象,但为了避免遗留临时对象,您应通过 gcloud CLI 命令检查退出状态,并且应手动删除在已取消的任何上传过程中上传的任何临时对象。
REST API
JSON API 和 XML API 都支持并行上传对象数据块,并且支持使用 compose
操作将它们重新组合为单个对象。
为并行复合上传设计代码时,请注意以下几点: