Parallele zusammengesetzte Uploads

Eine Strategie zum Hochladen großer Dateien wird als parallele zusammengesetzte Uploads bezeichnet. Bei einem solchen Upload wird eine Datei in bis zu 32 Blöcke aufgeteilt. Die Blöcke werden parallel zu temporären Objekten hochgeladen, das endgültige Objekt wird mithilfe der temporären Objekte neu erstellt und die temporären Objekte werden gelöscht.

Parallele zusammengesetzte Uploads können erheblich schneller sein, wenn Netzwerk- und Laufwerksgeschwindigkeit keine einschränkenden Faktoren darstellen. Das letzte in Ihrem Bucket gespeicherte Objekt ist jedoch ein zusammengesetztes Objekt, das nur einen crc32c-Hash und keinen MD5-Hash hat. Deshalb müssen Sie zum Ausführen von Integritätsprüfungen crcmod verwenden, wenn Sie das Objekt mit Python-Anwendungen herunterladen. Sie sollten parallele zusammengesetzte Uploads nur ausführen, wenn Folgendes zutrifft:

  • Die hochgeladenen Objekte müssen keinen MD5-Hash haben.

  • Jeder Python-Nutzer, einschließlich gsutil-Nutzer, der Ihre Objekte herunterladen muss, hat entweder google-crc32c oder crcmod installiert.

    Wenn Sie beispielsweise Python verwenden, um Video-Assets hochzuladen, die nur von einer Java-Anwendung bereitgestellt werden, sind parallele zusammengesetzte Uploads eine gute Wahl, da in Java effiziente CRC32C-Implementierungen verfügbar sind.

Wie Tools und APIs parallele zusammengesetzte Uploads verwenden

Abhängig davon, wie Sie mit Cloud Storage interagieren, werden parallele zusammengesetzte Uploads möglicherweise automatisch in Ihrem Namen verwaltet. In diesem Abschnitt wird das parallel zusammengesetzte Uploadverhalten für verschiedene Tools beschrieben und Sie erfahren, wie Sie das Verhalten ändern können.

Console

Die Google Cloud Console führt keine parallelen zusammengesetzten Uploads aus.

Befehlszeile

Sie können festlegen, wie und wann gcloud storage cp parallele zusammengesetzte Uploads ausführt. Dazu geben Sie folgende Attribute an:

  • storage/parallel_composite_upload_enabled: Attribut zum Aktivieren paralleler zusammengesetzter Uploads. Wird False festgelegt, werden parallele zusammengesetzte Uploads deaktiviert. Mit True oder None können Sie parallele zusammengesetzte Uploads für Objekte ausführen, die die in den anderen Attributen definierten Kriterien erfüllen. Die Standardeinstellung ist None.

  • storage/parallel_composite_upload_compatibility_check: Attribut zum Aktivieren/Deaktivieren von Sicherheitsprüfungen. Wenn True, führt gcloud storage nur parallele zusammengesetzte Uploads durch, wenn alle der folgenden Bedingungen erfüllt sind:

    Die gcloud CLI ruft zur Prüfung dieser Bedingungen die Metadaten für den Ziel-Bucket als Teil des Uploadbefehls ab.

    Bei False führt gcloud storage keine Prüfungen aus. Die Standardeinstellung ist True.

  • storage/parallel_composite_upload_threshold: Die minimale Gesamtgröße der Datei für einen parallelen zusammengesetzten Upload. Die Standardeinstellung ist 150 MiB.

  • storage/parallel_composite_upload_component_size: Die maximale Größe für jedes temporäre Objekt. Das Attribut wird ignoriert, wenn die Datei insgesamt so groß ist, dass mehr als 32 Blöcke dieser Größe erforderlich wären.

  • storage/parallel_composite_upload_component_prefix: Das Präfix, das beim Benennen temporärer Objekte verwendet wird. Dieses Attribut kann entweder als absoluter Pfad oder als Pfad relativ zum endgültigen Objekt festgelegt werden. Weitere Informationen finden Sie in der Attributbeschreibung. Das Standardpräfix ist der absolute Pfad /gcloud/tmp/parallel_composite_uploads/see_gcloud_storage_cp_help_for_details.

Um diese Attribute zu ändern, erstellen Sie eine benannte Konfiguration und wenden diese entweder mit dem projektweiten Flag --configuration pro Befehl oder für alle gcloud CLI-Befehle mit dem gcloud config set-Befehl an.

Wenn Sie mit gcloud CLI parallele zusammengesetzte Uploads ausführen möchten, benötigen Sie keinen zusätzlichen lokalen Speicherplatz. Wenn ein paralleler zusammengesetzter Upload vor der Zusammensetzung fehlschlägt, führen Sie den gcloud CLI-Befehl noch einmal aus, um den fehlgeschlagenen Upload der temporären Objekte fortzusetzen. Alle temporären Objekte, die vor dem Fehler erfolgreich hochgeladen wurden, werden beim Fortsetzen des Uploads nicht noch einmal hochgeladen.

Temporäre Objekte werden so benannt:

TEMPORARY_PREFIX/RANDOM_VALUE_HEX_DIGEST_COMPONENT_ID

Dabei gilt:

  • TEMPORARY_PREFIX wird vom Attribut storage/parallel_composite_upload_component_prefix gesteuert.
  • RANDOM_VALUE ist ein zufälliger numerischer Wert.
  • HEX_DIGEST ist ein Hash, der vom Namen der Quellressource abgeleitet wird.
  • COMPONENT_ID ist die fortlaufende Nummer der Komponente.

Im Allgemeinen werden temporäre Objekte am Ende eines parallelen zusammengesetzten Uploads gelöscht. Damit keine doppelten temporären Objekte zurückbleiben, sollten Sie über den gcloud CLI-Befehl den Exit-Status prüfen und alle temporären Objekte, die Teil eines abgebrochenen Uploads waren, manuell löschen.

Clientbibliotheken

Java

Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Java API.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Storage zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

Sie können parallele zusammengesetzte Uploads ausführen, indem Sie AllowParallelCompositeUpload auf true setzen. Beispiele:

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

Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Node.js API.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Storage zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

Die Node.js-Clientbibliothek unterstützt keine parallelen zusammengesetzten Uploads. Verwenden Sie stattdessen mehrteilige XML API-Uploads.

Python

Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Python API.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Storage zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

Die Python-Clientbibliothek unterstützt keine parallelen zusammengesetzten Uploads. Verwenden Sie stattdessen mehrteilige XML API-Uploads.

REST APIs

Sowohl die JSON API als auch die XML API unterstützen das parallele Hochladen von Objektblöcken und das Zusammenführen in einem einzelnen Objekt mit dem compose-Vorgang.

Beachten Sie beim Entwickeln von Code für parallele zusammengesetzte Uploads Folgendes:

  • Wenn Sie den compose-Vorgang verwenden, sind die Quellobjekte vom Zusammensetzungsprozess nicht betroffen.

    Wenn sie also temporär sein sollen, müssen Sie sie explizit löschen, nachdem die Zusammensetzung erfolgreich abgeschlossen wurde. Andernfalls verbleiben die Quellobjekte in Ihrem Bucket und werden entsprechend in Rechnung gestellt.

  • Um zu verhindern, dass Quellobjekte in der Zeit zwischen dem Hochladen und der Anfrage zur Zusammensetzung geändert werden, sollten allen Quellobjekten plausible Generierungsnummern‌ zugewiesen werden.