0

複数のティリオン計算を実行する必要がある MVC アプリケーションがあります。その中で、私が興味を持っているのは約 800 万件の結果だけです。全体的なスコアの高低を確認する必要があるため、この作業を行う必要があります。このデータを保存し、16 個の float からなる単一のテーブルに保存します。このテーブルには、ルックアップ用のインデックスもいくつかあります。これまでのところ、データの 5% しか処理していません。

ユーザーが私の Web サイトにデータを入力すると、そのデータに基づいて計算を行う必要があります。最良の結果と最悪の結果を決定する必要があります。これは約 400 万回の計算にすぎません。現在、私のローカル PC での計算には約 1 秒以下しかかかりません。または、保存されたデータから常に 2 つのレコードを返す単純なクエリです。ベストとワースト。現在、結果を取得するためのクエリは、結果を計算するのと同じかそれ以上の速度ですが、まだ 800 万件のレコードすべてを取得しているわけではありません。DBが遅くなるのが心配です。

データベース ルックアップを使用し、パフォーマンスが問題になる場合はランタイム計算に切り替えることを考えていました。

質問: 手間を省いて実行時間の計算を行うべきですか? どちらのオプションがよりスケーラブルかはわかりません。私は、この Web サイトに大きなユーザー ベースを期待していません。サイトはきびきびしている必要があります。

4

3 に答える 3

1

あなたの質問は明確な答えを提供するために少し曖昧ですが、私の推測では、データベースを使用して合計を計算すると、Web サイトでコードを書くよりもはるかに効率的になります。Sql Server はクエリを最適化して、できるだけ多くのサーバー リソースを使用して効率を高めようとします。そのように具体的に記述しない限り、コードはそれを行いません。

最適化戦略を立てる前に、データをロードしてテストを行うことから始めます。対処しなければならないものに非常に近いデータをロードする前に、システムの実際のボトルネックがどこにあるのかわかりません。

于 2012-05-15T12:12:08.230 に答える
0

計算を実行する方がスケーラブルであるという質問を理解していれば、それはその単一のデータセットにあります。インデックスを使用してもテーブルにデータを追加すると、ルックアップが遅くなります。また、インデックスによってテーブルサイズが大きくなり、レコードの挿入に必要な時間が長くなります。

于 2012-05-15T12:38:24.067 に答える
0

私の理解が正しければ、これはキャッシングに関する質問です。オンザフライで計算する必要がありますか、それともキャッシュで結果を検索する必要がありますか?

ほとんどの Web アーキテクチャでは、SQL データベースは優れたキャッシュであり、最悪のキャッシュになるところまでです。(SQL) データベースのスケーリングは難しいことで有名です。クラスタリングやシャーディングなどを導入すると、それ自体が本番環境になります。

私の - 非常に一般的な - アドバイスは、トランザクション データの管理にはリレーショナル データベースを使用し、キャッシングにはキャッシング テクノロジを使用することです。最近では、まともなサーバーの RAM に 800 万のレコードが収まるはずです。また、データベースをスケーリングするよりもはるかに安価に Web サーバーを追加できます。

于 2012-05-15T13:32:56.220 に答える