Zpět na domů

ETL pro 15 milionů GPS-pingů: stack a architektura

Systém ETL zpracovává 15 milionů GPS-pingů od autobusů Taškentu denně. Používá PostgreSQL s PostGIS, PySpark pro spatial analytics a Data Vault 2.0 pro modelování. Segmentuje spoje podle rychlosti, gap a blízkosti k zastávkám, vytváří analytické marty.

15 milionů GPS-pingů za den: jak postavit ETL pro autobusy
Advertisement 728x90

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:

Google AdInline article slot
  • 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:

Google AdInline article slot
  • 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

Google AdInline article slot
Advertisement 728x90

Číst dál