Caricamenti compositi paralleli

Una strategia per caricare file di grandi dimensioni è chiamata caricamenti compositi paralleli. In questo tipo di caricamento, un file viene diviso in un massimo di 32 blocchi, vengono caricati in parallelo agli oggetti temporanei, l'oggetto finale ricreati utilizzando gli oggetti temporanei, mentre gli oggetti temporanei eliminati.

I caricamenti compositi paralleli possono essere notevolmente più veloci se rete e disco la velocità non è un fattore limitante; mentre l'oggetto finale archiviato nel bucket è un oggetto composito, che ha soltanto un hash crc32c e non un hash MD5. Di conseguenza, devi usare crcmod per eseguire i controlli di integrità durante il download l'oggetto con le applicazioni Python. Esegui caricamenti compositi paralleli solo se si applicano le seguenti condizioni:

  • Qualsiasi utente Python, inclusi gli utenti gsutil, che deve scaricare il tuo in cui è installato google-crc32c o crcmod.

    Ad esempio, se utilizzi Python per caricare asset video pubblicati solo da un'applicazione Java, i caricamenti compositi paralleli sono una buona scelta perché in Java sono disponibili implementazioni efficienti di CRC32C.

  • Non è necessario che gli oggetti caricati abbiano un hash MD5.

In che modo strumenti e API utilizzano i caricamenti compositi paralleli

A seconda di come interagisci con Cloud Storage, i caricamenti compositi paralleli potrebbero essere gestiti automaticamente per tuo conto. Questa sezione descrive il comportamento di caricamento composito parallelo per vari strumenti e fornisce informazioni su come modificarne il comportamento.

Console

La console Google Cloud non esegue caricamenti compositi paralleli.

Riga di comando

Puoi configurare come e quando gcloud storage cp verrà eseguito in parallelo caricamenti compositi modificando le seguenti proprietà:

  • storage/parallel_composite_upload_enabled: proprietà per l'attivazione caricamenti compositi paralleli. Se False, disabilita l'elemento composito parallelo caricamenti. Se True o None, esegui caricamenti compositi paralleli per che soddisfano i criteri definiti nelle altre proprietà. La l'impostazione predefinita è None.

  • storage/parallel_composite_upload_compatibility_check: proprietà per attivare/disattivare i controlli di sicurezza. Se True, gcloud storage esegue solo in parallelo caricamenti compositi quando tutte le seguenti condizioni sono soddisfatte:

    Tieni presente che, per verificare queste condizioni, l'interfaccia a riga di comando gcloud recupera i metadati del bucket di destinazione nell'ambito del comando di caricamento.

    Se False, gcloud storage non esegue alcun controllo. Il valore predefinito è True.

  • storage/parallel_composite_upload_threshold: il totale minimo del file dimensioni per l'esecuzione di un caricamento composito parallelo. L'impostazione predefinita è 150 MiB.

  • storage/parallel_composite_upload_component_size: la dimensione massima per ogni oggetto temporaneo. La proprietà viene ignorata se le dimensioni totali del file è talmente grande che richiederebbe più di 32 chunk di queste dimensioni.

  • storage/parallel_composite_upload_component_prefix: il prefisso utilizzato quando si assegnano nomi agli oggetti temporanei. Questa proprietà può essere impostata come come percorso assoluto o come percorso relativo all'oggetto finale. Consulta le descrizione della struttura. Il prefisso predefinito è percorso assoluto /gcloud/tmp/parallel_composite_uploads/see_gcloud_storage_cp_help_for_details.

Puoi modificare queste proprietà creando una configurazione con nome e applicando la configurazione per comando, utilizzando Flag a livello di progetto --configuration o per tutte la gcloud CLI utilizzando il comando gcloud config set.

Quando utilizzi gcloud CLI non è richiesto spazio aggiuntivo su disco locale per eseguire caricamenti compositi paralleli. Se un caricamento composito parallelo non va a buon fine prima della composizione, esegui di nuovo il comando gcloud CLI per usufruire del caricamento riavviabile per gli oggetti temporanei che non sono riusciti. Qualsiasi gli oggetti temporanei caricati correttamente prima dell'errore non vengono vengano ricaricate quando riprendi il caricamento.

Gli oggetti temporanei vengono denominati nel seguente modo:

TEMPORARY_PREFIX/RANDOM_VALUE_HEX_DIGEST_COMPONENT_ID

Dove:

  • TEMPORARY_PREFIX è controllato dal proprietà storage/parallel_composite_upload_component_prefix.
  • RANDOM_VALUE è un valore numerico casuale.
  • HEX_DIGEST è un hash derivato dal nome della classe risorsa di origine.
  • COMPONENT_ID è il numero sequenziale del di strumento di authoring.

In genere, gli oggetti temporanei vengono eliminati al termine di un caricamento composito parallelo, ma per evitare di lasciarli inutilizzati, devi controllare lo stato di uscita del comando della CLI gcloud ed eliminare manualmente gli oggetti temporanei caricati nell'ambito di un caricamento interrotto.

Librerie client

Java

Per ulteriori informazioni, consulta API Cloud Storage Java documentazione di riferimento.

Per eseguire l'autenticazione su Cloud Storage, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

Puoi eseguire caricamenti compositi paralleli impostando AllowParallelCompositeUpload su true. Ad esempio:

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

Per saperne di più, consulta la documentazione di riferimento dell'API Cloud Storage Node.js.

Per eseguire l'autenticazione su Cloud Storage, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

La libreria client Node.js non supporta i caricamenti compositi paralleli. Utilizza invece Caricamenti multiparte API XML.

Python

Per ulteriori informazioni, consulta API Cloud Storage Python documentazione di riferimento.

Per eseguire l'autenticazione su Cloud Storage, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

La libreria client Python non supporta i caricamenti compositi paralleli. Utilizza invece Caricamenti multiparte API XML.

API REST

Sia l'API JSON che l'API XML supportano il caricamento di blocchi di oggetti. in parallelo e ricombinarli in un unico oggetto utilizzando Operazione compose.

Tieni presente quanto segue quando progetti un codice per un composto parallelo caricamenti:

  • Quando utilizzi l'operazione compose, gli oggetti di origine non sono interessati dal processo di composizione.

    Ciò significa che se sono pensati per essere temporanei, devi indicare esplicitamente eliminali una volta completata la composizione oppure altrimenti gli oggetti di origine rimangono nel bucket e vengono fatturati di conseguenza.

  • Per evitare modifiche agli oggetti di origine tra il caricamento e scrivere richieste, devi fornire un'istanza numero di generazione per ogni sorgente.