Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] testy zapytań vs file_exists
Kazaan
post
Post #1





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 17.07.2008

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


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 ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
Prezi2907
post
Post #2





Grupa: Zarejestrowani
Postów: 107
Pomógł: 4
Dołączył: 11.08.2010
Skąd: Inowrocław

Ostrzeżenie: (10%)
X----


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 (IMG:style_emoticons/default/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ść... (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Kazaan
post
Post #3





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 17.07.2008

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


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ść... (IMG:style_emoticons/default/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
Go to the top of the page
+Quote Post
buliq
post
Post #4





Grupa: Zarejestrowani
Postów: 559
Pomógł: 93
Dołączył: 4.03.2008
Skąd: Olsztyn

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


A jakie czasy miałaby funkcja glob ?
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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ę (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Kazaan
post
Post #6





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 17.07.2008

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


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ę (IMG:style_emoticons/default/smile.gif)



to jest test (IMG:style_emoticons/default/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.
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




ale ten test jest do 4 liter (IMG:style_emoticons/default/wink.gif)

Nie wykonuje się w petli setek tysięcy zapytań bo to jest totalnie nieoptymalne i bez testu wiadomo, jak to się skonczy (IMG:style_emoticons/default/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".
Go to the top of the page
+Quote Post
Kazaan
post
Post #8





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 17.07.2008

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


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 (IMG:style_emoticons/default/smile.gif)

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

Nie wykonuje się w petli setek tysięcy zapytań bo to jest totalnie nieoptymalne i bez testu wiadomo, jak to się skonczy (IMG:style_emoticons/default/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 ?(IMG:style_emoticons/default/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...

Ten post edytował Kazaan 4.08.2011, 16:45:49
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




To była przenośnia. Liczyłem na inteligencję czytającego (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
buliq
post
Post #10





Grupa: Zarejestrowani
Postów: 559
Pomógł: 93
Dołączył: 4.03.2008
Skąd: Olsztyn

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


Jeszcze się z tym globem nie rozpędzaj (IMG:style_emoticons/default/smile.gif) Pamiętaj że wykonuje ono też wyrażenie regularne więc trzeba je umiejętnie dobrać (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Zyx
post
Post #11





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


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.

Ten post edytował Zyx 5.08.2011, 07:20:36
Go to the top of the page
+Quote Post
Kazaan
post
Post #12





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 17.07.2008

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


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.
Go to the top of the page
+Quote Post

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: 22.08.2025 - 18:15