Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> DB Cache, Wskazówki
cadavre
post
Post #1





Grupa: Zarejestrowani
Postów: 472
Pomógł: 7
Dołączył: 7.12.2005
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


Mam kilka pytań dot. cacheowania zapytań DB:

1. Jak rozpoznawać o które SQL chodzi? Ja każde zapytanie strtolow'uję, opróżniam ze znaków ['|"|`] i spacji a potem hash'uję w md5 - hash'em rozpoznaję query i nazywam pliki. Jak zrobić to inaczej, szybciej? Jak wiadomo replace i md5, które korzysta z algorytmów matematycznych, zajmują sporo czasu.
2. Czy sprawdzanie if( $czas_utworzenia_pliku > $aktualny_czas - $interwał ) { z_cache'u } jest dobrym sposobem na sprawdzenie terminu ważności pliku z cache'm?
3. W jaki sposób połączyć klasy db i cache'u? U mnie jeśli zapytanie ma być cache'owane wysyła do własnego fetch'a string, jeśli nie cacheowane - wysyła resource z query. Fetch sprawdza is_string i is_resource. To rozwiązanie jednak do najszybszych nie należy.
4. Pliki z cache'm zapisywać jako zserialiowaną tablicę czy po prostu jako <?php $arr=...; ?> ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
msulik
post
Post #2





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 31.03.2002
Skąd: Toruń

Ostrzeżenie: (0%)
-----


Jeśli mogę dorzucić swoje trzy grosze ;)
Faktycznie md5 zajmuje dużo czasu, co jest raczej oczywiste. Osobiście stosuję do nazywania plików cache czysty słowny opis, np. 'OstatnieDziesiecNewsow', 'MenuGlowne' czy 'UzytkownicyOnLine'. Ewentualnie, gdy zachce mi się kiedyś używać spacji czy innych znaczków, mogę potraktować takie cudo funkcją urlencode (może base64_encode albo jakaś inna byłaby szybsza?) i wydaje mi się, że nie ma w tym nic złego.

Poza tym samo zapytanie SQL może być zależne od jakichś parametrów zmieniających się często, podczas gdy w czasie świeżości cache'u (tzn. gdy cache nie wymaga odświeżenia) wynik zapytania jest taki sam albo różnica w wyniku nie jest dla nas bardzo istotna (na przykład "Newsy z ostatnich 10 minut"; pomijam fakt, że "ostatnie 10 minut" można na sztywno zafiksować w zapytaniu, ale to tylko taki przykład).

Co do serializowania, może ktoś mnie oświeci, czemu tak jest. Początkowo używałem nie serializowania, tylko funkcji var_export() z drugim parametrem ustawionym na true, a następnie przy odczytywaniu cache po prostu includowałem plik z cachem. Wszystko działało pięknie. Ale zrobiłem benchmark i okazało się, że serialize działa o połowę szybciej niż var_export(), również unserialize jest szybsze niż include. Może ktoś wie, czemu tak jest?
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 11.10.2025 - 08:52