Goedemorgen,
Na het opmerken van RethinkDB heb ik er dit weekend wat meer tijd voor uitgetrokken om deze realtime database beter uit te testen. Ik probeer te komen tot een blog waar uit je de meeste openbaar vervoer projecten kunt starten, eventueel in een docker project. In eerste instantie ben ik begonnen met een implementatie van OVRadar, mijn versie kan ook onthouden waar de bus in het verleden heeft gereisd en daardoor ontstaat ook een mooi kaartje. Om tot deze datastromen te komen heb ik al een pull requests uit staan voor SockJS (zodat compressie voor websockets mogelijk wordt) en een feature requests (incl. implementatie) voor de Python driver van RethinkDB zodat 'batched' changefeeds mogelijk worden. Met een avondje ontwikkelen kwam ook naar boven dat informatie van bepaalde vervoerders echt he-le-maal fout is en van andere vervoerders data ontbreekt. Ik denk dat ook KV78turbo op deze manier eenvoudig toegankelijk wordt voor de meeste projectjes.
Wat levert dit nu precies op? Veel mensen weten niet goed hoe ze moeten beginnen met realtime gegevens. Of ze gaan zelf aan de slag met technologie zoals ze die zelf al kennen. Een veel voorkomende fout is een een database te gebruiken die door de enorme aantallen berichten de verwerking niet kan bijhouden, waarna alles als kaartenhuis in elkaar stort. Een alternatief is alleen de data te transformeren en te verspreiden naar afnemers, totdat een afnemer niet een minuut (KV6) (of 70 DVS) wil wachten tot alle data compleet is. Op het gebied van dienstregelingen en actuele reisinformatie hebben we een prima Extract-Transform-Load (ETL) tool beschikbaar gemaakt in de vorm van Bliksem Integration en Bliksem Integration Realtime, maar het is geen snelweg naar succes. We streven dus naar een best-practice, waarbij je de architectuur kunt inzetten voor vrijwel ieder probleem dat je wilt oplossen.
De architectuur is net als bij ieder ETL systeem een extractie laag die uit een actuele datafeed van
NDOVLoket.nl de KV6 gegevens ophaalt, deze via Python transformeert naar JSON en daarna in GeoJSON, vervolgens laadt in RethinkDB. RethinkDB wordt op dat moment gebruikt als een Hashmap waar de primary key gelijk is aan de vervoerder:voertuignummer. RethinkDB is in staat om wijzigingen door te sturen naar een ander programma, dit programma is een webserver. Deze webserver is in staat om via het SockJS protocol to communiceren met javascript in de browser. Als websockets beschikbaar zijn, wordt dat gebruikt, anders wordt er terug gevallen op andere technieken. In OpenLayers (de kaart) komt een een SockJS bericht binnen, en wordt de FeatureSet samengevoegd met de Features op de kaart.
Mocht je mee willen helpen aan de ontwikkeling dan kan dat natuurlijk :-) We publiceren wat, wanneer het David-proof is.
Stefan