![]() |
![]() ![]() |
![]() |
![]()
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 ? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 107 Pomógł: 4 Dołączył: 11.08.2010 Skąd: Inowrocław Ostrzeżenie: (10%) ![]() ![]() |
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 ![]() 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ść... ![]() |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 43 Pomógł: 0 Dołączył: 17.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
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ść... ![]() 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 |
|
|
![]()
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 ?
-------------------- |
|
|
![]()
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ę
![]() -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 43 Pomógł: 0 Dołączył: 17.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
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ę ![]() to jest test ![]() |
|
|
![]()
Post
#7
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
ale ten test jest do 4 liter
![]() Nie wykonuje się w petli setek tysięcy zapytań bo to jest totalnie nieoptymalne i bez testu wiadomo, jak to się skonczy ![]() 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 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 43 Pomógł: 0 Dołączył: 17.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
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 ![]() ale ten test jest do 4 liter ![]() Nie wykonuje się w petli setek tysięcy zapytań bo to jest totalnie nieoptymalne i bez testu wiadomo, jak to się skonczy ![]() 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 ? ![]() 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 |
|
|
![]()
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
![]() -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
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
![]() ![]() -------------------- |
|
|
![]()
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 |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 43 Pomógł: 0 Dołączył: 17.07.2008 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. test wykonywany był na dedyku. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 24.07.2025 - 21:20 |