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.
- La route
jobs/:id/chunkest reutilisee avecmode: sheet_batch. - Le backend ecrit les lignes dans des fichiers
sheet_N.ndjsonet met a jour unmanifest.json. - 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.ndjsonAnalyse 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".