Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Operacje na bazie szybsze od operacji na plikach ?
Forum PHP.pl > Forum > PHP
starach
edit>
Sorry zapomniałem o podaniu źródła danych.
Zaraz się tym zajmę.
<edit
edit>
Dobra dodałem źródła danych i zmodyfikowałem trochę kod.
Teraz żeby to u was działało musicie dodać tabelę config zapełnić ją danymi zamieszczonymi poniżej zapisać plik config.inc.php i w obiekcie klasy PDO przekazać parametry połączenia z bazą danych.
Mam nadzieję że chociaż jednej osobie będzie chciało się to zrobić tongue.gif
<edit
Wykonanie poniższego kodu wskazuje, że operacje na bazie danych, są szybsze od operacji na plikach.
Mówiąc najprościej jestem w szoku. Testowałem to na swoim komputerze, gdzie baza znajduje się na tym samym kompie co serwer www. Wiem też że testy mogą być niepoprawne ze względu na to że na serwerach www najczęściej stosowane są inne systemy plików, a i bazy danych znajdują się na innych komputerach.
Mógłby ktoś poniższy kod wykonać w swoim środowisku ? Najbardziej ciekawi mnie wynik na linuksie z systemem plików Reiser 4 bądź FS. Pod kodem zamieszczam wyniki swoich testów, wykonanych w środowisku WindowsXP na systemie plików NTFS.
  1. <?php
  2. function db()
  3. {
  4. $start = getmicrotime();
  5. $content = '<table width="90%" border="1">'."n";
  6. $content .= '<tr><td colspan="3">Baza Danych</td></tr>'."n";
  7. $content .= '<tr><td>Nazwa zmiennej</td><td>Wartosci</td><td>Identyfikator opisu</td></tr>'."n";
  8. $db = PDO(ustawienia pdo);
  9. $result = $db->query('SELECT * FROM config');
  10. while($cfg = $result->fetch(PDO::FETCH_ASSOC))
  11. {
  12. $content .= '<tr><td>'.$cfg['c_name'].'</td><td>'.$cfg['c_val'].'</td><td>'.$cfg['l_id'].'</td></tr>'."n";
  13. }
  14. $content .= '</table>'."n";
  15. $end = getmicrotime();
  16. return $end - $start;
  17.  
  18. }
  19. function plik()
  20. {
  21. $start = getmicrotime();
  22. include('config.inc.php');
  23. $content = '<table width="90%" border="1">'."n";
  24. $content .= '<tr><td colspan="3">Plik</td></tr>'."n";
  25. $content .= '<tr><td>Nazwa zmiennej</td><td>Wartosci</td><td>Identyfikator opisu</td></tr>'."n";
  26. foreach($cfg as $key => $val) 
  27. {
  28. $content .= '<tr><td>'.$key.'</td><td>'.$val['val'].'</td><td>'.$val['desc'].'</td></tr>'."n";
  29. }
  30. $content .= '</table>'."n";
  31. $end = getmicrotime();
  32. return $end - $start;
  33. }
  34. $arr_db = array();
  35. $arr_plik = array();
  36. for($i=0; $i<5; $i++)
  37. {
  38. array_push($arr_db, db());
  39. array_push($arr_plik, plik());
  40. }
  41.  
  42. echo '<h1>Plik: '.array_sum($arr_plik)/count($arr_plik).'</h1>';
  43. echo '<h1>Baza: '.array_sum($arr_db)/count($arr_db).'</h1>';
  44. ?>

