1

適切に構成されたキャッシュ属性で hibernate + ehcache を使用します。アプリケーションの起動時に、キャッシュを準備し、ORM を介して DB に対して可能なすべてのクエリを実行します。これは、「有効なパラメーターの組み合わせ」が入力された場合に完全に機能します。それ以外の場合は、キャッシュ ミスが発生し、DB へのラウンド トリップが発生します。データは純粋に静的です。

すべてのケースの 70% はミスであるため、クエリ/エンティティ レベルでキャッシュ ミスを別の方法で処理できれば、多くのメリットが得られます。

ウォームアップ後にキャッシュ ミスが発生した場合、DB への hibernate + ehcache を停止する方法はありますか? 休止状態に API フックはありますか?

理想的なケースでは、キャッシュのウォームアップ後に DB アクセスがまったく実行されません。

ティア

フランク

4

1 に答える 1

0

構成を考慮して、いくつかのオプションがあります。

  • Ehcacheレベルで終了
  • Hibernate レベルで終了する
  • JDBCレベルで終了

免責事項: 以下のいずれも完全な解決策ではありません。実際、実装できない可能性があります。しかし、私はそこから掘り始めます。

null要素が存在しない場合、キャッシュレイヤーは単純に戻り、Hibernate が制御を取り戻し、データベースからエントリをフェッチするため、Ehcache レベルでできることはあまりないと思います。定義済みの値 (無効であり、存在しないことを意味することがわかっている) を返すこともできますが、これは少しコードのにおいがします。

Hibernate レベルでは、に反応するインターセプターを定義できますLoadEvent。ただし、これがクエリに適用できるかどうかはわかりません。

Hibernate と同様に、 JDBC インターセプターを使用できます。Hibernate のオーバーヘッドがまだ残っているため、理想的ではないかもしれませんが、データベースの往復を待つよりははるかに優れています (リクエストごとに約 50 ミリ秒でしょうか?)。

于 2013-03-25T10:44:45.527 に答える