1. Home
  2. Docs
  3. Architecture & scale
  4. Large report and export architecture
Architecture & scale

Large report and export architecture

How Campaigns, Workforce and Flow export large datasets without exhausting PHP memory.

Developer v2026.10 Updated 5 Nov 2026

Request and authorization

Laravel authenticates the user, applies tenant/product authorization, creates a bulk_operations export record and tags large supported work with meta.engine=go-report.

Streaming worker

go-report claims those operations and streams rows directly from PostgreSQL using pgx.Rows. CSV is streamed in bounded batches. XLSX uses Excelize StreamWriter rather than hydrating the full workbook in memory.

Supported data sets span Campaign/shared operations, Workforce practitioner data, TALA Flow form submissions, and standard/custom reports.

Very large extracts

The worker enforces memory, disk, queue, concurrency and XLSX row limits. Oversized XLSX requests can fall back to segmented CSV/ZIP. Completed files are promoted atomically and written to shared application storage so Laravel can serve the immutable result.

Backpressure

Laravel checks worker readiness. When the report worker is under pressure or unavailable, the platform can reject new heavy exports while leaving core product workflows online. Report generation is deliberately an optional failure domain.

Was this page helpful?

Still stuck?

Open a ticket and reference this page — we will pick it up from there.

Open a ticket