Salut,
Je voudrais discuter avec vous de l'indexation des données, aujourd'hui, l'indexation des données est faite par haystack, avec la commande: python manage.py rebuild_index
.
Cette commande est très consommatrice en CPU car elle nécessite de ré-indexer tous le contenu à chaque fois. Cette commande est exécute par une tache cron toutes les 30 minutes.
C'est ainsi qu'un cœur à 100% pendant plus de 5 minutes toutes les demi-heures est utilisé.
La première solution, à été de changer la commande python manage.py rebuild_index
par python manage.py update_index
avec l'implémentation de la méthode qui va bien, pour permettre de ne plus réindexer tous le contenus. La PR à été faite et la QA est au moment ou j'écris ces lignes en cours (un grand merci à Pierre, o/).
Cette solution oblige de passer à une indexation par heure. Cela vous parait t-il acceptable d'avoir un lag d'une heure entre le moment ou le contenu est publié et le moment ou il est indexé ?
J'ai une autre solution à vous proposer, ce serait d'indexer le contenu dés sa publication. Cette solution utilise les signaux Django et le temps d'implémentation, sans compter les tests unitaires est d'environ une trentaine de minutes avec les tests manuel. Cette solution est décrite dans la documentation. On peut ajouter une queu qui permettrait de stocker les demandes d'indexation pour faire pas trop ralentir l'utilisateur, je vous laisse lire la doc sur le sujet.
Quelle solution préféré vous ? pourquoi ?
PS: j'ai pas de chiffre précis sur le coût de l'indexation, si la solution plaît, je pourrais le faire.