13

この質問は、NHibernate の第 2 レベル キャッシュの ReadWrite と NonStrictReadWrite キャッシュ同時実行戦略の違いに関するものです。

私が理解しているように、これら2つの戦略の違いは、分散複製キャッシュがある場合に関係があります.非厳密は、1つのキャッシュが別のキャッシュとまったく同じ値を持つことを保証しませんが、厳密な読み取り/書き込みは保証する必要があります-キャッシュプロバイダーがそうすると仮定します適切な分散ロック。

私が理解していない部分は、単一のキャッシュ、または分散パーティション化された(複製されていない) キャッシュがある場合に、厳密な対非厳密な区別がどのように関連するかです。それは関連することができますか?レプリケートされていないシナリオでは、タイムスタンプ キャッシュによって古い結果が提供されないように思われます。関連性がある場合は、例を見てみたいと思います。

4

2 に答える 2

19

単一のターゲット/スレッド環境では、ほとんど違いはありません。ただし、キャッシュ プロバイダーを見ると、マルチスレッド シナリオでも少し進行しています。

オブジェクトが変更された状態から再キャッシュされる方法は、非厳密では異なります。たとえば、オブジェクトのリロードがはるかに重いが、次のユーザーに請求書を渡すのではなく、更新後にリロードしたい場合は、厳密と非厳密で異なるパフォーマンスが表示されます。例: non-strict は、更新が実行された後にキャッシュからオブジェクトを単純にダンプします...更新後のイベント ハンドラーではなく、次のアクセスでのフェッチに対して価格が支払われます。厳密なモデルでは、再キャッシュは自動的に処理されます。挿入でも同様のことが起こります。非厳密は、厳密が遅れて新しく挿入されたオブジェクトをキャッシュにロードするところで何もしません。

non-strict では、読み取り時にキャッシュがロックされていないため、別のスレッドによる項目への変更の結果が表示されないため、ダーティ リードが発生する可能性もあります。厳密に言えば、そのアイテムのキャッシュ キーがロックされ、保留されますが、絶対的な最新の結果が表示されます。

そのため、単一のターゲット環境であっても、オブジェクトに対する同時読み取り/編集が大量にある場合、実際には正確ではないデータが表示される可能性があります。

これはもちろん、保存が実行され、編集画面が読み込まれているときに問題になります。オブジェクトの最新バージョンを編集していると思っている人は実際にはそうではなく、保存しようとすると厄介な驚きに直面します。ロードした古いデータの編集。

于 2008-09-21T03:43:15.597 に答える
2

ここに違いを説明する投稿を作成しました。ご覧いただき、お気軽にコメントください。

于 2012-07-23T07:43:02.320 に答える