13

cache.use_minimal_puts私は NHibernate と Memcached を 2 番目のレベルのキャッシュとして使用しており、構成オプションについて常に興味を持っていました。

ドキュメントによると:

hibernate.cache.use_minimal_puts: 2 番目のレベルのキャッシュ操作を最適化して、より頻繁な読み取りを犠牲にして、書き込みを最小限に抑えます。この設定は、クラスタ化されたキャッシュに最も役立ちます。Hibernate3 では、クラスタ化されたキャッシュの実装に対してデフォルトで有効になっています。

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

cache.use_minimal_putsこのシナリオで有効にするメリットはありますか?

4

2 に答える 2

17

私は NHibernate の経験はありませんが、Hibernate で 2 番目のレベルのキャッシュを使用した経験があり、同じ概念が両方に適用できると言われています。

パラメータhibernate.cache.use_minimal_putsを提供する背後にある基本的な考え方は、hibernate がオブジェクトをキャッシュに入れる前に、まず第 2 レベルのキャッシュでオブジェクトが既に存在するかどうかを確認し、存在しない場合はそこに置くことです。

これは、キャッシュからのデータ読み取りがデータ更新よりも非常に安価な場合にのみ役立ちます。これは、ドキュメントが次のことについて意味することです

...より頻繁な読み取りを犠牲にして、書き込みを最小限に抑えるための第 2 レベルのキャッシュ操作の最適化。

この種の最適化に完全に適合するケースは、クラスタリングでのレプリケーションです。

クラスタリングを使用している場合、クラスター化されたキャッシュの場合にキャッシュ レプリケーション リスナーをアクティブにするため、put 操作は非常にコストがかかります。クラスタリングを使用していない場合、このプット操作は比較的安価です。

クラスタリングの場合でも、エンティティに対して行われた変更をレプリケートする代わりに、エンティティの無効化に依存するキャッシュ プロバイダーが存在する場合があります。その場合も、このパラメーターは役に立ちません。

パフォーマンスを妨げる要因の 1 つは、Memcache で使用されるレプリケーションの種類 (同期または非同期) です。私は MemCache を使用していませんが、EhCache は両方のモデルをサポートしています。

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

于 2012-09-12T13:29:06.523 に答える