Note: Version requise
Cette fonctionnalité requière l'utilisation de PECL/mysqlnd_ms 1.3.0-beta ou supérieure et de PECL/mysqlnd_qc 1.1.0-alpha ou supérieure. PECL/mysqlnd_ms doit être compilé pour supporter cette fonctionnalité. PHP 5.4.0 ou supérieure est requise.
Note: Clusters MySQL appropriés
Cette fonctionnalité est prévue pour une utilisation avec un serveur de réplication MySQL (copie primaire). Actuellement, aucun autre type de cluster MySQL n'est supporté. Les utilisateurs d'un tel cluster doivent contrôler PECL/mysqlnd_qc manuellement s'ils sont intéressés dans la mise en cache de requête côté client.
Le support des clusters de réplication MySQL (copie primaire asynchrone) est le principal but de PECL/mysqlnd_ms. Les esclaves d'un cluster de réplication MySQL peuvent ou non refléter les dernières mises à jour depuis le maître. Les esclaves sont asynchrones, et peuvent lagger derrière le maître. Une lecture depuis un esclave a une consistence éventuelle depuis une perspective cluster.
Le même niveau de consistence est offert par un cache local en utilisant une stratégie d'invalidation time-to-live (TTL). Des données courantes ou des données non mises à jour peuvent être servies. Eventuellement, les données recherchées depuis le cache peuvent ne pas être disponibles et la source du cache peut devoir être accédé.
En fournissant à la fois un esclage de réplication MySQL (secondaire asynchrone) et un cache local TTL, un niveau de service identique est fourni, et il est possible de remplacer de façon transparente un accès à une base de données distante par un accès au cache local afin d'améliorer les possibilités.
Depuis PECL/mysqlnd_ms 1.3.0-beta, le plugin est capable de contrôler de façon transparente PECL/mysqlnd_ms 1.1.0-alpha ou supérieure pour mettre en cache une requête en lecture seule si c'est explicitement autorisé via la configuration d'une qualité de service appropriée en utilisant la fonction mysqlnd_ms_set_qos(). Reportez-vous à la section Démarrage rapide pour un exemple de code. Les deux plugins doivent être installés, et PECL/mysqlnd_ms doit avoir été compilé pour supporter la fonctionnalité de cache, et enfin, PHP 5.4.0 ou supérieure doit être utilisé.
Les applications ont un contrôle total de l'utilisation du cache et peuvent demander la mise à jour des données à n'importe quel moment, si besoin. L'utilisation du cache peut être activée et désactivé lors de l'exécution du script. Le cache sera utilisé si la fonction mysqlnd_ms_set_qos() définit la qualité de service à une consistence éventuelle, et active l'utilisation du cache. L'utilisation du cache est désactivé en demandant un niveau de consistence supérieur, par exemple, une consistence de session (lecture de vos écritures). Une fois que la qualité de service revient à une consistence éventuelle, le cache peut de nouveau être activé.
Si la mise en cache est active pour une requête en lecture seule, PECL/mysqlnd_ms peut injecter une astuce SQL pour contrôler la mise en cache via PECL/mysqlnd_qc. Cela va modifier la requête SQL récupérée depuis l'application. Les processeurs SQL suivants sont supposés ignorer les astuces SQL. Une astuce SQL est un commentaire SQL. Les commentaires ne doivent pas être ignorés, par exemple, par le serveur de base de données.
Le TTL d'une entrée du cache est calculé pour chaque requête. Les applications définissent l'âge maximal des données qu'elles souhaitent récupérer en utilisant la fonction mysqlnd_ms_set_qos(). L'âge définit une limite supérieure approximative en secondes des données pouvant être retournées depuis le maître en tenant compte du lag.
La logique suivante est utilisée pour calculer le TTL courant si le cache est actif. La logique prend en compte le lag estimé de l'esclave pour choisir un TTL. Si, par exemple, il y a deux esclaves qui laguent de 5 et 10 secondes et que l'âge maximal autorisé est de 60 secondes, le TTL sera défini à 50 secondes. Notez également que la définission de l'âge ne dépassera pas le calcul estimé.
L'algorithme peut paraître impressionnant. SHOW SLAVE STATUS est une opération très rapide.En considérant un nombre de requêtes suffisants et les accès au cache par seconde, le coût de la vérification du lag des esclaves est largement inférieur au coût d'une décision du cache.
Les suggestions sur un meilleur algorithme sont bien entendues les bienvenues.