平行複合式上傳 (original) (raw)
上傳大型檔案的其中一種策略稱為_平行複合式上傳_。在這種上傳方式中,檔案會分成最多 32 個區塊,這些區塊會平行上傳至臨時物件,最終物件會使用臨時物件重新建立,臨時物件則會刪除。
如果網路和磁碟速度不是限制因素,平行複合物件上傳速度會大幅加快;不過,儲存在值區中的最終物件是_複合物件_,只有 crc32c 雜湊,沒有 MD5 雜湊。 因此,使用 Python 應用程式下載物件時,您必須使用 crcmod 執行完整性檢查。只有在符合下列條件時,才應執行平行複合式上傳:
- 您不需要上傳的物件具有 MD5 雜湊。
- 任何需要下載物件的 Python 使用者 (包括 gsutil 使用者),都必須安裝 google-crc32c 或 crcmod。
舉例來說,如果您使用 Python 上傳影片素材資源,但這些素材資源只由 Java 應用程式放送,那麼平行複合上傳就是不錯的選擇,因為 Java 提供有效的 CRC32C 實作。
工具和 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才會執行平行複合式上傳: - **
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 作業將這些區塊重組為單一物件。
設計平行複合式上傳的程式碼時,請注意下列事項: