2012-08-24 9 views
12

私は2番目のレベルのキャッシュとしてMemcachedでNHibernateを使用しており、常にcache.use_minimal_puts設定オプションについて興味があります。NHibernateとMemcached - use_minimal_putsを有効にする必要がありますか?

hibernate.cache.use_minimal_puts:ドキュメントによると

読み取りより頻繁のコスト で、書き込みを最小限にするために二次キャッシュの操作を最適化します。この設定はクラスタ化された キャッシュに最も有効で、Hibernate3ではクラスタ化キャッシュ の実装ではデフォルトで有効になっています。

明らかに、私はクラスタ環境でMemcachedを実行していませんが、リモートマシン上で実行します。考慮すべきもう1つの要素は、Memcachedへの読み書きの速度に大きな違いがあるかどうかである可能性があります。

cache.use_minimal_putsをこのシナリオで有効にすると効果がありますか?

+0

をバイパスします「より頻繁のコストで読み込む」 - 右、ネットワーク上のオーバーヘッドで意味も読み込み? –

+0

@PlínioPantaleão - 良い点..おそらくもっと良い質問があります:memcachedの読み込みよりも書き込みが多いですか? – DanP

+0

私は自分の意見を支持する証拠はありませんが、私はこれを信じていません。これは、書き込みによって他のマシン上のキャッシュを失う可能性があるため、分散環境でのみ当てはまります。これがシングルマシンの場合には当てはまりましたが、私は彼らが前にそれをやったでしょう:) –

答えて

15

私はNHibernateでの経験はありませんが、Hibernateの第2レベルのキャッシュで作業しており、同じ概念が両方に当てはまると言われています。

パラメータにhibernate.cache.use_ minimal_putsを提供するの背後にある基本的な考え方は、Hibernateがキャッシュ内のオブジェクトを置く前に、それは最初だけ入れて、そのオブジェクトが既に存在しているかどうかを二次キャッシュをチェックし、そうでない場合ということですそこ。

オンリーキャッシュからのデータ読み込みがデータ更新よりも非常に安価である場合に便利です。これは、次のことについてのドキュメントの意味です

...書き込みを最小限に抑えるために第2レベルのキャッシュ操作を最適化すると、より頻繁な読み取りのコストが発生します。

このような最適化に完全に適合するケースは、クラスタリングにおける複製です。

クラスタリングを使用している場合、クラスタ化されたキャッシュの場合はキャッシュ複製リスナーをアクティブにするため、put操作は非常に高価です。クラスタリングを使用していない場合は、このput操作は比較的安価です。

クラスタリングの場合でも、実行された変更を複製するのではなく、エンティティの無効化に依存するキャッシュプロバイダが存在する可能性があります。その場合でも、このパラメータは役に立たないでしょう。

Memcacheで使用される同期または非同期の複製の種類は、パフォーマンスを低下させる要因の1つです。私はMemCacheを使用していませんが、EhCacheは両方のモデルをサポートしています。

クラスタリングを使用していますが、キャッシュはリモートプロセス上にありますが、このパラメータをtrueに設定するとパフォーマンス上のメリットがあることを真剣に疑っています。

0

ちょっと詳細を追加するだけです。

hibernate.cache.use_minimal_putsこの値をtrueに設定すると、以前にキャッシュされた値が盲目的に上書きされることがなくなり、クラスタ化されたキャッシュの問題が解決されます。このマニュアルでは、クラスタ化されたキャッシュの実装ではデフォルトで有効になっています。

Hibernateは、キャッシュの読み取りを増やし、キャッシュの更新を減らすことによって、クラスタ化されたキャッシュのキャッシュアクセスを最適化する構成プロパティhibernate.cache.use_minimal_putsを提供します。

CacheMode.REFRESHhibernate.cache.use_minimal_puts効果

関連する問題