Memcached, z czym to się je?
Na memcached natknęliśmy się podczas projektowania systemu wielojęzyczności (i18n) jednego z naszych serwisów. Problemem była kwestia przechowywania tłumaczeń tekstów. Pomysłów było kilka:
- tłumaczenia przechowywane w plikach PHP, odpowiedni plik ze stałymi będzie includowany podczas obsługi żądania strony,
- tłumaczenia przechowywane w plikach XML, pliki będą doczytywane w miarę potrzeby,
- tłumaczenia przechowywane w bazie danych, i na bieżąco wczytywane.
Wszystkie te podejścia mają jednak słaby punkt, otóż za każdym żądaniem strony, tłumaczenia muszą być wczytywane od nowa. Faktem jest, że wszystkie trzy metody zawierają w sobie pewien rodzaj cache’owania (wczytywane pliki są cache’owane przez system operacyjny, zapytania bazodanowe cache’owane są przez bazę danych), ale tak na prawdę żaden z nich nie oferuje optymalnego rozwiązania. Najgorszym spośród wyżej wymienionych rozwiązań jest chyba czytanie tłumaczeń z plików XML. Wyobraźmy sobie, że za każdym razem gdy skrypt napotyka napis, musi wczytać odpowiedni plik i przeparsować XML w celu znalezienia tłumaczenia. Dodajmy do tego średnio 100 użytkowników aktualnie korzystających z aplikacji webowej i mamy murowaną porażkę. Można oczywiście spróbować cache’ować napisy na czas żądania strony, ale trzeba wziąć pod uwagę, że tłumaczenia raz wczytane, nie będą się często zmieniać. Większość z nich jest również wspólna dla wszystkich użytkowników. Tutaj do akcji spokojnie można zaprząc memcached.
