Quoi de mieux pour le site e-commerce quand il s'agit d'afficher un produit spécifique?

Pour interroger chaque fois sur la database et utiliser l'opérateur 'WHERE'?

SELECT * FROM tblProduct WHERE productID = @productID 

OU

Pour filterr la list de produits qui sont mis en cache?

 DataTable dtProducts = new DataTable(); dtProducts = HttpContext.Current.Cache["CachedProductList"] as DataTable; DataView dvProduct = new DataView(); dvProduct = dtProducts.DefaultView; dvProduct.RowFilter = Ssortingng.Format("[productID] = {0}", iProductID); 

S'il vous plaît partagez votre opinion. Merci d'avance.

La performance est très subjective à vos données et comment vous l'utilisez. La méthode pour savoir ce qui fonctionne à coup sûr est de comparer.

Décidez de ne mettre en cache que lorsque vos performances db ne correspondent pas aux performances requirejses.

Lorsque vous mettez en cache des données, vous ajoutez beaucoup de frais généraux pour vous assurer qu'ils sont à jour.

Le server SQL ne lit pas à partir du disque chaque fois que vous lancez une requête, il met en cache les résultats des requêtes fréquentes. Avant de décider de mettre en cache, connaissez les mécanismes de caching utilisés par votre database. L'utilisation d'une procédure stockée vous permet également de mettre en cache le plan de requête .

La caching de données, en particulier via un mécanisme en memory tel que HttpContext.Current.Cache est (presque) toujours plus rapide que de revenir à la database. Aller à la database nécessite d'établir des connections réseau, puis la database doit faire des E / S, etc., alors qu'en utilisant le cache, vous utilisez simplement des objects en memory. Cela dit, il y a un certain nombre de choses à prendre en count:

  • Le cache d'exécution ASP.NET n'est pas dissortingbué. Si vous exécutez ce code sur plusieurs nœuds, vous devez décider si vous êtes d'accord avec différents nœuds ayant potentiellement une version différente des données mises en cache.
  • Il est possible de dire aux caches de conserver datatables aussi longtime que vous le voulez, aussi courtes que quelques minutes et aussi longtime que pour toujours. Vous devez prendre en considération combien de time datatables restront inchangées en décidant combien de time pour le mettre en cache. Les données du produit ne changent probablement pas plus souvent qu'une fois par jour, c'est donc un candidat très viable pour la caching.
  • Sachez cependant que les limites de time de cache que vous avez définies ne sont pas absolues; Les objects peuvent être expulsés du cache en raison des limites de memory ou du recyclage d'un pool de process / app.
  • Comme indiqué ci-dessus, DataTable n'est pas un bon object à mettre en cache; c'est très encombrant et cher de sérialiser. Une list de classs personnalisées est un bien meilleur choix du sharepoint vue des performances.

Je dirais qu'en règle générale, si vous avez besoin d'un set de données plus fréquemment que quelques fois par heure et qu'il change less fréquemment que toutes les quelques heures, il vaudrait mieux retirer la list de la database, la mettre en cache pour un timeout raisonnable, et récupérez-le par un filter dans le code. Mais c'est une règle générale; C'est le genre de chose qui vaut la peine d'être expérimenté dans votre environnement particulier.

200 000 objects, c'est beaucoup de données à mettre dans un cache, mais c'est aussi beaucoup de travail pour la database si vous devez les récupérer fréquemment. Peut-être qu'il y a un sous-set de ce qui serait préférable de mettre en cache, et un sous-set différent, less fréquemment utilisé qui pourrait être récupéré chaque fois que cela est nécessaire. Comme je l'ai dit, expérimentez!

Je préférerais la première méthode. Avoir 20000 lignes dans le cache ne me semble pas bien.