Cache des requêtes

Requête de mise en cache des endroits les résultats d'une requête de base de données dans la mémoire du serveur ColdFusion où il peut être immédiatement récupérés sans l'interrogation de la base de données. Requête de mise en cache est l'un des outils les plus utiles pour améliorer la performance de vos applications ColdFusion, malheureusement, il est également l'un des moins utilisés. Quelques mises en garde sont impliqués dans la mise en cache des requêtes, mais dans l'ensemble, c'est une technique très simple à employer. Vous devriez envisager la mise en cache des requêtes seulement qui correspondent aux critères suivants:

  

La requête a une latence permise significative. En d'autres termes, les données dans le jeu de résultats ne changent pas souvent et est donc stable sur une période de temps significative.

La requête est universel dans sa portée, tels que tous les utilisateurs de votre application peut utiliser exactement le même résultat de la requête.

La requête nécessite des ressources importantes à traiter. Une autre façon de voir les choses est la suivante:

Le temps de latence vous donne l'autorisation d'utiliser le cache.

L'universalité du champ d'application rend possible la mise en cache.

Les exigences de traitement de faire la mise en cache nécessaire. Chaque fois que vous cache une requête, vous placez une copie dans la mémoire et de charger ColdFusion MX pour récupérer la version basée sur la mémoire de cette requête pour une durée de temps déterminée. Par exemple, le code hows une CFQUERY qui met en cache son jeu de résultats pour 12 heures, après quoi un autre appel à CFQUERY récupère les données directement à partir de la base de données et des caches qui résultent neuf situé dans la mémoire.

 SELECT LastName + ',' + FirstName AS nom d'utilisateur AppUser ORDER BY Nom d'utilisateur ASC  # # Nom d'utilisateur 

Le code montre une CFQUERY qui met en cache son jeu de résultats après 1 heures, le 4 Juillet, 2002; avant cette date, un appel à CFQUERY récupère ses données directement à partir de la base de données.

 SELECT LastName + ',' + FirstName AS nom d'utilisateur AppUser ORDER BY Nom d'utilisateur ASC  # # Nom d'utilisateur 

CachedWithin est le plus communément utilisé pour les deux attributs disponibles sur le cache. CachedAfter a très peu d'applications pratiques, il est principalement utilisé pour attendre une heure spécifiée lorsque de nouvelles données deviennent disponibles pour votre base de données de certains processus de l'extérieur, puis de mettre en cache les nouvelles données. Bons candidats pour la mise en cache des requêtes sont les suivantes:

Le catalogue en ligne des pages à afficher en magasin les vignettes et descriptions des catégories d'articles vendus.

Le catalogue en ligne des pages à afficher en magasin des articles de chaque catégorie spécifique.

La liste des éléments disponibles à la vente dans un magasin en ligne.

Sélectionner des menus qui sont dynamiquement remplis avec des données rarement modifiés, tels que les noms des chefs de rayon.

 (CALL sp_GetCompanies ( «GA»))  CompanyName # #, # # CP 

 INSERT INTO OrderItem (SalesOrderID, ItemNumber, Description, Prix unitaire, Quantité) VALUES (1, 'CAS30-BLK', '30-Minute Cassette, Black Case ', 1,05, 10)  UPDATE InventoryItem SET AvailableToSell = AvailableToSell - 10 WHERE ItemNumber = 'CAS30-BLK' 

Tout mettre entre les balises d'ouverture et de clôture CFTRANSACTION est considéré comme une seule transaction. Pour cette opération à réussir, pour l'insert dans la table OrderItem et la mise à jour de la table InventoryItem doit réussir. C'est l'idée même d'une transaction: tout ou rien. Si deux requêtes ont du succès, la transaction est validée, et les effets des deux requêtes sont écrites à la base de données. Si l'une requête échoue, toute la transaction est annulée, comme si rien ne s'était passé. Dans l'exemple dans la partie précédente, ColdFusion fournit les commandes pour contrôler le début et la fin de la transaction, mais dans de nombreux cas, un tel contrôle est gérée au niveau du serveur de base de données elle-même en utilisant des commandes de base de données natif. Alors, où faut-il contrôler une transaction? La réponse simple à cette question est toujours "Sur le serveur de base de données, si vous le pouvez." La raison de cette réponse est la capacité de la base de données de contrôler ses opérations en utilisant des commandes natives et des capacités au lieu de compter sur la capacité du pilote de base de communiquer contrôle transactionnel à la base de données. Certains pilotes de base de données n'ont pas la capacité de passer des commandes de contrôle transactionnel à votre base de données, donc dans ces cas, vous avez besoin d'encapsuler tous les contrôles des transactions dans une procédure stockée sur la base de données et simplement l'appeler depuis ColdFusion. Quelques autres pilotes peuvent communiquer uniquement d'une partie de la base de commandes de contrôle disponibles transactionnel et ne sont donc pas aussi capables d'une solution. Rechercher maintenant à une transaction qui est contrôlée dans la procédure stockée elle-même. Ce code est l'équivalent de l'autre, sauf que l'opération est contrôlée dans la procédure stockée plutôt que dans ColdFusion.

BEGIN TRANSACTION INSERT INTO OrderItem (SalesOrderID, ItemNumber, Description, Prix unitaire, Quantité) VALUES (1, 'CAS30-BLK', '30-Minute Cassette, Black Case ', 1,05, 10) IF @ @ ERROR! = 0 BEGIN
RAISERROR 50001 «Le OrderItem ne pouvait pas être inséré." ROLLBACK TRANSACTION RETURN END UPDATE InventoryItem SET AvailableToSell = AvailableToSell - 10 WHERE ItemNumber = 'CAS30-BLK' IF @ @ ERROR! = 0 BEGIN RAISERROR 50002 «Le InventoryItem n'a pas pu être mis à jour." ROLLBACK TRANSACTION RETURN END COMMIT TRANSACTION

La syntaxe est un peu différent, mais les principes sont très similaires, ne sont-ils? C'est vraiment juste une question de l'apprentissage des deux méthodes d'application des transactions et donc les contrôler plus près du serveur de base de données que votre application vous permet de le faire.

un article présenté par Richard Brighton


Disclaimer:Notre site n'est pas responsable du contenu de cet article. Webarticles est une ressource d'information gratuite.
Important: Cet article "Query Caching» a été traduit par un logiciel automatique. Nous nous sentons désolés pour les fautes d'orthographe que mai ont eu lieu. Nous vous remercions de votre compréhension.


Online: 460 users browsing the articles directory