Efektywne keszowanie w Memcache
Memcache to rozproszony system keszowania w pamięci RAM, w którym można przetrzymywać różne dane na zasadzie klucz-wartość. Zapisy do memcache nigdy nie "dotykaja" dysku i są około 10 razy szybsze od zapisów do datastore. Bezpośrednie odczyty z memcache są około 5 razy szybsze od pobrania danych z datastore. Z drugiej strony dane w memcache nie są przetrzymywane trwale i mogą zostać usunięte (np. restart usługi, brak RAMu itd.). Zastosowanie memcache do keszowanie np. często pobieranych z bazy danych może zwiększyć szybkość aplikacji.
Jak tego używać?
W zależności od aplikacji i jej architektury memcache można zastosować w wielu jej miejscach. Oto kilka częstych zastosowań dla memcache:
- Keszowanie popularnych stron
- Zapis tymczasowy często aktualizowanych danych
- Keszowanie często pobieranych encji
- Popularne "strony"
Drugi punkt może dotyczyć np. shardowanych liczników opisanych w oddzielnym artykule. Chcąc poznać sumę licznika musimy pobrać wszystkie jego encje i zsumować wynik. Gotowy wynik możemy zapisać do memcache i odczytywać go z memcache, aż nie zniknie lub licznik zostanie zaktualizowany (oszczędzając operacje pobrania i liczenia).
Jeżeli pobieramy często jakieś encje (np. konfiguracje lub o podobnym znaczeniu) po kluczu, czy nazwie to możemy je także przetrzymywać w memcache na podobnej zasadzie jak z wynikiem shardowanego licznika. Należy aby zadbać o aktualizację danych w memcache wraz z aktualizacją keszowanej encji.
Pod punkt popularnych "stron" podpadają różne dynamicznie wyliczone dane - np. gotowa lista najczęściej odwiedzanych podstron, fotek w galerii itd. Takie wyliczone dane możemy trzymać wyłącznie w memcache by przyśpieszyć ładnie się stron i przeliczać takie listy, gdy dane w memcache zniknął lub się przeterminują.
Opis API memcache w GAE i sposoby jego wykorzystania w kodzie opisane są w dokumentacji - The Memcache Python API. Na podstawie Effective memcache.
Comment article