Du sidder fast med polling med din nuværende teknologistack. MySQL har ikke nogen god måde at sende en notifikation til dig om, at der er noget nyt at se.
(Du kunne overveje at tilføje et meddelelseskø-undersystem, som f.eks. RabbitMQ, men det ville kræve en stor ændring af din applikations struktur).
Nogle retningslinjer for håndtering af afstemninger til mindst mulige omkostninger.
-
Indstil brugernes forventninger til et par sekunders forsinkelse på meddelelserne i stedet for millisekunder.
-
Forespørg så ofte som nødvendigt for at opfylde forventningerne til latenstid.
-
Undgå at forespørge på masser af data med hver forespørgsel. Hvordan kan du gøre det?
en. Gem det seneste tidsstempel, hver gang du kører en forespørgsel
b. Brug ikke
SELECT *
. Angiv i stedet navnene på de kolonner, du faktisk har brug for. Dette lader MySQL's optimizer hjælpe med at reducere omkostningerne ved dine forespørgsler.c. Få dine forespørgsler til at
SELECT whatever WHERE timestamp > saved_timestamp ORDER BY timestamp
så du kun får nye varer fra dit bord, i rækkefølge. Hvis dit system ikke er meget optaget, returnerer disse SELECT'er ofte ingen rækker. Det er godt.d. Sørg for, at du har et multikolonneindeks på tidsstempel og de andre kolonner i din SELECT-sætning. Dette kaldes et dækkende indeks .
e. Lige efter du har åbnet din forbindelse til MySQL, skal du udstede denne SQL-sætning. Det lader MySQL hente dine data med mindre strid med andre MySQL-klienter, der indsætter rækker til tabellen.
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
Hvis du gør dette med AJAX fra dine brugeres browsere, vil du medtage det seneste tidsstempel i AJAX-anmodningerne, så du kan levere nye, nødvendige nye elementer til hver brugers browser.