Mam problem ze zrozumieniem, kiedy hibernacja osiąga pamięć podręczną drugiego poziomu, a kiedy unieważnia pamięć podręczną.
Oto, co obecnie rozumiem:
- Pamięć podręczna drugiego poziomu przechowuje jednostki między sesjami, zakres to SessionFactory
- Musisz powiedzieć, które jednostki mają być buforowane, żadna jednostka nie zostanie domyślnie zapisana w pamięci podręcznej
- Pamięć podręczna zapytań przechowuje wyniki zapytań w pamięci podręcznej.
To, czego nie rozumiem, to
- Kiedy hibernacja uderza w tę pamięć podręczną?
- Powiedzmy, że skonfigurowałem pamięć podręczną drugiego poziomu, ale nie buforowanie zapytań. Chcę buforować moich klientów, jest ich 50000. W jaki sposób mogę odzyskać klientów z pamięci podręcznej?
- Zakładam, że mogę je uzyskać przez identyfikator z pamięci podręcznej. Byłoby to łatwe, ale nie warte buforowania. Ale co, jeśli chcę przeprowadzić obliczenia dla wszystkich moich klientów. Powiedzmy, że chcę wyświetlić listę klientów, w jaki sposób mogę uzyskać do nich dostęp?
- Jak mogę zdobyć wszystkich moich klientów, jeśli buforowanie zapytań jest wyłączone?
- Co by się stało, gdyby ktoś zaktualizował jednego z klientów?
- Czy ten klient zostałby unieważniony w pamięci podręcznej, czy wszyscy klienci zostaliby unieważnieni?
A może myślę, że buforowanie jest całkowicie złe? Jakie byłyby bardziej odpowiednie zastosowania pamięci podręcznej drugiego poziomu w takim przypadku? Dokumentacja hibernacji nie jest wcale jasna, jak w rzeczywistości działa pamięć podręczna. Są tylko instrukcje, jak to skonfigurować.
Aktualizacja: Więc zrozumiałem, że pamięć podręczna drugiego poziomu (bez pamięci podręcznej zapytań) byłaby dobra do ładowania danych według identyfikatorów. Na przykład mam obiekt użytkownika, dla którego chcę sprawdzić uprawnienia w każdym żądaniu w aplikacji internetowej. Czy byłby to dobry przypadek ograniczenia dostępu do bazy danych poprzez buforowanie użytkownika w pamięci podręcznej drugiego poziomu? Jakbym przechowywał identyfikator użytkownika w sesji lub gdziekolwiek, a kiedy muszę sprawdzić uprawnienia, załadowałbym użytkownika według jego identyfikatora i sprawdziłbym uprawnienia.