Problème d'import de données (500k rows) CSV vers DB

Bonjour à tous,

J’ai découvert n8n il y a peu, et j’ai tout de suite vu mon intérêt dans ce produit.
J’ai régulièrement des tâches automatiques à accomplir comme de la synchro de données de sources diverses vers de multiples bases de données.
Jusqu’ici j’ai construit des workflow assez complexes (avec du code) pour faire ce travail.

Mais là je suis bloqué ! Pas par la logique du workflow à mettre en place mais par l’occupation mémoire utilisée.

Je m’explique, je dois (chaque jour) lire un fichier CSV de 500 000 lignes que je dois intégrer dans une base de données.
Le faire en une seule passe n’a pas été d’une grande réussite.
Mon plan « B » a été de splitter ce fichier en plusieurs fichiers contenant moins de lignes. Cette liste de fichier est ensuite injectée dans le composant SplitInBatches qui se charge d’envoyer le nom du fichier à un autre workflow (contenant l’import des données).
Dans la logique tout fonctionne bien sauf qu’au fur et à mesure des boucles la charge mémoire continue d’augmenter. Je pensais que la RAM soit libérées au fur et à mesure mais non.

Avez-vous fait un cas similaire, qui serait mon plan « C » ?

Merci à tous de m’avoir lu :+1:

Duplicate:

Salut @vdeapps_vdeapps,

Je comprends que ton plan A est de passer la lecture de ton fichier CSV en entier par un SplitInBatches ?
Tandis que ton plan B est de passer une liste de fichier dans ce noeud ?

Comment effectues-tu la lecture de ton fichier CSV ?

Voici mon workflow principal qui est chargé de splitter mon CSV en de multiples fichiers CSV plus petits. Cette liste de fichier est ensuite envoyé au SplitInBatches pour le traitement de chaque fichier.

La lecture du CSV se fait dans le second workflow.

duplicate, mais en français :wink:

Est-ce que tu ne pourrais pas dans ce cas là :

  1. Lire les X premières lignes de ton fichier et les intégrer dans la base de données
  2. A la fin de ton workflow ajouter un nœud qui lance le même workflow en passant en paramètre X
  3. Lire les X lignes du fichier en commençant à la X+1 ème ligne

?

Je pense que le résultat sera le même.
D’après ce que j’ai compris, la mémoire n’est pas libérée tant que le workflow principal n’est pas terminé. Donc de workflow en sous-workflow les élémenst s’empilent dans la mémoire.
Je ferai le test quand même pour être sur en espérant que ça ne parte pas en boucle infinie

1 « J'aime »

Des nouvelles sur ce flow ?

Toujours pas de nouvelle. Pour cette partie je dois passer par un COPY en postgre