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"
Najczęściej oglądaną stroną praktycznie każdego serwisu jest strona główna - identyczne dla każdego użytkownika dane można skutecznie keszować by poprawić wydajność aplikacji.

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.

RkBlog

Google App Engine (GAE), 12 August 2009

Comment article
Comment article RkBlog main page Search RSS Contact