平行複合式上傳

上傳大型檔案的其中一種策略稱為「平行複合式上傳」。在這種上傳方式中,檔案會分成最多 32 個區塊,這些區塊會平行上傳至臨時物件,最終物件會使用臨時物件重新建立,而臨時物件則會刪除。

如果網路和磁碟速度不是限制因素,平行複合物件上傳速度會大幅加快;不過,儲存在值區中的最終物件是複合物件,只有 crc32c 雜湊,沒有 MD5 雜湊。 因此,使用 Python 應用程式下載物件時,必須使用 crcmod 執行完整性檢查。只有在符合下列條件時,才應執行平行複合式上傳:

  • 您不需要上傳的物件具有 MD5 雜湊

  • 任何需要下載物件的 Python 使用者 (包括 gsutil 使用者),都必須安裝 google-crc32c 或 crcmod。

    舉例來說,如果您使用 Python 上傳影片素材資源,但這些素材資源只由 Java 應用程式放送,那麼平行複合上傳就是不錯的選擇,因為 Java 提供效率極高的 CRC32C 實作。

工具和 API 如何使用平行複合式上傳

視您與 Cloud Storage 的互動方式而定,系統可能會自動為您管理平行複合上傳作業。本節說明不同工具的平行複合上傳行為,並提供如何修改行為的資訊。

控制台

Trusted Cloud 控制台不會執行平行複合式上傳。

指令列

您可以修改下列屬性,設定 gcloud storage cp 執行平行複合式上傳作業的方式和時間:

  • storage/parallel_composite_upload_enabled:用於啟用平行複合上傳的屬性。如果 False,請停用平行複合式上傳。如果是 TrueNone,請針對符合其他屬性所定義條件的物件,執行平行複合上傳作業。預設設定為 None

  • storage/parallel_composite_upload_compatibility_check:用於切換安全檢查的屬性。如果 Truegcloud storage 只會在符合下列所有條件時,執行平行複合式上傳:

    請注意,如要檢查這些條件,gcloud CLI 會在執行上傳指令時,一併擷取目的地 bucket 的中繼資料。

    如果 Falsegcloud 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_PREFIXstorage/parallel_composite_upload_component_prefix 屬性控制。
  • RANDOM_VALUE 是隨機數值。
  • HEX_DIGEST 是從來源資源名稱衍生而來的雜湊值。
  • COMPONENT_ID 是元件的序號。

一般來說,平行複合上傳作業結束時,系統會刪除暫時物件,但為避免留下暫時物件,您應檢查 gcloud CLI 指令的結束狀態,並手動刪除因上傳作業中止而上傳的任何暫時物件。

用戶端程式庫

Java

詳情請參閱 Cloud Storage Java API 參考說明文件

如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。

執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr

您可以將 AllowParallelCompositeUpload 設為 true,執行平行複合式上傳。 例如:

import com.google.cloud.storage.transfermanager.ParallelUploadConfig;
import com.google.cloud.storage.transfermanager.TransferManager;
import com.google.cloud.storage.transfermanager.TransferManagerConfig;
import com.google.cloud.storage.transfermanager.UploadResult;
import java.io.IOException;
import java.nio.file.Path;
import java.util.List;

class AllowParallelCompositeUpload {

  public static void parallelCompositeUploadAllowed(String bucketName, List<Path> files)
      throws IOException {
    TransferManager transferManager =
        TransferManagerConfig.newBuilder()
            .setAllowParallelCompositeUpload(true)
            .build()
            .getService();
    ParallelUploadConfig parallelUploadConfig =
        ParallelUploadConfig.newBuilder().setBucketName(bucketName).build();
    List<UploadResult> results =
        transferManager.uploadFiles(files, parallelUploadConfig).getUploadResults();
    for (UploadResult result : results) {
      System.out.println(
          "Upload for "
              + result.getInput().getName()
              + " completed with status "
              + result.getStatus());
    }
  }
}

Node.js

詳情請參閱 Cloud Storage Node.js API 參考說明文件

如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。

執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr

Node.js 用戶端程式庫不支援平行複合上傳。請改用 XML API 多部分上傳作業

Python

詳情請參閱 Cloud Storage Python API 參考說明文件

如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。

執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr

Python 用戶端程式庫不支援平行複合上傳。請改用 XML API 多部分上傳作業

REST API

JSON APIXML API 都支援平行上傳物件區塊,並使用 compose 作業將這些區塊重組為單一物件。

設計平行複合式上傳的程式碼時,請注意下列事項:

  • 使用 compose 作業時,來源物件不會受到組合處理的影響。

    也就是說,如果來源物件是暫時性的,您必須在成功完成組合後明確刪除,否則來源物件會留在值區中,並依規定計費。

  • 為防止在上傳和組合要求之間來源物件發生變更,您應提供每個來源的預期產生版本號碼