4

「ジョブ リビジョン」ごとに多数の計算があるアプリケーションがあります。これには、そのリビジョンにリンクされた複数の行の合計が含まれます。

私が疑問に思っているのは、ベストプラクティスが次のとおりかどうかです。

  1. ジョブリビジョンに「合計」数値を保存して、合計せずに表示できるようにする
  2. ユーザーに表示する際の実行時の合計の計算
4

2 に答える 2

8

これは、次のようないくつかの要因に大きく依存します。

  • 精度はどれくらい重要ですか?数値は、表示された時点で正確である必要がありますか?
  • 検索速度はどれくらい重要ですか?数値が正確であることよりも、数値が迅速に表示されることが重要ですか?
  • 書く速度はどれくらい重要ですか?各「行」がすばやく書き込まれることがより重要ですか?
  • どのくらいのデータが含まれますか? 数百万行ですか、それとも数百行ですか。
  • 複数の行が同時に更新される頻度は? 「ジョブリビジョン」の多くの行が一度に更新されるのは一般的なケースですか、それとも一度に 1 つの行だけが含まれる可能性が高いですか?

これらにはそれぞれ異なるトレードオフがあり、それぞれのバランスを満たすための複数のオプションがあります。

  • 新しい行が挿入、更新、または削除されるたびに「キャッシュされた」合計を更新するトリガーを作成できます。これにより、正確さと高速な取得の両方が保証されますが、毎回「キャッシュ」テーブルの余分な更新が必要になるため、書き込みが遅くなります。これには、数値が正確であることを保証するための行レベルのロックが含まれます。ロックが他の操作をどれだけ遅くするかは、同じ「ジョブ リビジョン」に対する他の操作が同時に発生する頻度によって異なります。
  • 毎回値を計算するだけです。これにより、値が正確になり、挿入/更新が高速になりますが、値の計算は非効率的で遅くなる可能性があります。
  • キャッシュされたテーブルに値を保存できますが、定期的に更新するだけです。これにより、精度は犠牲になりますが、読み取りと書き込みの両方が高速になります。

ほんの一握りの行しか扱っていない場合、これらのいずれにも大きな違いはなく、「毎回計算するだけ」で問題ありません。物事をより速くする必要が実際にない場合は、「より通常の」として毎回計算することが推奨されます

いつものように、一般的なケースで何が良いかだけを求めないでください。独自のコードをプロファイリングし、ボトルネックがどこにあるかを確認し、「まだしないでください」というルールに従う傾向があります。

于 2012-09-22T19:28:48.490 に答える
1

場合によります。

作業を進めながら計算する便利な方法があれば、計算におそらく高価なクエリは必要ありません。ただし、事前計算の大きな問題は、合計とデータの維持に苦労する可能性がある余分なレベルの複雑さです。

これは設計上の妥協なので、どこに行き着くかについて正解はありません。私が言いたいのは、合計の事前計算を最適化として扱うべきだということだけです。したがって、まだそれを行う必要があることを知らない場合、それは時期尚早の最適化です。

物事がうまくいかないと、データを整理するためにかなりの量の作業が必要になる可能性があります。修正されていないバグやプラグが抜かれたギャップによって、彼らが脱線している場合、それはかなりの量の継続的な作業です。

あなたがする必要がある、または実際に急がなければならないものではありません。

于 2012-09-22T19:31:21.890 に答える