クエリキャッシングはどのように機能し、nHibernateのパフォーマンスをどのように改善しますか?
3 に答える
クエリがキャッシュされると、NHibernate はクエリの結果のエンティティの ID をキャッシュします。
非常に重要なことは、エンティティ自体はキャッシュせず、エンティティの ID のみをキャッシュすることです。これは、ほぼ確実に、これらのエンティティが 2 番目のレベルのキャッシュでもキャッシュできるように設定する必要があることを意味します。それ以外の場合、NHiberate はクエリ キャッシュからエンティティの ID を取得しますが、実際のエンティティを取得するためにデータベースに移動する必要があります。そもそもデータベースにアクセスするよりもコストがかかる可能性があります。
また重要: クエリは、正確な SQL およびパラメーター値に基づいてキャッシュされます。これらのいずれかの違いは、データベースがヒットすることを意味します。そのため、おそらく、入力の差異がほとんどないクエリのみをキャッシュする必要があります。
キャッシュを有効にすると、クエリを実行すると、nHibernate はクエリ結果を内部のどこかに保存します。同じパラメータでクエリを再度実行しようとすると、データベースからではなくキャッシュから結果が取得されます。もちろん、はるかに高速です。ただし、他のアプリがバックグラウンドでデータベースを変更できることに注意してください! ただし、nHibernate はキャッシュを更新できます。
これを使用することで、nHibernateはデータストアにアクセスする必要がなくなり、キャッシュ内のデータにアクセスします。