HAHA!

Panowie właśnie odzyskałem wiarę w siebie.

Już tłumaczę.
Napisałem sobie śliczniutki skrypcik do cache'owania zapytań z bazy danych. Kod wyglądał bardzo dobrze i wszystko działo - z tym, że jakoś wolno. Postanowiłem zadać pytania zawarte w pierwszym poście (wciąż aktualne) i postanowiłem pousuwać pewne elementy w moim skrypcie lub pozamieniać na stałe (jak np. generowanie md5 sql'a). Tym sposobem robiłem co usunięcie - benchmark czasu zapytania:
SELECT script_time,queries,SUM(queries),AVG(script_time)
FROM statystyka_system WHERE DATA
BETWEEN '2006-12-10 00:00' AND '2006-12-20 00:00'
GROUP BY script_time
[tabela 11,6KB z 324. wpisami]
Oto wyniki:
Kod
mysql_ 2,89
mój fetch 3,09
query tp 9,20
query gp 8,67
query tp+bh 8,23
query gp+bh 7,83
query bst 7,50
query nBUG 0,08
tp - tworzenie pliku cache
gp - gotowy plik cache (istniejący)
bh - bez hashowania
bst - bez sprawdzania typu (is_string i is_resource)
nBUG - po znalezieniu błędu w kodzie
Po kolei:
query na systmowych mysql_ (bez cache)
query z moim fetch (bez cache)
query z tworzeniem pliku cache (z cache)
query z utworzonego pliku (z cache)
query z tworzeniem pliku bez hasha (z cache)
query z utworzonego pliku bez hasha (z cache)
query z utworzonego pliku bez hasha, bez sprawdzania typów (z cache)
query po znalezieniu głupiego błędu (z cache)
W/w błąd to odczytywanie za każdym razem pliku z cachem z HDD: każdy row - na nowo odczytany plik. Powodem było "wylezienie" metody read() poza pierwszego if'a. Różnica pomiędzy odczytywaniem z bazy danych to ponad 2,81sekundy!
Dodatkowo co zwalnia system:
Kod
Tworzenie pliku query +0,50sec
Hashowania zapytania +0,90sec
Sprawdzanie typów i if +0,30sec
Teraz tylko muszę powyższe czynniki zmodyfikować by je przyspieszyć (jak na razie dodając je i czas query z cache jest jakieś ~1,78sec więc i tak szybciej niż query z bazy danych).
Gdy tylko wprowadzę poprawki - przedstawię kod i wrzucę do gotowych "Algorytmy, skrypty...".
Na przyszłość:
Czas utworzenia pliku filectime nie oznacza czasu utworzenia pliku, a czas węzła pliku. Zatem jeśli tworzymy plik o takiej samej nazwie na miejsce nowego - data jego utworzenia zostanie zachowania. W systemie cacheowania należy posłużyć się funkcją
filemtime. Straciłem przez to g***o z 1h 30min...