Źródło danych.
Baza plik config:
  1. INSERT INTO `config`(`c_id`,`c_name`,`c_val`,`l_id`) VALUES (1,'page_starting_url','url_news',NULL);
  2. INSERT INTO `config`(`c_id`,`c_name`,`c_val`,`l_id`) VALUES (2,'page_languages','pl,en,de',NULL);
  3. INSERT INTO `config`(`c_id`,`c_name`,`c_val`,`l_id`) VALUES (3,'company_name','NazwaFirmy',NULL);
  4. INSERT INTO `config`(`c_id`,`c_name`,`c_val`,`l_id`) VALUES (4,'title_company_name_display','2',NULL);
  5. INSERT INTO `config`(`c_id`,`c_name`,`c_val`,`l_id`) VALUES (5,'art_allow_comments','1',NULL);
  6. INSERT INTO `config`(`c_id`,`c_name`,`c_val`,`l_id`) VALUES (6,'art_date_format','H:i d.m',NULL);
  7. INSERT INTO `config`(`c_id`,`c_name`,`c_val`,`l_id`) VALUES (7,'art_display_author','1',NULL);
  8. INSERT INTO `config`(`c_id`,`c_name`,`c_val`,`l_id`) VALUES (8,'art_display_date','1',NULL);
  9. INSERT INTO `config`(`c_id`,`c_name`,`c_val`,`l_id`) VALUES (9,'art_display_images','1',NULL);
  10. INSERT INTO `config`(`c_id`,`c_name`,`c_val`,`l_id`) VALUES (10,'art_display_navbar','3',NULL);
  11. INSERT INTO `config`(`c_id`,`c_name`,`c_val`,`l_id`) VALUES (11,'art_display_title','1',NULL);
  12. INSERT INTO `config`(`c_id`,`c_name`,`c_val`,`l_id`) VALUES (12,'art_per_page','5',NULL);
  13. INSERT INTO `config`(`c_id`,`c_name`,`c_val`,`l_id`) VALUES (13,'news_allow_comments','1',NULL);
  14. INSERT INTO `config`(`c_id`,`c_name`,`c_val`,`l_id`) VALUES (14,'news_date_format','H:i d.m',NULL);
  15. INSERT INTO `config`(`c_id`,`c_name`,`c_val`,`l_id`) VALUES (15,'news_display_author','1',NULL);
  16. INSERT INTO `config`(`c_id`,`c_name`,`c_val`,`l_id`) VALUES (16,'news_display_date','1',NULL);
  17. INSERT INTO `config`(`c_id`,`c_name`,`c_val`,`l_id`) VALUES (17,'news_display_navbar','3',NULL);
  18. INSERT INTO `config`(`c_id`,`c_name`,`c_val`,`l_id`) VALUES (18,'news_display_title','1',NULL);
  19. INSERT INTO `config`(`c_id`,`c_name`,`c_val`,`l_id`) VALUES (19,'news_per_page','5',NULL);
  20. INSERT INTO `config`(`c_id`,`c_name`,`c_val`,`l_id`) VALUES (20,'page_default_language','en',NULL);
  21. INSERT INTO `config`(`c_id`,`c_name`,`c_val`,`l_id`) VALUES (21,'page_url_extension','.html',NULL);
  22. INSERT INTO `config`(`c_id`,`c_name`,`c_val`,`l_id`) VALUES (22,'news_count_comments','1',NULL);
  23. INSERT INTO `config`(`c_id`,`c_name`,`c_val`,`l_id`) VALUES (23,'news_maxlen_title','40',NULL);
  24. INSERT INTO `config`(`c_id`,`c_name`,`c_val`,`l_id`) VALUES (24,'title_glue','>',NULL);

