Portfolio BUT2
Technique

Trace 4 - Chunks, batches et NDJSON

Decoupage des donnees d'export par feuille et batch pour eviter les gros payloads.

Conception d'une architecture d'export robuste

Exploitation et traitement de donnees volumineuses

Trace 4

Envoyer les donnees par feuille et par batch

Trace 4 - Flux final : chaque batch est ecrit temporairement puis lu ligne par ligne par OpenSpout.

Cette trace montre la partie la plus importante pour les gros exports : le frontend n'envoie plus un seul enorme JSON. Il envoie les lignes par feuille et par batch, puis l'API PHP les ecrit dans des fichiers temporaires avant la generation.

  1. La route jobs/:id/chunk est reutilisee avec mode: sheet_batch.
  2. Le backend ecrit les lignes dans des fichiers sheet_N.ndjson et met a jour un manifest.json.
  3. Au start, OpenSpout lit les lignes batch par batch et evite de charger tout le payload en memoire.

Exemple de chunk envoye

{
  "mode": "sheet_batch",
  "sheetName": "Ok Demarrages Operations",
  "sheetIndex": 5,
  "columns": ["Date", "Poste", "Controle", "Resultat"],
  "rows": [["2026-02-23", "FR2", "Operation 1", "OK"]],
  "batchIndex": 2,
  "totalBatches": 12
}

Structure temporaire cote API PHP

fichiers/cockpit/.payloads/export_job_36/
  manifest.json
  sheet_0.ndjson
  sheet_1.ndjson
  sheet_2.ndjson

Analyse des savoir-faire

Le savoir-faire d'architecture est decouper un traitement lourd en un protocole simple. Je n'ai pas ajoute une API completement separee : j'ai garde le systeme de jobs existant et j'ai enrichi la route de chunk pour accepter un mode par feuille.

Le savoir-faire donnees est traiter des volumes sans les charger integralement. Le point critique etait d'eviter le json_decode d'un payload complet, car meme avec des chunks reseau, reconstruire un gros JSON en memoire annule l'interet du decoupage.

Cette trace montre donc pourquoi le vrai changement n'est pas seulement "envoyer en morceaux", mais aussi "stocker et relire en streaming".

On this page