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

Hvordan får man en mysql-forespørgsel til konstant at opdatere i PHP?

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.

  1. Indstil brugernes forventninger til et par sekunders forsinkelse på meddelelserne i stedet for millisekunder.

  2. Forespørg så ofte som nødvendigt for at opfylde forventningerne til latenstid.

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




  1. Hvordan kompilerer man alle ugyldige pakker i skema?

  2. Hvordan gemmer man brugers tidszone i mysql?

  3. ADODFCMP Utility

  4. PHP afkrydsningsfelt indstillet til at kontrollere baseret på databaseværdi