Mysql
 sql >> Database >  >> RDS >> Mysql

Come aggiornare costantemente una query MySQL in PHP?

Sei bloccato con il polling con il tuo attuale stack tecnologico. MySQL non ha un buon modo per inviarti una notifica che c'è qualcosa di nuovo da vedere.

(Potresti considerare di aggiungere un sottosistema di accodamento messaggi, come RabbitMQ per esempio, ma ciò richiederebbe una grande modifica alla struttura della tua applicazione).

Alcune linee guida per gestire il polling al minor costo possibile.

  1. Imposta le aspettative degli utenti su una latenza di pochi secondi sui messaggi anziché su millisecondi.

  2. Interroga tutte le volte che è necessario per soddisfare le aspettative di latenza.

  3. Evita di eseguire query su molti dati con ogni query. Come puoi farlo?

    un. Salva il timestamp più recente ogni volta che esegui una query

    b. Non utilizzare SELECT * . Fornisci invece i nomi delle colonne di cui hai effettivamente bisogno. Ciò consente all'ottimizzatore di MySQL di ridurre il costo delle tue query.

    c. Fai in modo che le tue query eseguano SELECT whatever WHERE timestamp > saved_timestamp ORDER BY timestamp quindi ricevi solo nuovi articoli dalla tua tavola, in ordine. Se il tuo sistema non è molto occupato, questi SELECT spesso non restituiranno righe. Va bene.

    d. Assicurati di avere un indice multicolonna su timestamp e le altre colonne nell'istruzione SELECT. Questo è chiamato indice di copertura .

    e. Subito dopo aver aperto la connessione a MySQL, emetti questa istruzione SQL. Consente a MySQL di recuperare i tuoi dati con meno conflitti con altri client MySQL che inseriscono righe nella tabella.

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

Se lo stai facendo con AJAX dai browser dei tuoi utenti, desideri includere il timestamp più recente nelle richieste AJAX in modo da poter fornire i nuovi elementi necessari al browser di ciascun utente.