Parallélisation du chargement des données

L'utilitaire de chargement de données est amélioré dans HCL Commerce version 9.1 pour permettre la parallélisation. La parallélisation permet d'effectuer beaucoup plus rapidement certaines tâches de chargement de données, en augmentant le nombre d'unités d'exécution utilisées pour charger des données dans la base de données.

Important :
  • Le réglage des performances de l'utilitaire de chargement de données et de vos données est nécessaire pour utiliser cette fonctionnalité efficacement. Cette fonctionnalité peut réduire les performances globales du chargement des données. Vous devez examiner attentivement la relation entre la parallélisation, sa configuration, le type de données et sa structure particulière.
  • La parallélisation du chargement des données n'est compatible qu'avec les données formatées CSV.

Dans les versions précédentes de HCL Commerce, l'utilitaire de chargement de données était une application à thread unique qui était limitée par des classes singleton qui n'étaient pas conçues pour une utilisation parallèle. Cette conception a limité l'utilisation de l'utilitaire pour certains travaux présentant de grandes quantités de données, entravant les performances de l'outil. Dans certains cas, les utilisateurs de l'outil peuvent avoir du mal à effectuer leur travail en raison de tâches à exécution longue. Avec cette nouvelle mise à niveau vers l'utilitaire de chargement de données, plusieurs utilisateurs de l'outil peuvent charger des données simultanément. En outre, des tâches plus courtes peuvent permettre d'exécuter des tâches ultérieures plus tôt.

Architecture

Les améliorations architecturales apportées à l'utilitaire de chargement de données comprennent l'ajout d'une file d'attente où le lecteur du fichier CSV crée des lots de données à traiter. La file d'attente a une taille maximale, ce qui, lorsqu'elle est atteinte, empêche temporairement le lecteur de produire davantage de lots. L'unité d'exécution du lecteur continuera de placer des lots de données dans la file d'attente au fur et à mesure que les lots sont utilisés. Une fois que toutes les données sont lues à partir du fichier d'entrée, l'unité d'exécution du lecteur placera un lot vide dans la file d'attente, puis sortira avec un rapport récapitulatif du chargement de données.

Chaque unité d'exécution d'écriture supprime un lot de la file d'attente et traite le lot pour charger des données dans la base de données. Lorsqu'une unité d'exécution d'écriture obtient un lot vide de la file d'attente, il replace le lot vide dans la file d'attente et l'unité d'exécution d'écriture sort avec un rapport récapitulatif du chargement de données.

L'utilitaire de chargement de données vérifiera s'il y a des erreurs dans chaque unité d'exécution d'écriture jusqu'à ce que toutes les unités d'exécution d'écriture se terminent et sortent. S'il y a des fichiers CSV d'erreur de retraitement créés par les unités d'exécution d'écriture, l'utilitaire de chargement de données fusionnera tous les fichiers CSV de retraitement d'erreur en un seul fichier CSV de retraitement d'erreur, puis rechargera ce fichier CSV à l'aide d'une seule unité d'exécution d'écriture. Une fois que toutes les unités d'exécution d'écriture auront terminé, l'utilitaire de chargement de données produira un rapport récapitulatif du chargement de données commun.

Considérations relatives aux performances et à la gestion des erreurs

En raison de la nature complexe du chargement des données hiérarchiques avec plusieurs unités d'exécution, la gestion des erreurs doit être soigneusement prise en compte lors de l'activation et de la parallélisation de la configuration. Cela est particulièrement vrai lorsqu'il s'agit de l'ajustement des performances en fonction de votre environnement et de votre jeu de données.

Avertissement : Si vos données contiennent de nombreuses lignes article qui font référence aux mêmes données, des blocages SQL peuvent se produire. Assurez-vous que les données que vous chargez ne contiennent pas d'entrées en double ou contradictoires, et qu'elles sont structurées d'une manière qui évite l'écriture de plusieurs unités d'exécution d'écriture sur les mêmes entrées SQL.
Lors de la mise en œuvre de la parallélisation, considérez ce qui suit comme une pratique exemplaire :
  • Utilisez les paramètres de charge de données existants commitCount, batchSize et maxError pour chaque élément LoadItem pour vous assurer que les performances de votre utilitaire de chargement de données sont commutées.
  • Formatez vos données pour tirer parti de la parallélisation de manière appropriée. Par exemple, si vos données contiennent des données hiérarchiques, placez les données parentes ensemble vers le début du fichier. Les chances de chargement des données enfant pour lesquelles les données parentes ne sont pas encore présentes seront réduites.

Paramètres et valeurs par défaut configurables

Par défaut, l'utilitaire de chargement de données est défini pour s'exécuter en mode d'exécution unique. Cela garantit le comportement de travail et les performances auxquelles les utilisateurs s'attendent. Les nouveaux paramètres suivants ont été ajoutés pour contrôler la parallélisation de l'utilitaire de chargement de données.

Un exemple de configuration de chargement de données qui inclut l'utilisation complète de ces paramètres est disponible ici.

Paramètre Type de valeur Valeur par défaut Description
numberOfThreads Entier 1 Nombre maximal d'unités d'exécution d'écriture individuelles prennant des lots de données de la file d'attente, les traitent dans l'ordre et écrivent les données traitées dans la base de données. Par défaut, le paramètre numberOfThreads est défini sur 1, ce qui signifie que l'utilitaire de chargement de données doit s'exécuter en mode d'exécution unique (existant).

Le nombre maximal d'unités d'exécution est de 8.

À partir des tests de performance internes, HCL recommande d'utiliser 4 unités d'exécution. L'utilisation de plus de quatre unités d'exécution a montré qu'elle réduisait les performances globales de chargement, et peut entraîner les erreurs suivantes :
com.ibm.commerce.foundation.dataload.exception.DataLoadApplicationException: A problem occurred while initializing the property information during the business object builder initialization.

Si un nombre supérieur à 8 est fourni, le nombre maximal d'unités d'exécution est utilisé.

inputDataListSize Entier 20 Nombre maximal d'entrées de ligne CSV incluses dans un lot de données à ajouter à la file d'attente. Chaque unité d'exécution d'écriture gère un seul lot de données de la file d'attente. Une fois qu'elle est chargée, l'unité d'exécution est libérée pour traiter un autre lot à partir de la file d'attente. Par défaut, le paramètre inputDataListSize est défini sur 20.
queueSize Entier numberOfThreads Nombre maximal de lots pouvant exister dans la file d'attente. Une fois que la file d'attente est remplie du nombre maximal de lots, le lecteur attend que les lots de la file d'attente soient consommés avant de continuer à produire et à faire la queue d'autres lots. Par défaut, ceci est défini sur la valeur de propriété numberOfThreads.
multipleThreadsEnabled Booléen false Définit si la parallélisation est activée pour l'élément de charge spécifique. En définissant ce paramètre sur false pour un LoadItem spécifique, vous remplacez les paramètres de parallélisation définies et placez l'utilitaire de chargement de données dans une opération à unité d'exécution unique.

Défini manuellement par LoadItem, si ce paramètre n'est pas spécifié, sa valeur par défaut false est utilisée.