Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment faire en sorte qu'une requête mysql se rafraîchisse constamment en PHP ?

Vous êtes coincé avec le sondage avec votre pile technologique actuelle. MySQL n'a aucun moyen efficace de vous envoyer une notification indiquant qu'il y a quelque chose de nouveau à voir.

(Vous pourriez envisager d'ajouter un sous-système de file d'attente de messages, comme RabbitMQ par exemple, mais cela nécessiterait un grand changement dans la structure de votre application).

Quelques lignes directrices pour gérer les sondages au moindre coût possible.

  1. Définissez les attentes des utilisateurs sur une latence de quelques secondes sur les messages plutôt que sur des millisecondes.

  2. Interrogez aussi souvent que nécessaire pour répondre aux attentes en matière de latence.

  3. Évitez d'interroger beaucoup de données à chaque requête. Comment pouvez-vous faire cela ?

    un. Enregistrez l'horodatage le plus récent chaque fois que vous exécutez une requête

    b. Ne pas utiliser SELECT * . Donnez plutôt les noms des colonnes dont vous avez réellement besoin. Cela permet à l'optimiseur de MySQL de réduire le coût de vos requêtes.

    c. Faites en sorte que vos requêtes fassent SELECT whatever WHERE timestamp > saved_timestamp ORDER BY timestamp vous n'obtenez donc que les nouveaux éléments de votre table, dans l'ordre. Si votre système n'est pas très occupé, ces SELECT ne renverront souvent aucune ligne. C'est bien.

    ré. Assurez-vous d'avoir un index multicolonne sur l'horodatage et les autres colonnes dans votre instruction SELECT. C'est ce qu'on appelle un index de couverture .

    e. Juste après avoir ouvert votre connexion à MySQL, émettez cette instruction SQL. Il permet à MySQL de récupérer vos données avec moins de conflits avec d'autres clients MySQL insérant des lignes dans la table.

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

Si vous faites cela avec AJAX à partir des navigateurs de vos utilisateurs, vous souhaitez inclure le dernier horodatage dans les requêtes AJAX afin de pouvoir fournir les nouveaux éléments nécessaires au navigateur de chaque utilisateur.