Chciałbym wiedzieć, jakie byłoby lepsze podejście do unieważnienia / aktualizacji obiektów pamięci podręcznej.
Wymagania wstępne
- Posiadanie zdalnego serwera memcached (służącego jako pamięć podręczna dla wielu aplikacji)
- Wszystkie serwery są hostowane przez lazur (regiony koligacji, te same centra danych)
- Rozmiar obiektu pamięci podręcznej wynosi od 200 bajtów do 50 kilobajtów
Podejście 1 (zapisz w pamięci podręcznej jak najszybciej)
- Obiekt A jest tworzony -> przechowuj w bazie danych i przechowuj w pamięci podręcznej
- Obiekt A żądany przez klienta -> sprawdź, czy pamięć podręczna istnieje, w przeciwnym razie pobierz z bazy danych i zapisz w pamięci podręcznej
- Obiekt A zostanie zaktualizowany -> przechowuj w bazie danych, przechowuj w pamięci podręcznej
Podejście 1 wydaje się prostsze. Jeśli coś zostanie utworzone, umieść w pamięci podręcznej jak najszybciej. Niezależnie od tego ktoś będzie tego potrzebował.
Podejście 2 (leniwy sklep z pamięcią podręczną)
- Obiekt A jest tworzony -> przechowuj w bazie danych
- Obiekt A żądany przez klienta -> sprawdź, czy pamięć podręczna istnieje, w przeciwnym razie pobierz z bazy danych i zapisz w pamięci podręcznej
- Obiekt A zostanie zaktualizowany -> zapisz w bazie danych, usuń klucz w pamięci podręcznej
Podejście 2 wydaje się bardziej świadome pamięci. W tym podejściu tylko żądane elementy trafiają do pamięci podręcznej.
Pytanie 1: Jakie podejście byłoby lepsze w kontekście wydajności? Pamięć ani procesor jeszcze się nie liczą.
Pytanie 2: Czy moje myśli są rodzajem przedwczesnej optymalizacji?
Pytanie 3: Jakieś inne przemyślenia? Inne podejścia?