sql >> Databasteknik >  >> RDS >> Mysql

Hur får man en mysql-fråga att ständigt uppdatera i PHP?

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.

  1. Ställ in användarnas förväntningar på några sekunders latens på meddelandena snarare än millisekunder.

  2. Fråga så ofta som behövs för att uppfylla förväntningarna på latens.

  3. 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.




  1. Korrekt sätt att rensa indata i MySQL med PDO

  2. MySQL beräkna glidande medelvärde av N rader

  3. PHP MYSQL hämtar en TEXT med nya rader

  4. Oracle DBA realtidsfrågor