Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] testy zapytań vs file_exists
Kazaan
post 4.08.2011, 13:16:03
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
Prezi2907
post 4.08.2011, 13:22:16
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 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
Go to the top of the page
+Quote Post
Kazaan
post 4.08.2011, 13:31:17
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ść... 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 4.08.2011, 14:00:57
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 ?


--------------------
KTOŚ TU PACZY???

Kompedium wiedzy
Go to the top of the page
+Quote Post
nospor
post 4.08.2011, 15:32:49
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ę smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Kazaan
post 4.08.2011, 16:32:26
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ę 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.
Go to the top of the page
+Quote Post
nospor
post 4.08.2011, 16:38:47
Post #7





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




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".


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Kazaan
post 4.08.2011, 16:43:37
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 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...

Ten post edytował Kazaan 4.08.2011, 16:45:49
Go to the top of the page
+Quote Post
nospor
post 4.08.2011, 16:52:22
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 smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
buliq
post 4.08.2011, 16:59:39
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 smile.gif Pamiętaj że wykonuje ono też wyrażenie regularne więc trzeba je umiejętnie dobrać smile.gif


--------------------
KTOŚ TU PACZY???

Kompedium wiedzy
Go to the top of the page
+Quote Post
Zyx
post 5.08.2011, 07:20:04
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


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
Go to the top of the page
+Quote Post
Kazaan
post 5.08.2011, 09:59:41
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
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 21:20