buforowanie pamięci (często nazywane buforowaniem) to technika, w której aplikacje komputerowe tymczasowo przechowują dane w głównej pamięci komputera (np. PAMIĘĆ RAM używana do tymczasowego przechowywania jest znana jako pamięć podręczna. Ponieważ dostęp do pamięci RAM jest znacznie szybszy niż dostęp do innych mediów, takich jak dyski twarde lub sieci, buforowanie pomaga aplikacjom działać szybciej dzięki szybszemu dostępowi do danych. Buforowanie jest szczególnie wydajne, gdy aplikacja wykazuje wspólny wzorzec, w którym wielokrotnie uzyskuje dostęp do danych, które były wcześniej dostępne. Buforowanie jest również przydatne do przechowywania obliczeń danych, które w przeciwnym razie są czasochłonne do obliczenia. Zapisując obliczenia w pamięci podręcznej, system oszczędza czas, unikając powtarzania obliczeń.
jak działa buforowanie pamięci?
buforowanie pamięci działa, najpierw odkładając część pamięci RAM, która ma być używana jako pamięć podręczna. Gdy aplikacja próbuje odczytać dane, zazwyczaj z systemu przechowywania danych, takiego jak baza danych, sprawdza, czy żądany rekord już istnieje w pamięci podręcznej. Jeżeli tak się stanie, wtedy aplikacja odczyta dane z pamięci podręcznej, eliminując tym samym wolniejszy dostęp do bazy danych. Jeśli żądany rekord nie znajduje się w pamięci podręcznej, wtedy aplikacja odczytuje rekord ze źródła. Po pobraniu tych danych zapisuje je również do pamięci podręcznej, aby gdy aplikacja potrzebuje tych samych danych w przyszłości, mogła je szybko pobrać z pamięci podręcznej.
Ponieważ rozmiar pamięci podręcznej jest ograniczony, niektóre dane już w pamięci podręcznej będą musiały zostać usunięte, aby zrobić miejsce dla nowych danych, do których aplikacja ostatnio uzyskała dostęp. Oznacza to, że system buforowania potrzebuje strategii, na której rekordy usunąć, aby zrobić miejsce. Strategia będzie zależeć od charakteru dostępu do danych aplikacji i na ogół spróbuje usunąć rekordy, które nie będą wkrótce ponownie dostępne. Na przykład, najmniej ostatnio używana strategia (LRU) usunie rekord, którego ostatni dostęp był przed jakimkolwiek innym rekordem w pamięci podręcznej. Założenie jest takie, że jeśli minęło dużo czasu od uzyskania dostępu do rekordu, prawdopodobnie wkrótce nie będzie on ponownie dostępny. Inaczej mówiąc, rekordy, które były ostatnio najczęściej używane, prawdopodobnie zostaną wkrótce ponownie użyte. Najmniej często używana strategia (LFU) polega na śledzeniu liczby dostępów do każdego rekordu w pamięci podręcznej i usuwaniu rekordu z najmniejszą liczbą dostępów. Zakłada się, że rzadko używany rekord prawdopodobnie nie zostanie wkrótce ponownie użyty.
wyzwaniem związanym z pamięciami podręcznymi jest zminimalizowanie „braków pamięci podręcznej”, tj., próby odczytu przez aplikację rekordów, które nie znajdują się w pamięci podręcznej. Jeśli masz zbyt wiele pudeł, wydajność pamięci podręcznej spada. Aplikacja, która odczytuje tylko nowe dane, nie skorzystałaby z pamięci podręcznej, a w rzeczywistości wykazywałaby niższą wydajność z powodu dodatkowej pracy polegającej na sprawdzaniu pamięci podręcznej, ale nie znajdowaniu w niej pożądanego rekordu. Jednym ze sposobów na złagodzenie tego wyzwania jest wykorzystanie większych pamięci podręcznych. Często nie jest to praktyczne na jednym komputerze, dlatego rozproszone pamięci podręczne są popularnym wyborem do przyspieszania aplikacji, które muszą uzyskać dostęp do większych zbiorów danych. Rozproszona pamięć podręczna łączy ze sobą pamięć RAM wielu komputerów podłączonych do klastra, dzięki czemu można utworzyć większą pamięć podręczną, która może nadal rosnąć, dodając więcej komputerów do klastra. Technologie takie jak Hazelcast IMDG mogą być używane jako rozproszony klaster do przyspieszania aplikacji na dużą skalę.
kolejnym wyzwaniem pamięci podręcznej jest ryzyko odczytu „starych” danych, w których dane w pamięci podręcznej nie odzwierciedlają najnowszych danych w źródle bazowym. Często ryzyko to jest akceptowalnym kompromisem ze względu na wydajność aplikacji. W przypadkach, w których tak nie jest, aplikacja aktualizuje podstawowe źródło danych, aby zaktualizować dany rekord w pamięci podręcznej.
przykładowe przypadki użycia
jednym z szerokich przypadków użycia buforowania pamięci jest przyspieszenie aplikacji bazodanowych, zwłaszcza tych, które wykonują wiele odczytów bazy danych. Zastępując część odczytów z bazy danych odczytami z pamięci podręcznej, aplikacje mogą usunąć opóźnienia wynikające z częstego dostępu do bazy danych. Ten przypadek użycia jest zwykle spotykany w środowiskach, w których obserwuje się Duży dostęp do danych, na przykład w witrynie internetowej o dużym natężeniu ruchu, która zawiera dynamiczną zawartość z bazy danych.
inny przypadek użycia obejmuje przyspieszenie zapytań, w którym wyniki złożonego zapytania do bazy danych są przechowywane w pamięci podręcznej. Złożone zapytania wykonywanie operacji, takich jak grupowanie i porządkowanie, może zająć znaczną ilość czasu. Jeśli zapytania są uruchamiane wielokrotnie, jak ma to miejsce w pulpicie nawigacyjnym business intelligence (BI), do którego dostęp ma wielu użytkowników, przechowywanie wyników w pamięci podręcznej umożliwiłoby większą responsywność na tych pulpitach nawigacyjnych.
Tematy Pokrewne
Pamięć Podręczna JCache / Java
Brak Pamięci Podręcznej
Hibernacja Pamięci Podręcznej Drugiego Poziomu
Czytaj Dalej
Przypadki Użycia Pamięci Podręcznej
Pamięć Podręczna Bazy Danych
Hazelcast Chmura
Buforowanie Wykonane Bootiful: Spring Cache + Hazelcast