Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Co jest szybsze?
!*!
post
Post #1





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Pytanie może dość banalne ale, mam ok 20 000 rekorodów każdy z nich ma folder, co jest szybsze w odczycie danych? Sprawdzenie rekordu w mysql czy sprawdzenie czy folder istnieje? Np. w przypadku istnienia folderu dopiero później łączę się z bazą w celu odczytu innych danych.

Ten post edytował !*! 7.10.2008, 10:54:42


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
nospor
post
Post #2





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




Cytat
mam
Skoro masz to sprawdź i podziel się z nami wynikami swojego testu 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
elpaw
post
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 1
Dołączył: 2.10.2008
Skąd: wertykalne

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


W większości przypadków baza będzie szybsza.
Go to the top of the page
+Quote Post
!*!
post
Post #4





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


  1. <?php
  2. unction gen_www()
  3. {
  4.    $czas = microtime( );
  5.    $czas = explode( " ", $czas );
  6.    return $czas[1] + $czas[0];
  7. }
  8.  
  9. $start = gen_www();
  10.  
  11. //kod który sprawdza
  12.  
  13. $stop = gen_www();
  14. $cos = substr( $stop - $start, 0, 7 );
  15. echo "Czas generowania strony {$cos}s";
  16. ?>


Kod do sprawdzenia dla folderu:

  1. <?php
  2. $folder="dolny";
  3. if(is_dir(''.$folder.'')) {
  4.   echo 'Istnieje <br />';
  5. }else{
  6.  echo 'Nie istnieje<br />';
  7. }
  8. ?>


Kod dla bazy:

  1. <?php
  2. $login = 'dolny';
  3. if ($login){
  4.  
  5.  
  6. $sprawdzlogin = mysql_query("SELECT login FROM userdata WHERE login = '$login' LIMIT 1 ");
  7. $wyniksprawdz = mysql_num_rows($sprawdzlogin);
  8. }
  9.  
  10. if ($wyniksprawdz == 1) {$errorwys=1;echo "istnieje";}
  11. ?>


Wynik:

Kod
Czas dla folderów:

0.00024s
0.00029s


Kod
Czas dla bazy:

0.00037s
0.00034s


Rekordów i folderów było zaledwie 50.

nospor - jestem ciekaw czy ktoś już to sprawdzał, ma jakieś doświadczenia z tym związane... Co jest bardziej wydajne przy większej liczbie itp. są jakies rozwiązania? Jeśli tak to jakie?

Ten post edytował !*! 7.10.2008, 16:46:43


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
drPayton
post
Post #5





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

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


Info: 20000 folderów i tyleż odpowiadających im rekordów w bazie danych.
Test: Sprawdzenie istnienia folderu o określonej nazwie.
Kod testowy:
  1. <?php
  2. mysql_connect('****', '****', '****');
  3.  
  4. echo '<br />Sprawdzenie istnienia folderu o określonej nazwie:';
  5.  
  6. $start = microtime();
  7. mysql_query("SELECT id FROM test_big_table WHERE folder = 'folder_12345'");
  8. echo '<br /><br />Baza danych: ' . (microtime() - $start) . ' sekund(y)';
  9.  
  10. $start2 = microtime();
  11. is_dir('folders/folder_12345');
  12. echo '<br />System plików: ' . (microtime() - $start2) . ' sekund(y)';
  13. ?>


Wyniki:

1. Brak indeksów w bazie:
Kod
Baza danych: 0.016986 sekund(y)
System plików: 0.001505 sekund(y)

Kod
Baza danych: 0.01789 sekund(y)
System plików: 0.001337 sekund(y)

Kod
Baza danych: 0.016653 sekund(y)
System plików: 0.00139 sekund(y)

Kod
Baza danych: 0.017132 sekund(y)
System plików: 0.001288 sekund(y)

Kod
Baza danych: 0.01752 sekund(y)
System plików: 0.00128 sekund(y)


2. Założony indeks na polu zawierającym nazwę folderu:
Kod
Baza danych: 0.000307 sekund(y)
System plików: 0.001344 sekund(y)

Kod
Baza danych: 0.000303 sekund(y)
System plików: 0.001227 sekund(y)

Kod
Baza danych: 0.000392 sekund(y)
System plików: 0.001147 sekund(y)

Kod
Baza danych: 0.000427 sekund(y)
System plików: 0.001406 sekund(y)

Kod
Baza danych: 0.000359 sekund(y)
System plików: 0.001149 sekund(y)



Wnioski - zakładając odpowiedni indeks baza danych jest o wiele szybsza smile.gif
Go to the top of the page
+Quote Post
!*!
post
Post #6





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Niby ino kurde jo, ale... Indeks ma to do siebie że jeśli np. mam rekord i folder "domek", to po np. wyszukaniu "dom" wyświetli się "domek" bo on został zindeksowany.


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
drPayton
post
Post #7





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

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


Eeee?

(...) LIKE '%dom%' (...)

wyświetli również 'domek', ale

(...) LIKE 'dom' (...)

tylko 'dom'

Albo nie rozumiem w czym problem...
Go to the top of the page
+Quote Post
!*!
post
Post #8





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


LIKE nie jest dobrym rozwiązaniem... albo inaczej, jest dobry pod waruniem że mamy bardzo mało rekordów. Normalnie używam [czyliw w przypadku znacznej większej liczby rekordów]:

Kod
SELECT willa FROM data WHERE MATCH(willa) against ('$wynik*' IN BOOLEAN MODE)


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
phpion
post
Post #9





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Ja również nie rozumiem. Najpierw chcesz sprawdzić czy folder o konkretnej nazwie istnieje, a potem wchodzisz w wyszukiwanie pełnotekstowe. Stwórz zwykły indeks i przeszukuj bazę poprzez zwykłe porównanie (pole = 'dom').
Go to the top of the page
+Quote Post
Pilsener
post
Post #10





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Dostęp do dysku jest wyraźnie szybszy niż do bazy - ale tylko dostęp. Im większe obciążenie serwera i większa liczba danych tym większa przewaga bazy - powyżej pewnej ilości praktycznie nie da się już tego robić na plikach/folderach etc.
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 Aktualny czas: 21.08.2025 - 19:44