2012-04-03 10 views
2

私は、約100のマップされたクラスを持つHibernate永続ライブラリを使用するJavaアプリケーションを持っています。第2レベルのキャッシングを試すために、マップされたクラスのうちの5つに@Cacheableを追加しました。これにより、標準的な計算タスクは、以前に使用していた時間の2倍を要しましたが、キャッシュされた項目にはいくつかのヒットがありました(Couchbaseキャッシュ監視コンソールで証明されています)。私はCouchbase統計の過渡的な性質のために正確な平均ヒット率を得ることはできませんが、私はそれを約10〜20%と見積もっています。@Cacheableエンティティの割合が低い場合、Hibernateキャッシングによりパフォーマンスが低下しますか?

一部のエンティティのキ​​ャッシュを有効にすると、@Cacheableとマークされていない他のエンティティのアクセス時間に影響し、このパフォーマンス低下を引き起こしますか? キャッシュされたアイテムのレイテンシが低くなるだけで、キャッシュのクエリのレイテンシが増えたためか?

私はHibernate 3.3を使用しています。私はクエリキャッシングを無効にしました。私はキャッシュプロバイダとしてMemcached & GemFireで同様の結果を得ました。

+0

答えはありませんか?誰かがあいまいな手がかりを持っている場合、またはこの質問に答えるために追加情報が必要な場合は、教えてください。 –

答えて

1

これは、エントリがキャッシュされているかどうかをキャッシュプロバイダが確認するかどうかによって決まると思います。これが高価なオペレーションである場合、キャッシュヒット率が低い場合、データベースからデータを取り出すのは高価になります。一般に、キャッシュ・プロバイダーはできるだけ安くするために努力すべきです。たとえば、Infinispanの場合、これはエンティティがキャッシュされているかどうかを確認する簡単なメモリ内チェックであり、そうでない場合、エントリはHibernateを介してデータベースから取得され、Infinispanキャッシュプロバイダは、 putForExternalReadと呼ばれる非常に効率的なput操作です。

Infinispanのキャッシュ・プロバイダーには本当に喜ばしいことです。詳細はhttps://docs.jboss.org/author/x/FgY5です。 JBoss AS7で実行している場合は、代わりにhttps://docs.jboss.org/author/x/LoJ7をお読みください。

免責事項:私はInfinispan開発者です。

+0

Infinispanキャッシュプロバイダを使用できません - 読み書き同時実行戦略を使用したいと思います。 –

関連する問題