Zpracování 15 milionů GPS pingů denně: ETL architektura pro dopravní analytiku
Systém zpracovává 15 milionů GPS souřadnic od 1800 autobusů na 170 linkách v Taškentu. Pingy přicházejí každých 10 sekund přes API 3TM. Klíčovou výzvou je převod izolovaných souřadnic na strukturovaná data pro analýzu: určení zastávek, dopravních zácp, spojů a odchylek od tras.
Zavaděč na asyncio + aiohttp dotazuje API pomocí systemd časovačů. Data se zapisují do PostgreSQL s PostGIS. ETL orchestrace přes Dagster zajišťuje posloupnost: trasy → autobusy → zastávky → GPS aktualizace.
Volba technologického stacku a odmítnutí nadbytečných komponent
Původně byly testovány Kafka a ClickHouse, ale neosvědčily se:
- Kafka není vhodná pro pull model dotazování API – přidává režii bez užitku.
- ClickHouse je předčasný při současných objemech dotazů.
Výsledný stack:
- Ingestion: asynchronní Python zavaděč, ~360 vložení/sekundu na 2 vCPU / 4 GB RAM.
- Storage: PostgreSQL + PostGIS pro trasy, zastávky, časové řady GPS.
- Orchestration: Dagster pro závislosti a sledovatelnost.
- Spatial Analytics: PySpark pro náročné úlohy – přichycení GPS k trasám, výpočet vytížení.
Vrstva Staging uchovává surový JSON 1 den, poté ODS strukturovaná data v paměti bez opětovného čtení z databáze.
Víceúrovňový datový model
Data jsou organizována do tří vrstev pro škálovatelnost a audit:
- ODS: provozní data – trasy, zastávky, aktuální pozice autobusů.
- DDS (Data Vault 2.0): huby (entity), satelity (atributy), linky (vazby). GPS se neukládá, zaměření na trasy, autobusy, zastávky.
- CDM: analytické matice. Tabulka
fct_bus_trips– PostGIS LineString na spoj s metadaty: časová razítka, najeté kilometry, rychlost, shoda % s trasou.
Data Vault umožňuje přidávat atributy (telemetrie) bez refaktorování modelu.
Algoritmy segmentace spojů
Segmentace určuje začátek/konec spoje podle tří signálů:
- Rychlost: stání u počáteční/koncové zastávky.
- Časová mezera >5 min: přerušení toku.
- Blízkost k koncovému bodu trasy.
— Editorial Team
Zatím žádné komentáře.