2009-02-25 5 views
1

J'utilise les colonnes suivantes stockées dans une table SQL appelée tb_player:Quelle est la meilleure approche pour calculer une formule qui change de valeur chaque jour?

Date de naissance (date), jouees (entier), Versions (entier)

pour calculer un "playvalue" (entier) dans la formule suivante:

playvalue = (Aujourd'hui - date de naissance) * jouees * versions

I afficher jusqu'à 100 de ces dossiers avec le playvalue associataed sur une page Web à tout moment. Ma question est, quelle est la façon la plus efficace de calculer cette valeur de jeu étant donné qu'elle ne changera qu'une fois par jour, en raison de la (date de naissance aujourd'hui) changeante? Les autres valeurs (fois jouées & versions) restent les mêmes.

Existe-t-il un meilleur moyen que de calculer ceci à la volée à chaque fois pour les 100 enregistrements? Si oui, est-il plus efficace de faire le calcul dans un proc stocké ou dans VB.NET/C#?

+0

Est-ce que vous "ORDER BY" cette formule en SQL? – Constantin

Répondre

8

Dans une propriété/méthode sur l'objet, dans C#/VB.NET (votre code .NET).

Le temps d'exécution d'une propriété simple de ce type est rien de par rapport à l'heure d'appeler hors processus vers une base de données (pour extraire les lignes en premier lieu) ou le temps de transport d'un site Web. page; vous jamais remarquez si juste l'utiliser pour l'affichage de l'interface utilisateur. De plus, il se trouve sur votre matériel facilement extensible (le serveur d'applications), et n'implique pas une énorme mise à jour quotidienne, et n'est exécuté que pour les lignes réellement affichées, et seulement si vous interrogez réellement cette propriété/méthode. Est-ce que vous trouvez que cela cause réellement un problème de performance?

0

Je ne pense pas que ce serait très mauvais, puisque le calcul est assez simple.

Cependant, si cela vous inquiète, mon approche consisterait à configurer une colonne "playvalue cache" dans la table tb_player. Cette colonne va stocker la "valeur de jeu" calculée pour chaque joueur pour le jour en cours. Mettre en place un cronjob ou une tâche planifiée à exécuter à minuit tous les jours et mettre à jour cette colonne avec la valeur du nouveau jour.

Ensuite, tout le reste peut simplement sélectionner cette colonne au lieu de faire le calcul, et il vous suffit de faire le calcul une fois par jour.

Questions connexes