14

nhibernateと2次キャッシュを使用するWebサイトがあります。マルチWebサーバー環境(ロードバランサーが前面にある)に移行するときに、1人のユーザーが第2レベルのキャッシュをオフにしたいと考えているため、議論が交わされています。

1つの議論は、第2レベルのキャッシュを取り除き、Dbの最適化と調整に集中することです。もう1つの議論は、分散キャッシュを第2レベルのキャッシュとして展開することです。

DBチューニングと分散キャッシュ(関連する作業、コスト、複雑さなどのファクタリング)について、賛否両論の人々の意見を聞きたいと思います。

4

6 に答える 6

13

負荷分散シナリオの場合、最高のパフォーマンスと一貫性を得るには、分散キャッシュプロバイダーを使用する必要があります。これは、データベースの最適化とは関係ありません。どのシナリオでも、データベースを最適化する必要があります。

于 2011-07-07T11:14:10.787 に答える
8

両方。データベースへの不必要な呼び出しを防ぐための分散キャッシュと、最初の呼び出しがすぐに返されるように調整されたデータベースが必要です。例として、Facebookはスケーリングするためにかなりの量のキャッシュを必要としましたが、最初のクエリに10分かかった場合、それはあまり役に立たないと確信しています。:)

于 2011-07-15T13:59:45.263 に答える
5

2つの言葉:それを測定します。

すでにキャッシュを実装しているので、ベンチマークの目的でキャッシュをオフにした場合の影響を測定できます。

于 2011-07-07T12:20:59.880 に答える
5

マルチWebサーバーと分散型の第2レベルのキャッシュは共存でき、おそらく共存すべきだと思います。

まず、memcachedを例にとると、分散オブジェクトの保存がサポートされているため、それを使用していない場合は、それに切り替えることができます。できます。

次に、増加するWeb要求に応答するために、Webサーバーファームを導入していると思います。これは、データの要求が増加することを意味します。キャッシュを強制終了した場合、データベースをどれだけ最適化しても、クエリを使用してデータベースを破棄することはできません。したがって、実行時間を改善しますが、データベースがデータを返すのを待ちます。

これは、Webノード1がデータセットAを要求し、Webノード2がデータセットAを要求する場合に特に当てはまります->同じクエリを2回実行しますが、第2レベルのキャッシュでは1回だけ実行します。

だから私の推薦は:

2番目のレベルのキャッシュを強制終了しないでください。あなたはすでにそれを実装するためにリソースを費やしており、それを無効にすることによってあなたはあなたのアプリケーションのパフォーマンスを改善するつもりはありません。memcachedの単一のノードでさえ、まったくない場合よりも高速になります。

データベース操作を最適化してくださいこれは、データベース側(インデックス、ビュー、sp、関数、おそらく読み取り専用ノードと書き込み専用ノードを持つクラスター)とアプリケーション側(クエリの最適化、遅延/積極的な読み込みプロファイリング、データをフェッチしない)の両方からのことを意味します必要ありません。Future、MutliQuery、MultiCriteriaを介して、複数のクエリを1回のラウンドトリップに結合します)

第2レベルのキャッシュ実装を最適化してください有効期限が無限のデータセットがあるため、データベースに1回だけクエリを実行します。また、有効期限が短いデータセットがあるため、コストのかかるクエリがより頻繁に実行される可能性があります。クエリとデータベースを最適化することで、クエリのパフォーマンスが向上しますが、第2レベルのキャッシュは、有効期限の短いデータセットキャッシュによってより頻繁にフェッチされるピーク負荷時にスキンを節約します。

テキストクエリの使用が日常業務である場合は、データベースのフルテキスト機能を使用するか、さらに良いことに、Lucene.NET(NHibernate.Searchを介してNHibernateと統合できる)などの独立したサービスを使用します。

于 2011-07-18T08:01:59.393 に答える
2

それは非常に難しいトピックです。どちらの場合も、習熟度が必要です。非常に熟練したDBA、または非常に熟練したNHibernate/キャッシュ管理者のいずれか。

個人的には、SQLを完全に制御し、データベースを調整することを好みます。複数のWebサーバー(必ずしも複数のデータベースインスタンスである必要はありません)しかないため、その方法の方がよい場合もあります。最近のデータベースには非常に効率的なキャッシュがあるため、通常、データベースにSQLステートメント、カーソル、データ、バッファーなどをキャッシュさせるのではなく、アプリケーションで不適切に構成された第2レベルのキャッシュを使用すると害が大きくなります。約15のweblogicサーバーと大量のメモリを備えた1つのデータベースのみ。

ただし、すでにNHibernateを使用しているので、NHibernateから離れて、SQLに戻る(おそらくLINQを使用する?)のは非常にコストのかかる作業である可能性があり、努力する価値はありません。

于 2011-07-12T11:29:41.450 に答える
1

Microsoft AppFabric分散キャッシュフレームワーク( NHibernate Velocity Provider )を使用したマルチサーバー環境でNHibernateの第2レベルのキャッシュを使用し、大きな成功を収めています。

そうは言っても、第2レベルのキャッシュを使用するには、予期しない結果を防ぐためにフレームワークをより深く理解する必要があります。さらに、分散キャッシュを使用する前に、それらのオーバーヘッドを測定することが重要です。

したがって、私の答えは基本的にです。第2レベルのキャッシュを使用する前に、実際にテストして、それが本当に必要かどうかを確認する必要があります。

于 2011-07-19T10:34:35.093 に答える