Temat: Cache trochę inaczej
Witam,
pomysła mam , pomysła ciekawego, na cache'owanie danych w kłejku. Być może kejk w tej chwili "umi" już tak jak ja chce, ale pewnie nie do końca. Mam zamiar napisać behaviora + model lub plugin, który zapewni cacheowanie danych z bazy przy czym, dane dostaczone do użytkownia końcowego nigdy nie bedą przeterminowane (nie będzie on musial czekac na koniec zycia danego cache'u zeby zobaczyc odswieżone dane) - cache sam się będzie odswieżać przy najmniejszej zmianie w spodziewanym zestawie rekordów - taki Real Time Cache - ważny np w przypadku wyników sportowych, które muszą być serwowane bez żadnych opóźnień.
Całość zakłada dodanie do tabel, z których dane będą cacheowane, pola modified int(10) - czyli będzie można powiedzieć kiedy dany rekord był zmieniony z dokładnością co do 1 ms, albo inaczej kiedy ostatnio jakikolwiek rekord ze spodziewanego zestawu rekordów był ostatnio modyfikowany - rekord o najwyzszej wartosci modified jest ostatnim zmienionym/utworzonym rekordem - będzie to jedno z dwóch kryteriów świadczące o zmianie w zestawie spodziewanych rekordów.
Drugie kryterium to ilość rekordów, które zostaną zwrócone po uwzględnieniu warunków zapytania.
mając np takie 3 rekordy w tabeli (id,name, modified)
3 , n3 , 1276891296
2 , n2 , 1276891200
1 , n1 , 1276891100
Keszując dane i sprawdzając tylko wartość pola modified nie zauważymy usnięcią rekordów z modified niższym niż najwyższe w czasie ostatniego keszowania.
Czyli porównując ilość rekordów w cache + czas ostatnio zmodyfikowanego rekordu , z iloscią rekrdów i czasem jakie zwroci baza po wykonaniu zapytania będzie wiadomo czy cache należy odświeżyć czy nie.
Dodatkowo można sprawdzać z jakimi argumentami została odpalona metoda probujaca uzyskać dostęp do danych (func_get_args() ), w przypadkach gry rekord nalezy do danego użytkowika.
Jakieś sugestie co do powyższych założeń ?
O ile sprawa jest prosta w przypadku modeli bez asocjacji, to trochę zaczyna się komplikować w przypadku asocacji, zwłaszcza tych bardziej złożonych, ale narazie nie zabrnałem aż tak daleko w moich przemyśleniach, sugestie mile widziane i do tej części.
+ Takie tam założenia na przyszłość :
Cache powinien być plikowy - wszystko zapisywane do pliku (File albo APC), ale tzw gorące dane powinny trafiać do bufora memcached, okresowo cronem można dane ktore już ostygły wywalać z bufora.
Ostatnio edytowany przez rob_zombie (2010-06-18 22:44:22)