Je zit vast met pollen met je huidige tech-stack. MySQL heeft geen goede manier om u een melding te sturen dat er iets nieuws te zien is.
(Je zou kunnen overwegen om een subsysteem voor berichtenwachtrij toe te voegen, zoals RabbitMQ bijvoorbeeld, maar dat zou een grote verandering in de structuur van je applicatie vergen).
Enkele richtlijnen voor het afhandelen van polling tegen de laagst mogelijke kosten.
-
Stel gebruikersverwachtingen in op een latentie van enkele seconden voor de berichten in plaats van milliseconden.
-
Query zo vaak als nodig is om aan de verwachtingen voor latentie te voldoen.
-
Vermijd het opvragen van veel gegevens bij elke zoekopdracht. Hoe kun je dat doen?
a. Sla de meest recente tijdstempel op wanneer u een zoekopdracht uitvoert
b. Gebruik
SELECT *
niet . Geef in plaats daarvan de namen van de kolommen die u echt nodig hebt. Hierdoor kan MySQL's optimizer helpen om de kosten van uw zoekopdrachten te verlagen.c. Laat uw zoekopdrachten
SELECT whatever WHERE timestamp > saved_timestamp ORDER BY timestamp
dus je krijgt alleen nieuwe items van je tafel, in volgorde. Als uw systeem niet erg druk is, zullen deze SELECT's vaak geen rijen opleveren. Dat is goed.d. Zorg ervoor dat je een index met meerdere kolommen hebt op tijdstempel en de andere kolommen in je SELECT-instructie. Dit wordt een dekkende index genoemd .
e. Geef deze SQL-instructie direct nadat u uw verbinding met MySQL hebt geopend. Hiermee kan MySQL uw gegevens ophalen met minder strijd met andere MySQL-clients die rijen invoegen in de tabel.
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
Als u dit doet met AJAX vanuit de browsers van uw gebruikers, wilt u de laatste tijdstempel in de AJAX-verzoeken opnemen, zodat u de benodigde nieuwe items kunt leveren aan de browser van elke gebruiker.