Du har fastnat med polling med din nuvarande teknikstack. MySQL har inget bra sätt att skicka ett meddelande till dig om att det finns något nytt att se.
(Du kan överväga att lägga till ett undersystem för meddelandekö, som till exempel RabbitMQ, men det skulle kräva en stor förändring av din applikations struktur).
Några riktlinjer för att hantera omröstning till minsta möjliga kostnad.
-
Ställ in användarnas förväntningar på några sekunders latens på meddelandena snarare än millisekunder.
-
Fråga så ofta som behövs för att uppfylla förväntningarna på latens.
-
Undvik att fråga massor av data med varje fråga. Hur kan du göra det?
a. Spara den senaste tidsstämpeln när du kör en fråga
b. Använd inte
SELECT *
. Ge istället namnen på de kolumner du faktiskt behöver. Detta låter MySQL:s optimerare hjälpa till att minska kostnaderna för dina frågor.c. Få dina frågor att göra
SELECT whatever WHERE timestamp > saved_timestamp ORDER BY timestamp
så du får bara nya föremål från ditt bord, i ordning. Om ditt system inte är särskilt upptaget, returnerar dessa SELECT ofta inga rader. Det är bra.d. Se till att du har ett flerkolumnindex på tidsstämpel och de andra kolumnerna i din SELECT-sats. Detta kallas ett täckande index .
e. Direkt efter att du har öppnat din anslutning till MySQL, utfärda denna SQL-sats. Det låter MySQL hämta dina data med mindre konflikter med andra MySQL-klienter som infogar rader i tabellen.
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
Om du gör detta med AJAX från dina användares webbläsare, vill du inkludera den senaste tidsstämpeln i AJAX-förfrågningarna så att du kan leverera nya nödvändiga nya objekt till varje användares webbläsare.