Laravel-excel: Pourquoi les exportations en file d'attente prennent-elles beaucoup de temps?

Créé le 2 juil. 2020  ·  7Commentaires  ·  Source: Maatwebsite/Laravel-Excel

Conditions préalables

Versions

  • Version PHP:7.1.3
  • Version Laravel:5,8
  • Version du package:3,1

La description

J'utilise ce package depuis plus d'un an maintenant. Récemment, j'ai commencé à avoir des problèmes de mémoire et de performances. Les utilisateurs essaient de télécharger beaucoup de données; parfois des données historiques. J'ai donc lu la documentation et j'ai trouvé la section en file d'attente. Au début, c'était la solution parfaite. Avec les exportations en file d'attente, plusieurs travaux sont distribués afin de générer le fichier par blocs. Mais j'ai remarqué quelque chose. Chaque tâche (AppendQueryToSheet) qui a été distribuée a mis plus de temps à se terminer que la dernière. Et le travail final (CloseSheet) a pris encore plus de temps à terminer.

Ma question est la suivante: est-ce ainsi que fonctionne l'exportation en file d'attente? ¿Ou est-ce que je manque quelque chose?

Informations Complémentaires

J'utilise Redis et Horizon. Même j'ai essayé avec plusieurs travailleurs, mais il semble qu'à chaque fois qu'un travail se termine, un nouveau travail est envoyé. Donc, cela n'a pas résolu mon problème.

J'ai joint cette image pour que vous puissiez voir les heures enregistrées.

Selection_007

question

Commentaire le plus utile

Chaque requête doit rouvrir le fichier de feuille de calcul, ce qui prend un certain temps à PhpSpreadsheet, de sorte que chaque ajout est plus long.

J'ai quelques changements prévus pour la version 3.2 qui amélioreront cela.

Tous les 7 commentaires

Chaque requête doit rouvrir le fichier de feuille de calcul, ce qui prend un certain temps à PhpSpreadsheet, de sorte que chaque ajout est plus long.

J'ai quelques changements prévus pour la version 3.2 qui amélioreront cela.

Je rencontre le même problème ici. La taille des fichiers n'est pas non plus massive, seulement 5 à 10 Mo. Je ne rencontre aucun pic d'utilisation du processeur ou de la mémoire.

J'ai décidé de créer un service avec python et pandas et il s'est beaucoup amélioré, et je veux dire BEAUCOUP. Laravel Excel est une excellente bibliothèque mais je suppose que pour ce travail, ce n'est peut-être pas le bon outil

@ okmkey45 Pour être honnête, ce n'est pas vraiment la faute de Laravel Excel, il s'appuie sur PHPSpreadsheet qui est une bibliothèque inefficace pour lire / écrire des fichiers. C'est dommage car les abstractions autour des requêtes de segmentation et des tâches de mise en file d'attente sont vraiment utiles ici, et me font gagner beaucoup de temps à écrire un service en Go / Python et à le connecter à ma file d'attente.

Il existe de nombreuses alternatives à PHPSpreadsheet qui sont beaucoup plus rapides sur les gros fichiers, peut-être qu'elles pourraient être échangées lorsque nous utilisons ->queue ou ShouldQueue ?

@aakarim c'est en fait quelque chose que j'ai envisagé, mais je n'ai actuellement pas le temps ni le cas d'utilisation pour l'implémenter. Je serais ouvert pour un PR tant qu'il resterait simple et opt-in.

J'aurai une fête après cette date limite. Y a-t-il des packages que vous préférez / recommandez @patrickbrouwers? https://github.com/box/spout semble être un bon point de départ.

@aakarim oui boîte / bec. J'ai même envisagé de rendre possible l'utilisation de league / csv si vous voulez juste csv, c'est de loin l'option la plus rapide pour les importations / exportations en vrac de grande taille.

Cette page vous a été utile?
0 / 5 - 0 notes