Importations composites parallèles

L'une des stratégies d'importation de fichiers volumineux est appelée importation composite parallèle. Dans ce type d'importation, un fichier est divisé en un maximum de 32 fragments qui sont importés en parallèle d'objets temporaires. L'objet final est ensuite recréé à l'aide des objets temporaires, et ceux-ci sont supprimés.

Les importations composites parallèles peuvent être considérablement plus rapides si la vitesse du réseau et celle du disque ne sont pas des facteurs limitants. Cependant, l'objet final stocké dans votre bucket est un objet composite qui ne comporte qu'un hachage crc32c et non un hachage MD5. Par conséquent, vous devez utiliser crcmod pour effectuer des vérifications d'intégrité lors du téléchargement de l'objet à l'aide d'applications Python. Vous ne devez effectuer des importations composites parallèles que si les conditions suivantes s'appliquent :

  • Les objets importés n'ont pas besoin de comporter de hachage MD5.

  • Les utilisateurs de Python, y compris les utilisateurs de gsutil, qui ont besoin de télécharger vos objets ont installé google-crc32c ou crcmod.

    Par exemple, si vous utilisez Python pour importer des éléments vidéo qui ne sont diffusés que par une application Java, les importations composites parallèles constituent un choix judicieux, car des implémentations CRC32C efficaces sont disponibles en Java.

Utilisation des importations composites parallèles par les outils et les API

Selon votre manière d'interagir avec Cloud Storage, les importations composites parallèles peuvent être gérées automatiquement en votre nom. Cette section décrit le comportement d'importation composite parallèle pour différents outils et fournit des informations sur la façon dont vous pouvez le modifier.

Console

La console Google Cloud n'effectue pas d'importations composites parallèles.

Ligne de commande

Vous pouvez configurer comment et quand gcloud storage cp effectue des importations composites parallèles en modifiant les propriétés suivantes :

  • storage/parallel_composite_upload_enabled : propriété permettant d'activer les importations composites parallèles. Si la valeur est False, désactivez les importations composites parallèles. Si la valeur est True ou None, effectuez des importations composites parallèles pour les objets qui répondent aux critères définis dans les autres propriétés. Le paramètre par défaut est None.

  • storage/parallel_composite_upload_compatibility_check : propriété permettant d'activer ou de désactiver les contrôles de sécurité. Si la valeur est True, gcloud storage n'effectue des importations composites parallèles que lorsque toutes les conditions suivantes sont remplies :

    Notez que pour vérifier ces conditions, gcloud CLI récupère les métadonnées du bucket de destination dans le cadre de la commande d'importation.

    Si la valeur est False, gcloud storage n'effectue aucun contrôle. Le paramètre par défaut est True.

  • storage/parallel_composite_upload_threshold : taille totale minimale des fichiers pour effectuer une importation composite parallèle. Le paramètre par défaut est de 150 Mio.

  • storage/parallel_composite_upload_component_size : taille maximale de chaque objet temporaire. Cette propriété est ignorée si la taille totale du fichier est si importante que plus de 32 morceaux de cette taille seraient nécessaires.

  • storage/parallel_composite_upload_component_prefix : préfixe utilisé lors de l'attribution de noms aux objets temporaires. Cette propriété peut être définie soit en tant que chemin absolu, soit en tant que chemin spécifique à l'objet final. Pour en savoir plus, consultez la description de la propriété. Le préfixe par défaut est le chemin absolu /gcloud/tmp/parallel_composite_uploads/see_gcloud_storage_cp_help_for_details.

Vous pouvez modifier ces propriétés en créant une Configuration nommée et en appliquant la configuration soit pour chaque commande à l'aide de l'option --configuration à l'échelle du projet, soit pour toutes les commandes gcloud CLI à l'aide de la commande gcloud config set.

Aucun espace disque local supplémentaire n'est requis lorsque vous utilisez gcloud pour effectuer des importations composites parallèles. Si une importation composite parallèle échoue avant la composition, exécutez à nouveau la commande gcloud CLI afin de tirer parti des importations avec reprise pour les objets temporaires qui ont échoué. Tous les objets temporaires importés avec succès avant l'échec ne sont pas réimportés lorsque vous reprenez l'importation.

Les objets temporaires sont nommés selon le modèle suivant :

TEMPORARY_PREFIX/RANDOM_VALUE_HEX_DIGEST_COMPONENT_ID

Où :

  • TEMPORARY_PREFIX est contrôlé par la propriété storage/parallel_composite_upload_component_prefix.
  • RANDOM_VALUE est une valeur numérique aléatoire.
  • HEX_DIGEST est un hachage dérivé du nom de la ressource source.
  • COMPONENT_ID est le numéro séquentiel du composant.

Généralement, les objets temporaires sont supprimés à la fin d'une importation composite parallèle. Toutefois, pour éviter de laisser des objets temporaires, vous devez vérifier l'état de sortie à partir de la commande gcloud CLI et supprimer manuellement tous les objets temporaires qui ont été importés dans le cadre d'une importation annulée.

Bibliothèques clientes

Java

Pour en savoir plus, consultez la documentation de référence de l'API Cloud Storage en langage Java.

Pour vous authentifier auprès de Cloud Storage, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

Vous pouvez effectuer des importations composites parallèles en définissant AllowParallelCompositeUpload sur true. Exemple :

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

Pour en savoir plus, consultez la documentation de référence de l'API Cloud Storage en langage Node.js.

Pour vous authentifier auprès de Cloud Storage, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

La bibliothèque cliente Node.js n'est pas compatible avec les importations composites parallèles. Utilisez plutôt les importations en plusieurs parties avec l'API XML.

Python

Pour en savoir plus, consultez la documentation de référence de l'API Cloud Storage en langage Python.

Pour vous authentifier auprès de Cloud Storage, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

La bibliothèque cliente Python n'est pas compatible avec les importations composites parallèles. Utilisez plutôt les importations en plusieurs parties avec l'API XML.

API REST

L'API JSON et l'API XML permettent toutes deux d'importer des fragments d'objets en parallèle et de les recombiner en un seul objet grâce à l'opération compose.

Tenez compte des éléments suivants lorsque vous concevez du code pour des importations composites parallèles :

  • Lorsque vous utilisez l'opération compose, les objets sources ne sont pas affectés par le processus de composition.

    En d'autres termes, si ces objets sont censés être temporaires, vous devez les supprimer explicitement une fois la composition terminée. Dans le cas contraire, les objets sources restent dans votre bucket et sont facturés en conséquence.

  • Afin d'empêcher les modifications d'objets sources entre les requêtes d'importation et de composition, vous devez fournir un numéro de génération attendu pour chaque source.