J'ai rencontré cela à la fois avec des modules contrib tiers et avec certaines de mes propres opérations. Je suis curieux de savoir comment accélérer mes opérations par lots / contrib ?
Supposons qu'ils fonctionnent avec des nœuds (importation / mise à jour, etc.) et que nous ayons à analyser des listes de nœuds dans la plage 10 000+ (bien que j'ai dû traiter 15 millions de lignes .. ce qui oui - je suis juste foutu. .)
Est-il plus rapide de s'attacher au travail cron.php de drupals et d'exécuter "sans tête"? Vous utilisez Drush? ou est-ce simplement une question de savoir comment une analyse efficace et rapide je peux développer mon code et il n'y a pas d' influences extérieures ou de conseils d'optimisation spécifiques au lot ...
Actuellement, j'ai rencontré des opérations qui (en utilisant un calcul approximatif) pourraient prendre plus de 24 heures ...
Merci!
la source
Chaque appel batch est une requête HTTP. Vous devez donc trouver la combinaison parfaite du nombre d'itérations que vous pouvez traiter avant qu'une autre requête HTTP ne soit déclenchée. Deux choses à considérer sont la mémoire et le temps d'exécution maximum. Vous souhaiterez traiter autant d'itérations que possible par lot pour réduire le nombre de requêtes HTTP car elles sont probablement le coupable de votre lot lent.
Si votre lot est trop lourd pour fonctionner efficacement, vous pouvez essayer d'utiliser une file d'attente à la place. Il y a une bonne présentation batch vs file d'attente ici http://sf2010.drupal.org/conference/sessions/batch-vs-queue-api-smackdown . Les files d'attente ne fournissent pas de commentaires aux utilisateurs et peuvent être exécutées en parallèle.
Si vous avez besoin des commentaires des utilisateurs, vous êtes lié au lot, mais vous pouvez même utiliser la file d'attente dans votre lot pour essayer de l'optimiser.
la source
Comme d'autres l'ont dit, Drush est une bonne solution, mais une file d'attente est un excellent outil à utiliser. L'API Batch dans Drupal 7 utilise l'API de file d'attente principale intégrée, donc si vous utilisez MySQL, votre processus pourrait y être goulot d'étranglement. Mais, l'API Queue de Drupal 7 est enfichable, vous pouvez donc utiliser un autre système de file d'attente comme beanstalkd.
la source
Si vous pouvez le faire en parallèle, c'est un bon début. Voici quelques-unes de mes réflexions à ce sujet, car j'ai déjà utilisé 4 threads pour parcourir plus d'un million de pages (via boost). Vous cherchez à le généraliser maintenant. http://groups.drupal.org/node/126624
la source