![]() |
![]() |
![]()
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=...; ?> ? |
|
|
![]() |
![]()
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? |
|
|
![]() ![]() |
![]() |
Aktualny czas: 11.10.2025 - 08:52 |