13.8.2. 変更不可のデータのオブジェクト参照の 2 次レベルのキャッシング
Hibernate は、パフォーマンスを改善するために自動的にデータをメモリーにキャッシュします。これは、特にほとんど変更されないデータに対して、必要なデータベースルックアップ回数を減らすインメモリーキャッシュによって実現されます。
Hibernate は以下の種類のキャッシュを維持します。(1 次キャッシュとも呼ばれる) プライマリーキャッシュは必須です。このキャッシュは現行セッションと関連付けられ、すべてのリクエストがそのセッションを通過する必要があります。セカンダリーキャッシュとも呼ばれる 2 次キャッシュは任意で、プライマリーキャッシュが最初に参照された後にのみ参照されます。
データは、最初にデータを状態アレイにアセンブルすることで 2 次キャッシュに保存されます。このアレイはディープコピーされ、そのディープコピーがキャッシュに配置されます。その逆は、キャッシュからの読み取りに対して行われます。これは、変更 (変更不能データ) が変更できないデータには適切に機能しますが、変更できないデータには効率的ではありません。
データのディープコピーは、メモリー使用量と処理速度に関する負荷のかかる操作です。大きなデータセットでは、メモリーと処理速度がパフォーマンス制限の要因となります。Hibernate では、変更不能なデータがコピーされるのではなく、参照されるように指定できます。Hibernate は、データセット全体をコピーする代わりに、キャッシュのデータへの参照を保管できるようになりました。
これは、設定設定の値を変更することで実行できます
hibernate.cache.use_reference_entries
にtrue
。デフォルトでは、hibernate.cache.use_reference_entries
に設定されていますfalse
。
いつ
hibernate.cache.use_reference_entries
に設定されていますtrue
、関連付けのない不変のデータオブジェクトは、第 2 レベルのキャッシュにコピーされず、そのオブジェクトへの参照のみが保存されます。
警告
いつ
hibernate.cache.use_reference_entries
に設定されていますtrue
、関連付けのある不変のデータオブジェクトは、引き続き第 2 レベルのキャッシュに深くコピーされます。