Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] testy zapytań vs file_exists
Forum PHP.pl > Forum > PHP
Kazaan
Witam
Dzis z czystej ciekawosci testowałem pare rozwiazan dotyczacych zapytan do bazy - mam w bazie tabele z fotkami z nastepujacymi kolumnami - ID,NAZWA,HASH, gdzie hash to nazwa katalogu, teraz wpadlem na pomysl zeby olac wogole dodawanie fot do bazy tylko sprawdzac funkcja opendir(); zawartosc danego katalogu i na jego podstawie wylistowac informacje o plikach

przeprowadzilem testy na zapytaniach mysql oraz na funkcji opendir, i wyszło na to ze kozystniej uzyć funkcji opendir niz zrobic najprostrze zapytanie w formie: SELECT * FROM tabela WHERE id='' LIMIT 1

a oto wyniki czasowe:

MYSQL:

10 000 zapytan - czas wywołania php: 0.9567
100 000 zapytan - czas wywołania php: 9.5920

FUNKCJA OPENDIR

10 000 zapytan - czas wywołania php: 0.4993
100 000 zapytan - czas wywołania php: 4.9156

Dodatkowo z ciekawosci sprawdzilem funkcje file_exists (akurat to tez mi jest potrzebne) i wyszlo:

10 000 zapytan - czas wywołania php: 0.0348
100 000 zapytan - czas wywołania php: 0.3479

Co Wy na to ?
Prezi2907
Cytat(Kazaan @ 4.08.2011, 14:16:03 ) *
przeprowadzilem testy na zapytaniach mysql oraz na funkcji opendir, i wyszło na to ze kozystniej uzyć funkcji opendir niz zrobic najprostrze zapytanie w formie: SELECT * FROM tabela WHERE id='' LIMIT 1


Jak robisz zapytanie SELECT * FROM tabela WHERE id='' limit 1

To może być zły czas pomiaru. Zacznij od podania kolumn zamiast całościowego... Mimo że to 2-3 kolumny to różnica będzie na pewno.

Co do całości zapytanie do bazy zawsze będzie dłuższe. PHP po plik szybciej sprawdzi coś niż po bazie...

Jeden powód to, to że zapytanie leci do bazy tam jest przetwarzane a następnie wraca do PHP i tam dalej obrabiane.

A w na katalogach od razu masz gotowe wyniki smile.gif

Ja osobiście staram się od obciążać bazę bo zrobić parsowanie pliku itp itd w niektórych przypadkach jest dużo wygodniejsze.

A co do czasów ogólnie to musiałbyś tam władować z 300 tys rekordów i plików do folderów żeby tak na prawdę sprawdzić czasy i wydajność... smile.gif
Kazaan
Cytat(Prezi2907 @ 4.08.2011, 14:22:16 ) *
Jak robisz zapytanie SELECT * FROM tabela WHERE id='' limit 1

To może być zły czas pomiaru. Zacznij od podania kolumn zamiast całościowego... Mimo że to 2-3 kolumny to różnica będzie na pewno.

A co do czasów ogólnie to musiałbyś tam władować z 300 tys rekordów i plików do folderów żeby tak na prawdę sprawdzić czasy i wydajność... smile.gif


Wykonalem teraz testy na zapytaniu SELECT id,file,hash FROM tabela WHERE id='' limit 1 i wyszlo prawie identycznie

co do ilosc rekordow - tak sie składa ze mam w tej tabeli ponad 500tys
buliq
A jakie czasy miałaby funkcja glob ?
nospor
W twojej aplikacji naprawde podczas jednego żądania x razy pytasz się baze o każde zdjęcie z osobna? No to masz źle napisaną aplikację smile.gif
Kazaan
Cytat(nospor @ 4.08.2011, 16:32:49 ) *
W twojej aplikacji naprawde podczas jednego żądania x razy pytasz się baze o każde zdjęcie z osobna? No to masz źle napisaną aplikację smile.gif



to jest test smile.gif aplikacja napisania jest dobrze - zapytanie robie przez mojego autorstwa klase ktora wedlog wczesniejszych testow dziala b.dobrze, to byl tylko test ktory mial na celu sprawdzic wydajnosc mysql i funkcji php. Traktuje to tylko jako ciekawostke bo i tak nie moge zaimplementowac opendir do swojego skryptu - zapomnialem o kolumnie vote - w ktorej zapisuje wyniki glosowania.
nospor
ale ten test jest do 4 liter wink.gif

Nie wykonuje się w petli setek tysięcy zapytań bo to jest totalnie nieoptymalne i bez testu wiadomo, jak to się skonczy smile.gif

Zrób teraz inny test.
Wstaw do bazy 100 tys rekordów a następnie wyszukaj z niej pliki zaczynające się na "test".

Teraz utwórz w katalogu 100 tys plików a następnie przy pomocy opendir wyszukaj pliki zaczynające się na "test".
Kazaan
Cytat(buliq @ 4.08.2011, 15:00:57 ) *
A jakie czasy miałaby funkcja glob ?



10 000 - czas wywołania php: 0.1951
100 000- czas wywołania php: 1.9520

wiec bije funkcje opendir na glowe smile.gif

Cytat(nospor @ 4.08.2011, 17:38:47 ) *
ale ten test jest do 4 liter wink.gif

Nie wykonuje się w petli setek tysięcy zapytań bo to jest totalnie nieoptymalne i bez testu wiadomo, jak to się skonczy smile.gif

Zrób teraz inny test.
Wstaw do bazy 100 tys rekordów a następnie wyszukaj z niej pliki zaczynające się na "test".

Teraz utwórz w katalogu 100 tys plików a następnie przy pomocy opendir wyszukaj pliki zaczynające się na "test".



jak bede mial chwile to zrobie, pogrubione to oczywiscie blad - chyba nie trzymasz tylu plikow w jednym katalogu ?biggrin.gif
jesli chodzi o katalogi to mam taka budowe _photo/3_pierwsze_cyfry_hash/hash - hash'a na dzien dobry znam bo jest zapisywany w tabeli galeria wiec ja musze tylko go otworzyc i sprawdzic zawartosc...
nospor
To była przenośnia. Liczyłem na inteligencję czytającego smile.gif
buliq
Jeszcze się z tym globem nie rozpędzaj smile.gif Pamiętaj że wykonuje ono też wyrażenie regularne więc trzeba je umiejętnie dobrać smile.gif
Zyx
Kazaan, czy uwzględniłeś, że Twoja lokalna instalacja MySQL-a może nie być skonfigurowana pod kątem wydajności? Czy uwzględniłeś współbieżny dostęp do danych? Jeśli nie, to Twoje wyniki mają się do tych z produkcyjnego serwera, jak pięść do nosa.

Prezi2907 -> jedyne, co da podanie jawnych nazw kolumn to zmniejszenie paczki danych, jaka leci z serwera do klienta. Po stronie serwera nie ma to absolutnie żadnego znaczenia z uwagi na sposób, w jaki działają bazy danych, gdzie dane pobierane są z dysku i składowane w pamięci w paczkach po X wierszy.
Kazaan
Cytat(Zyx @ 5.08.2011, 08:20:04 ) *
Kazaan, czy uwzględniłeś, że Twoja lokalna instalacja MySQL-a może nie być skonfigurowana pod kątem wydajności? Czy uwzględniłeś współbieżny dostęp do danych? Jeśli nie, to Twoje wyniki mają się do tych z produkcyjnego serwera, jak pięść do nosa.



test wykonywany był na dedyku.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.