Powrót do strony głównej

ETL dla 15 mln GPS-pingów: stack i architektura

System ETL przetwarza 15 mln GPS-pingów od autobusów z Taszkientu codziennie. Używa PostgreSQL z PostGIS, PySpark do spatial analytics i Data Vault 2.0 do modelowania. Segmentuje kursy po prędkości, luce i bliskości do przystanków, tworząc marty analityczne.

15 mln GPS-pingów dziennie: jak zbudować ETL dla autobusów
Advertisement 728x90

Przetwarzanie 15 milionów pingów GPS dziennie: architektura ETL dla analityki transportowej

System przetwarza 15 milionów współrzędnych GPS z 1800 autobusów na 170 trasach Taszkentu. Pingi napływają co 10 sekund przez API 3TM. Kluczowym wyzwaniem jest przekształcenie izolowanych współrzędnych w ustrukturyzowane dane do analizy: identyfikacja przystanków, korków, kursów i odchyleń od tras.

Ładowarka oparta na asyncio + aiohttp odpytywuje API za pomocą timerów systemd. Dane zapisywane są w PostgreSQL z PostGIS. Orchestracja ETL przez Dagster zapewnia sekwencję: trasy → autobusy → przystanki → aktualizacje GPS.

Wybór stosu technologicznego i rezygnacja z nadmiarowych komponentów

Początkowo testowano Kafkę i ClickHouse, ale nie spełniły one oczekiwań:

Google AdInline article slot
  • Kafka nie nadaje się do modelu pull przy odpytywaniu API — dodaje narzut bez korzyści.
  • ClickHouse jest przedwczesny przy obecnych wolumenach zapytań.

Ostateczny stos:

  • Ingestion: asynchroniczna ładowarka w Pythonie, ~360 wstawień/sek na 2 vCPU / 4 GB RAM.
  • Storage: PostgreSQL + PostGIS dla tras, przystanków, szeregów czasowych GPS.
  • Orchestration: Dagster dla zależności i możliwości śledzenia.
  • Spatial Analytics: PySpark dla zadań wymagających dużych mocy — przyciąganie GPS do tras, obliczanie obciążenia.

Warstwa Staging przechowuje surowy JSON przez 1 dzień, następnie ODS strukturyzuje dane w pamięci bez ponownego odczytu z bazy danych.

Wielowarstwowy model danych

Dane organizowane są w trzy warstwy dla skalowalności i audytu:

Google AdInline article slot
  • ODS: dane operacyjne — trasy, przystanki, bieżące pozycje autobusów.
  • DDS (Data Vault 2.0): huby (encje), satelity (atrybuty), linki (relacje). GPS nie jest przechowywany, skupienie na trasach, autobusach, przystankach.
  • CDM: modele analityczne. Tabela fct_bus_trips — PostGIS LineString na kurs z metadanymi: znaczniki czasu, przebieg, prędkość, % dopasowania do trasy.

Data Vault pozwala dodawać atrybuty (telemetria) bez refaktoryzacji modelu.

Algorytmy segmentacji kursów

Segmentacja określa początek/koniec kursu na podstawie trzech sygnałów:

  • Prędkość: postój na przystanku początkowym/końcowym.
  • Przerwa czasowa >5 min: przerwa w strumieniu.
  • Bliskość punktu końcowego trasy.

— Editorial Team

Google AdInline article slot
Advertisement 728x90

Czytaj dalej