Plik config.inc.php:
  1. <?php
  2. $cfg = array();
  3. $cfg['page_starting_url']['val'] = 'url_news';
  4. $cfg['page_starting_url']['desc'] = 0;
  5. $cfg['page_languages']['val'] = 'pl,en,de';
  6. $cfg['page_languages']['desc'] = 1;
  7. $cfg['company_name']['val'] = 'Nazwa Firmy';
  8. $cfg['company_name']['desc'] = 2;
  9. $cfg['title_company_name_display']['val'] = 2;
  10. $cfg['title_company_name_display']['desc'] = 3;
  11. $cfg['art_allow_comments']['val'] = 1;
  12. $cfg['art_allow_comments']['desc'] = 4;
  13. $cfg['art_date_format']['val'] = 'H:i d.m';
  14. $cfg['art_date_format']['desc'] = 5;
  15. $cfg['art_display_author']['val'] = 1;
  16. $cfg['art_display_author']['desc'] = 6;
  17. $cfg['art_display_date']['val'] = 1;
  18. $cfg['art_display_date']['desc'] = 7;
  19. $cfg['art_display_images']['val'] = 1;
  20. $cfg['art_display_images']['desc'] = 8;
  21. $cfg['art_display_navbar']['val'] = 3;
  22. $cfg['art_display_navbar']['desc'] = 9;
  23. $cfg['art_display_title']['val'] = 1;
  24. $cfg['art_display_title']['desc'] = 10;
  25. $cfg['art_per_page']['val'] = 5;
  26. $cfg['art_per_page']['desc'] = 11;
  27. $cfg['news_allow_comments']['val'] = 1;
  28. $cfg['news_allow_comments']['desc'] = 12;
  29. $cfg['news_date_format']['val'] = 'H:i d.m';
  30. $cfg['news_date_format']['desc'] = 13;
  31. $cfg['news_display_author']['val'] = 1;
  32. $cfg['news_display_author']['desc'] = 14;
  33. $cfg['news_display_date']['val'] = 1;
  34. $cfg['news_display_date']['desc'] = 15;
  35. $cfg['news_display_navbar']['val'] = 3;
  36. $cfg['news_display_navbar']['desc'] = 16;
  37. $cfg['news_display_title']['val'] = 1;
  38. $cfg['news_display_title']['desc'] = 17;
  39. $cfg['news_per_page']['val'] = 5;
  40. $cfg['news_per_page']['desc'] = 18;
  41. $cfg['page_default_language']['val'] = 'en';
  42. $cfg['page_default_language']['desc'] = 19;
  43. $cfg['page_url_extension']['val'] = '.html';
  44. $cfg['page_url_extension']['desc'] = 20;
  45. $cfg['news_count_comments']['val'] = 1;
  46. $cfg['news_count_comments']['desc'] = 21;
  47. $cfg['news_maxlen_title']['val'] = 40;
  48. $cfg['news_maxlen_title']['desc'] = 22;
  49. $cfg['title_glue']['val'] = '>';
  50. $cfg['title_glue']['desc'] = 23;
  51. ?>

Plik: 0.00150399208069
Baza: 0.000555562973022

Plik: 0.000808954238892
Baza: 0.000566864013672

Plik: 0.00078444480896
Baza: 0.000542831420898

Plik: 0.000677633285522
Baza: 0.000592088699341

Plik: 0.000688982009888
Baza: 0.000491285324097
nexis
Dziwi mnie Twoje zdziwienie. smile.gif

Baza danych przeważnie jest szybsza od pliku tekstowego!
starach
No dobra ale przecież tutaj mam już przygotowane dane, zapisane do pliku w postaci kodu PHP, które wystarczy użyć. Natomiast przy bazie to przecież muszę je pobrać -> obrobić -> wykorzystać. Najwyraźniej parser PHP mimo, że już doczekał się sędziwego wieku kiepsko sobie radzi z dołączaniem pliku.
domis86
Cytat(nexis @ 6.06.2007, 10:52:21 ) *
Baza danych przeważnie jest szybsza od pliku tekstowego!

Od includa moze tak, ale nie od zwyklych operacji na plikach.
A kiedy baza nie jest na tym samym kompie to na 100% jest duzo wolniejsza.


orglee:
wez se sprobuj tak:
  1. <?php
  2. file_put_contents($nazwa_pliku, serialize($cfg));
  3. ?>

czyli zrobic plik z serializowaną tablicą

i pozniej w funkcji plik() zamiast includa daj
  1. <?php
  2. $cfg = unserialize(file_get_contents($nazwa_pliku));
  3. ?>


i z tak zmodyfikowaną funkcja plik przetstuj jeszcze raz aarambo.gif
starach
Cytat
Plik: 0.00035343170166
Baza: 0.000481176376343

Plik: 0.000415802001953
Baza: 0.000499963760376

Plik: 0.000334882736206
Baza: 0.00046181678772

Plik: 0.00044994354248
Baza: 0.0005943775177

Serializacja pomogła ^^.
Jeśli idzie o łączenie z bazą danych to nie wliczałem tego tylko korzystałem przy pomiarze z singletonu.
Bez niego czas wykonania sięgał czasami 0.0025 czyli 5 razy więcej.
Dzięki domis86
domis86
nie zamaco i jak to mówią: niech moc będzie z wami aarambo.gif
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.