Skip to content

Import performance

Nicolas Bouilleaud requested to merge import-performance into main

Super-experimental, peut-être plus une démo qu’un draft, mais je voulais le sortir de mon cerveau et en parler ici. Pour l’import de la BNLC, on passe de 25 minutes (hahaha) à une quinzaine de secondes. Ce qui prend énormément de temps, c’est pas l’import en lui-même, mais le rendu des rows un par un. Dans les trucs testés ici:

  1. plutôt que des hooks after_create, avec pour chaque row un render, un turbo_operation, et un stream, on prend les rows créés à la fin de la transation, on génère tout le html, et on ne fait qu’un seul (gros) stream turbo.
  2. de même, on n’envoie qu’un seul `notify_geometry_changed pour le layer.
  3. on désactive le lookup redis pour le cache (c’est des nouveaux rows)
  • ça, on ne pourra pas complètement s’en passer, mais: en principe, on peut faire un multi-fetch redis plutôt que de tester chaque row un par un.
  1. surtout, dans chaque Row#render on fait un appel à reload_with_fields_values, donc en fait une belle N+1. Avec un grand N.

Le point 4 est sans doute corrigeable indépendamment du reste, et c’est à vue de nez le plus lourd. Pour 1 et 2, il faut faire une réarchitecture pour utiliser les résultats des transactions plutôt que les hooks. Le point 2 est sans doute pertinent quand même.

refs #196 #306, fixes #248 (closed)

Edited by Nicolas Bouilleaud

Merge request reports