Najlepsza odpowiedź
Jak wcześniej Scott McNulty odpowiedział na to pytanie, buforowanie SQL to przechowywanie zestawów wyników generowanych w wyniku zapytania skierowanego do bazy danych i używanie kopii wyników do późniejszych wyników. Biorąc to pod uwagę, w tej kwestii jest DUŻO więcej niż tylko „buforowanie”. Prawdziwym problemem nie jest buforowanie, ale unieważnienie jest najtrudniejszą częścią. Przechowywanie informacji nie jest trudne, wiedząc, kiedy są one nieprawidłowe, tak jest.
Istnieje również drugi, bardziej subtelny problem związany z buforowaniem, a mianowicie wpływ buforowania na opóźnienia sieci. Większość rozwiązań pamięci podręcznej działa jako niezależny serwer, podobnie jak baza danych. Aby zapytać o pamięć podręczną, należy ponownie przeprowadzić podróż w obie strony przez sieć, podobnie jak w przypadku bazy danych. Jeśli pamięć podręczna nie ma niezawodnej odpowiedzi ORAZ odpowiada szybciej niż baza danych, bardzo trudno jest faktycznie poprawić wydajność za pomocą pamięci podręcznej.
Aby optymalnie buforować SQL, potrzebujesz rozwiązania, które może rozwiązać kilka problemów:
- Jaka treść powinna być przechowywana w pamięci podręcznej?
- Jeśli istnieje wynik w pamięci podręcznej, czy należy go uznać za nieprawidłowy?
- Jeśli trafienie w pamięć podręczną jest zbyt niska, czy logika pamięci podręcznej automatycznie dostosuje się, aby zatrzymać buforowanie i przestać wyszukiwać, aby uniknąć kary?
W rzeczywistości biorąc pod uwagę większość przypadków narożnych, jest to bardzo złożone zestaw logiki zapewniający najlepszy scenariusz wydajności dla buforowania. Nie jest to tak proste, jak zaimplementowanie silnika pamięci podręcznej, takiego jak Redis lub Hazelcast , w aplikacji . Zamiast tego potrzebujesz inteligentnego silnika pamięci podręcznej, który może sprawdzać, jakie dane są zmieniane, automatycznie unieważniać dane iw inny sposób optymalizować żądania, które mogą być kierowane do zewnętrznego silnika pamięci podręcznej, w porównaniu z tym, co jest wykonywane w bazie danych.
Jeden taki silnik pochodzi z Heimdall Data (zastrzeżenie, jestem CTO w Heimdall Data). Silnik Heimdall automatycznie buforuje zawartość kierowaną z aplikacji do bazy danych jako sterownik JDBC lub jako serwer proxy na poziomie protokołu, automatycznie unieważnia treść i optymalizuje również zawartość buforowaną. Pozwala to programistom skupić się na funkcjach, a nie na pamięci podręcznej, co w niektórych przypadkach może zaoszczędzić 20–40\% czasu programowania i debugowania aplikacji.
Odpowiedź
Buforowanie ogólnie to przechowywanie wyniki procesu, który wymaga dużej ilości zasobów, więc nie trzeba ich ponownie wydawać.
W SQL; jest zawsze specyficzna dla technologii dostawcy. MS-SQL, Oracle, MySQL i PostGres mają różne możliwości wyboru tego, co buforują. Wyniki, zapytanie, a nawet plan wykonania zapytania mogą być przechowywane w celu późniejszego wykorzystania tych samych informacji.
W przypadku zmiany danych bazowych system zwykle posiada mechanizm wskazanie, że przechowywane w pamięci podręcznej informacje są „brudne” i nie są już w pełni użyteczne; więc zapytanie może zostać ponownie uruchomione przez system.
Widzisz to cały czas. Jak długo trwa moje zapytanie? Dlaczego zawsze jest szybszy, jeśli uruchomię go po raz drugi? Cóż, dlatego. System skutecznie zapamiętuje to, o co pytałeś wcześniej i daje odpowiedź, którą pamięta z tamtego czasu.