it-swarm-fr.com

Est-il préférable de stocker des valeurs calculées ou de les recalculer sur demande?

Dupliquer possible:
[.____] Stockage VS Calcul des valeurs d'agrégat

Lors d'un ancien emploi, nous avons eu cette base de données, ce n'était pas une rigueur normalisée, certaines tables ne sont plus utilisées, c'était un patch après le patch. En conclusion, c'était un gâchis.

Une fois, alors que j'essayais de le réparer, j'ai vu que certains champs sont calculés à la volée et que cela a rendu la DB très lente effectuant des requêtes simples simples. Depuis lors, je ne calculez plus aucun champ, je stocke simplement les données comme cela.

Est-ce que ce recommendendend? Quand vaut mieux stocker des données que de calculer?

Merci les gars.

9
eiefai

Ça dépend.

Stocker les valeurs dérivées peut accélérer le traitement des demandes de lecture ultérieures lorsque les valeurs n'ont pas besoin d'être calculées à nouveau.

Il y a un problème clé avec dénormaliser vos données de cette manière cependant: vous devez vous assurer qu'il n'est pas possible que la valeur dérivée devienne hors de jour non détectée. Si vos données ne sont pas dans une forme suffisamment normale, des incohérences peuvent se glisser et causer des problèmes. Cela signifie que partout qui met à jour les données, la valeur est dérivée de doit également actualiser la valeur dérivée ou la marque de la marque comme étant mise à jour avant d'être invoquée. La mise à jour des valeurs dérivées via des déclencheurs peut atténuer de devoir ajouter cette logique à de nombreux endroits de votre code, mais sachez que des déclencheurs ont leur propre ensemble de potentiels GOTCHAS (problèmes de verrouillage inattendu, code dans la couche logique des entreprises ne prévoyant pas de valeurs qu'il ne prévoit pas de valeurs. t explicitement référence à la mise à jour, les déclencheurs peuvent être désactivés, etc.). Une autre solution consiste à décourager un accès direct aux tables et que toutes les mises à jour via une API basée sur des procédures stockées - ces procédures peuvent savoir pour recomputer les valeurs calculées au besoin et ne peuvent évidemment pas être désactivées.

10
David Spillett

Généralement, il est plus rapide de stocker les données plutôt que de calculer à la volée. Si vous stockez des dizaines de milliers de variables, cependant, cela peut ne pas être vrai.

0
divided