reap_async_query
Introduction
MySQLi est une extension PHP populaire qui permet aux développeurs de se connecter à des bases de données MySQL et d’effectuer diverses opérations. MySQLi prend en charge le lancement de requêtes non bloquantes, ce qui permet aux développeurs d’envoyer une requête et de continuer à exécuter d’autres code sans attendre le résultat. Les résultats sont stockés dans un tampon et peuvent être récupérés plus tard à l’aide de mysqli_reap_async_query().
Dans ce guide complet, nous expliquerons comment fonctionnent les requêtes non bloquantes MySQLi, comment elles sont implémentées, et nous fournirons des exemples ainsi que des cas d’utilisation.
Qu’est-ce que l’exécution de requêtes non bloquantes MySQLi ?
mysqli_reap_async_query() est une fonction PHP qui récupère l’ensemble de résultats d’une requête lancée à l’aide de mysqli_send_query(). Elle n’exécute pas la requête elle-même ; au lieu de cela, elle récupère le résultat après l’envoi de la requête. Cette fonction est essentielle pour les opérations de base de données non bloquantes en PHP. Notez que mysqli_store_result() bloque jusqu’à ce que tous les résultats soient disponibles et ne doit pas être utilisée dans des flux de travail asynchrones.
Comment fonctionnent les requêtes non bloquantes MySQLi
Les requêtes non bloquantes MySQLi fonctionnent en séparant le lancement de la requête de la récupération du résultat. D’abord, mysqli_send_query() envoie la requête au serveur MySQL et revient immédiatement. Le serveur traite la requête en arrière-plan. Une fois prêt, mysqli_reap_async_query() récupère l’ensemble de résultats depuis le tampon de connexion.
Remarque : bien que mysqli_send_query() soit non bloquant, la récupération des résultats avec mysqli_reap_async_query() bloquera si les résultats ne sont pas encore disponibles. Une véritable exécution asynchrone en PHP nécessite généralement des bibliothèques externes ou des boucles d’événements.
Voici un exemple d’utilisation des requêtes non bloquantes MySQLi :
<?php
// Create a connection to the MySQL server
$conn = mysqli_connect("localhost", "username", "password", "database");
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
// Create a query
$query = "SELECT * FROM table";
// Initiate the query asynchronously
if (!mysqli_send_query($conn, $query)) {
die("Query failed: " . mysqli_error($conn));
}
// Execute other code here without blocking
// Fetch the result when ready
$result = mysqli_reap_async_query($conn);
if ($result) {
// Process $result
} else {
// Results not ready yet or an error occurred
echo "Result not ready: " . mysqli_error($conn);
}
?>Dans cet exemple, la requête est lancée de manière asynchrone à l’aide de mysqli_send_query(). Le script poursuit son exécution, puis mysqli_reap_async_query() est appelé plus tard pour récupérer les résultats stockés.
Comment utiliser les requêtes non bloquantes MySQLi
Pour utiliser les requêtes non bloquantes MySQLi, suivez ces étapes :
- Établissez une connexion au serveur MySQL à l’aide de
mysqli_connect(). - Lancez la requête de manière asynchrone à l’aide de
mysqli_send_query(). - Effectuez d’autres tâches pendant que la requête s’exécute en arrière-plan.
- Récupérez l’ensemble de résultats à l’aide de
mysqli_reap_async_query(). - Traitez l’objet
mysqli_resultrenvoyé.
Remarque : mysqli_poll() est une fonction distincte utilisée pour vérifier l’état de plusieurs connexions. Elle attend un tableau de connexions et renvoie le nombre de connexions prêtes, et non les résultats de la requête eux-mêmes.
Cas d’utilisation des requêtes non bloquantes MySQLi
Les requêtes non bloquantes MySQLi sont utiles pour les développeurs PHP qui doivent exécuter plusieurs requêtes en parallèle ou lancer des requêtes longues sans bloquer l’exécution d’autre code. Voici quelques cas d’utilisation pratiques de cette approche :
1. Exécution parallèle de requêtes
Les développeurs peuvent utiliser les requêtes non bloquantes MySQLi pour exécuter plusieurs requêtes indépendantes en parallèle. En envoyant chaque requête avec mysqli_send_query() et en entrelaçant d’autres logiques, les applications peuvent réduire les temps d’attente globaux lors de la récupération de données provenant de plusieurs tables ou services.
2. Requêtes de longue durée
Les requêtes de longue durée peuvent être lancées de manière asynchrone afin que le script PHP puisse gérer d’autres tâches, comme la journalisation, les mises à jour de l’interface utilisateur ou le traitement des entrées utilisateur, pendant que la base de données termine l’opération.
3. Applications en temps réel
Les applications nécessitant des interrogations fréquentes des données ou des mises à jour en temps réel peuvent lancer des requêtes sans bloquer le thread d’exécution principal. Cela est particulièrement utile pour les outils de surveillance en ligne de commande ou les points de terminaison web légers qui doivent répondre rapidement.
4. Traitement asynchrone des données
Les développeurs peuvent déléguer les tâches lourdes de récupération de données pour qu’elles s’exécutent en arrière-plan pendant que le script principal traite d’autres flux de données, améliorant ainsi le débit global dans les traitements par lots ou les flux de travail ETL.
Avantages des requêtes non bloquantes MySQLi
Les requêtes non bloquantes MySQLi offrent plusieurs avantages aux développeurs PHP :
1. Performances améliorées
En exécutant les requêtes de manière asynchrone, l’exécution d’autre code n’est pas bloquée, ce qui améliore les performances de l’application. Cela est particulièrement bénéfique pour les applications qui agrègent des données provenant de plusieurs sources ou gèrent des requêtes à forte concurrence.
2. Meilleure utilisation des ressources
L’exécution non bloquante permet au processus PHP de rester réactif pendant l’attente des opérations de base de données, réduisant ainsi le temps d’inactivité et améliorant l’utilisation des ressources du serveur.
3. Gestion simplifiée des tâches en arrière-plan
Les développeurs peuvent enchaîner plusieurs opérations de base de données sans imbriquer de callbacks ni de machines à états complexes, ce qui rend le code plus facile à lire et à maintenir pour les scripts PHP procéduraux standard.
Conclusion
Les requêtes non bloquantes MySQLi constituent une approche puissante pour les développeurs PHP qui doivent lancer des requêtes avec MySQLi sans attendre de résultats immédiats. Elles permettent aux développeurs d’envoyer des requêtes en arrière-plan et de continuer à exécuter d’autres code. Les résultats de la requête sont stockés dans un tampon, qui peut être récupéré plus tard à l’aide de mysqli_reap_async_query() lorsque le développeur est prêt à les traiter. Cette approche peut améliorer considérablement les performances des applications PHP qui doivent exécuter plusieurs requêtes simultanément ou lancer des requêtes de longue durée. Les développeurs peuvent également utiliser cette approche pour créer des applications PHP en temps réel ou pour des tâches de traitement asynchrone des données. Avec ses nombreux avantages, l’exécution de requêtes non bloquantes MySQLi est un outil précieux pour les développeurs PHP.
Practice
Quelle affirmation est correcte concernant l’exécution d’une requête MySQL en PHP à l’aide de la méthode reap async query ?