Utviklet en pipeline for timesaggregering av strømforbruk i Python / SQL / Bash + Jq som oppnådde 180 ms for datasett på 30 dager fra heterogene JSONL‑kilder.
Arbeidet utført: 2025
180 ms for å aggregere en måned med måleravlesninger
Situasjon. Selskapet behandler store mengder heterogene strømdata fra flere datakilder, hver med sin egen rapporteringsfrekvens — fra timesintervaller til 15‑minuttersintervaller, og i noen tilfeller uregelmessige tidsstempler. Denne variasjonen gjør det utfordrende å lage et sammenhengende, sammenlignbart datasett. For å støtte presise energianalyser må disse dataene normaliseres til konsistente forbruksverdier per time, aggregert per sone.
Oppgave. Målet var å ta rå hendelsesdata fra et historisk datasett (i JSONL‑format) og konvertere dem til strømforbrukstall justert til hele timer, strukturert som én rad per time og per sone. Konkret innebar oppgaven:
- Justere tidsstemplede data til strenge timesintervaller,
- Aggregere total strømproduksjon innenfor hvert intervall ved å summere mix‑verdiene,
- Ta med utveksling over landegrensene ved å legge til import og trekke fra eksport,
- Levere de endelige verdiene i et strukturert, skalerbart format egnet for videre analyse.
- Løsningen måtte også være effektiv nok til å skalere til store tidsvinduer (30+ dager) og på tvers av flere land/soner.
Handling. For å løse oppgaven ble tre ulike varianter av løsningen implementert med Python, JQ (for JSON‑behandling på kommandolinjen) og SQL, hver optimalisert for ulike bruksområder:
Python ble valgt for sin fleksibilitet, enkle datamanipulering og evne til å håndtere transformasjoner i minnet effektivt. Med rene Python‑funksjoner ble det bygget en pipeline som:
- Parset JSONL‑filene til strukturerte datarammer
- Samplet tidsseriedataene om til timesintervaller
- Aggregerte produksjonen og beregnet netto strømforbruk (produksjon + import − eksport)
- Eksporterte resultatene som CSV eller lastet dem inn i en lettvekts SQLite‑database for inspeksjon.
JQ ble brukt til å lage en rask løsning med minimale avhengigheter for kommandolinjemiljøer, bygget som en kjede av JQ‑filtre.
I PostgreSQL ble JSONL‑dataene importert, normaliserte tabeller opprettet og en serie SQL‑spørringer skrevet.
For å evaluere ytelsen ble hver løsning benchmarket med historiske datasett på både 1 dag og 30 dager.
Resultat. Python‑implementasjonen viste seg å være den raskeste og mest skalerbare løsningen, og fullførte:
- Behandling av data for 1 dag på bare 34 ms
- Datasettet for 30 dager på 180 ms
Dette bekreftet at den egnet seg til å håndtere lengre tidsrom og samtidig holde ytelsen under ett sekund. Den ga også tydelig, vedlikeholdbar kode som lett kunne utvides til behandling av flere soner eller integreres i en ETL‑pipeline.
Samlet sett viste tilnærmingen med flere verktøy fleksibilitet i verktøybruken, sterk ytelsesoptimalisering og robust håndtering av utfordringer med tidsjustering og aggregering i reelle datapipelines for strømdata.
Se tilbake på Designet et helhetlig infrastrukturrammeverk for et forskningsinstitutt som berørte 14 avdelinger, med fleksible moduler, samlede datapipelines og strukturerte støttestrategier for varig innføring. Les videre: Utformet, utviklet, implementerte og støttet infrastruktur, databehandling og kartapplikasjonen i 2 år uten stopp, uten helger, helligdager eller ferier, 10–14 timer om dagen. Eller ta en titt på hele porteføljen.
Overfor kunder kaller vi denne En måned med måleravlesninger på 180 millisekunder — se den sammen med de andre sakene.
Ett stykke av en lengre oversikt — og den ligger i sin helhet her.
Hver oppføring er skrevet på samme måte: situasjonen, oppgaven, hva vi gjorde, og hva som endret seg.