Na wstępie, sorry za taki ogólny opis - nie za wiele mogę zdradzić - warunki umowy...
Do rzeczy. Podczas opracowywania nowego projektu zaświtała mi w głowie myśl, żeby cachować wyniki (niektórych) zapytań SQL.
Dla uproszczenia dalszych rozważań, przyjmuję, że wszystko (tj apache/mysql/pliki) jest na jednej fizycznej maszynie.
Raz dwa napisałem banalną klasę - przy zapytaniu o pobranie danych, sprawdź czy jest dla tego cache, jeśli nie - pobierz i wygeneruj cache.
Jeśli dane się zmieniają - po prostu usuń plik cache.
Przedmiotem tego cache są dane ściśle związane z użytkownikiem.
Pięknie, działa - ponad 20 razy szybciej niż pobieranie danych z MySQL, choć zapytanie to tak naprawdę złączenie dwóch tabel po id użytkownika.
Pięknie, fajnie - ale dla jednego użytkownika.
Wobec powyższego, pytanie moje brzmi - jak się może zachować taki banalny cache w momencie, kiedy z serwisu korzysta ok 15000 użytkowników, regenerowanie cache przy aktualizowaniu danych? 15k użytkowników = 15k plików ekstra, które trzeba "wyszukać", wczytać, usunąć - choć nie przewiduję plików większych niż 1KB.
Moje największe obawy są związane z dyskiem - czas dostępu, w pewnym sensie "szeregowość" odczytu tych plików... czy przypadkiem przy takim obciążeniu taki cache nie zacznie bardziej szkodzić niż pomagać?
Potraktujcie proszę powyższe jako problem "abstrakcyjny" - nawet przy dobrych rezultatach w obecnym projekcie czegoś takiego nie wdrożę, ale w przyszłości? kto wie...
I na koniec podkreślę - w tym konkretnym przypadku nie interesują mnie inne metody cache niż dump danych do pliku.
jest tu wiele osób o większej wiedzy niż moja - rozwiejcie moje wątpliwości ;)