Auteurs:
Naam | Studentnummer |
---|---|
599907 | |
Docenten
Naam | Functie |
---|---|
Skills begeleider | |
Procesbegeleider |
Klas | ITA-OOSE-A |
---|---|
Groepsnaam | Smalltalk |
Course | OOSE |
Datum |
|
Versie | 1.19 |
Inhoudsopgave
Inleiding
Het bedrijf Regterschot Racing wil een website applicatie waarop de data die de sensoren in de auto verzamelen in te kunnen zien. Regterschot Racing verwacht in ieder geval van één sensor, de GPS, twintig keer per seconde data te krijgen. Het is voor Regterschot Racing niet alleen belangrijk dat deze data goed overkomt van de auto naar de website applicatie maar ook dat deze data zo snel mogelijk, het liefst in real-time, overkomt. Het is voor ons van belang om een onderzoek uit te voeren om op deze manier te weten te komen wat een techniek is om zo goed mogelijk aan te sluiten bij de wensen van Regterschot Racing.
Hoofd- en deelvragen
Onze hoofdvraag is 'Welke technieken bestaan er om real-time data weer te geven op een website?' Om deze vraag te kunnen beantwoorden hebben we ook een aantal deelvragen opgezet. Onze eerste twee deelvragen gaan over de technieken die bekend zijn of veel gebruikt worden om de data real-time weer te geven op een website. Deze deelvraag is opgesplitst in welke technieken er zijn die gebruik maken van een MySQL database, en technieken die geen gebruik maken van deze database. Ook zal er bij de tweede deelvraag gekeken worden naar technieken die überhaupt geen gebruik maken van een database. Daarna zullen we kijken of we kunnen vinden welke technieken er wordt gebruikt in autoraces. Welke techniek wordt er bijvoorbeeld gebruikt bij F1 races om de data van de baan naar de pit te sturen? In de vierde deelvraag zullen we opgaan in op de voordelen en nadelen van de bovengenoemde technieken. In het kort hebben we de volgende deelvragen:
- Welke technieken die veel gebruikt worden of ons bekend zijn maken gebruik van een MySQL database?
- Welke technieken die veel gebruikt worden of ons bekend zijn maken geen gebruik van een database of andere database?
- Welke technieken worden bij autoraces gebruikt om de data van de auto naar een pit te krijgen?
- Wat zijn de voor- en nadelen van de verschillende technieken voor het weergeven van real-time data?
Naast het beantwoorden van deze deelvragen zullen er ook kleine prototypes worden gemaakt van de bovenstaande manieren. Dit zal ook in de praktijk ons een beter beeld geven wat mogelijke oplossing zijn om de data real-time weer te kunnen geven op een website applicatie.
Welke technieken die veel gebruikt worden of ons bekend zijn maken gebruikt van een MySQL database?
Script dat elke x seconden data ophaalt
Een van de manieren om data op te halen uit een database is door elke x seconden een request uit te laten voeren. Je kan bijvoorbeeld alle data ophalen na een bepaald tijdstip en de rest, die je in dit geval al hebt, achterwege laten. In dit geval zal je een timer of iets dergelijks moeten hebben die elk keer de data ophaalt en deze op de applicatie toont.
Herrera, gebruik van transactielogboek
In het artikel van Herrera geeft hij allereerst drie verschillende mogelijkheden weer voordat hij, in dit geval de derde, techniek kiest en deze ook uitwerkt. De drie technieken die hij benoemt zijn
- Poll the database every X seconds and determine if something has changed using a timestamp, version number or status field.
- Use database or application-level triggers to execute a piece of code when something changes.
- Use the database transaction/replication log, which records every change to the database. (Herrera, 2018)
Herrera kiest hier voor de derde optie omdat hij vindt dat deze het meest robuust is. Ook benoemd hij dat deze techniek geen middelen verspilt door bijvoorbeeld polling of het proces vertraagd door bijvoorbeeld het gebruik van triggers. Herrera geeft de volgende afbeelding met hoe het systeem uiteindelijk zal werken.
Als er een insert, update of delete op de MySQL database wordt uitgevoerd wordt dit in een binary log gezet. De Java applicatie luistert naar deze binary log met gebruik van de mysql-binlog-connector-java. Nadat de Java applicatie deze data heeft ontvangen wordt deze omgezet zodat alleen de relevante data door wordt gestuurd naar de "Pusher Channel". Vervolgens gebruikt Herrera een React app die verbonden is aan de pusher. De pusher zit als een soort API tussen de React app en de Java backend.
Welke technieken die veel gebruikt worden of ons bekend zijn maken geen gebruik van een database of andere database
Pull API
Regterschot Racing gebruikt een API om de data van de Raspberry Pi in de database te zetten. De client, in dit geval onze Java web applicatie, kan een request sturen naar deze API. Als de API nieuwe data heeft zal hij deze teruggeven aan de applicatie. Als deze geen nieuwe data heeft krijgt de applicatie een bericht terug dat er geen nieuwe data is. Dit proces is ook wel bekend als polling. Het is vergelijkbaar met het verversen van een webpagina of je email om te kijken of er al iets is aangepast/of er nieuwe email is.
Push API
Een push API lijkt op een Pull API. Ook dit keer stuurt de Java web applicatie een request naar de API. Dit keer geeft de API echter geen directe reactie. Met long polling wacht de API tot hij nieuwe data heeft. Op het moment dat de API nieuwe data heeft die de web applicatie wil hebben zal deze de data naar de applicatie sturen. Hierna kan de applicatie weer een nieuwe request sturen. Dit process staat ook wel bekend als long polling.
Websocket
Een andere optie die lijkt op een Push API is het gebruik van een websocket. Bij een websocket wordt er een connectie gemaakt tussen bijvoorbeeld de web Applicatie en API. Op het moment dat de API nieuwe data heeft wordt ook deze weer naar de web applicatie gestuurd. Het verschil met een Push API is dat er in dit geval geen nieuwe request hoeft te worden gemaakt. De websocket verbinding blijft bestaan en de API kan dus gelijk weer nieuwe data sturen als deze dat heeft.
Conclusie
Bronnenlijst
Amm, H. (z.d.). Easily explained: Differences between Push and Pull APIs. adenin. Geraadpleegd op 9 november 2022, van https://www.adenin.com/blog/push-vs-pull-api/
Herrera, E. (2018, 4 mei). Getting data in realtime from MySQL with Java. Pusher. https://pusher.com/tutorials/realtime-mysql-java/