Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Optymalizacja skryptu PHP
zbysiusp
post
Post #1





Grupa: Zarejestrowani
Postów: 65
Pomógł: 0
Dołączył: 11.07.2009

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


Witam!

Na potrzeby wykresu Highcharts napisałem skrypt PHP, który pobiera dane z bazy MySQL i koduje je do formatu JSON (3 serie danych). Skrypt działa poprawnie, ale czas jego wykonania i pobrania wyniku do przeglądarki jest bardzo długi ok. 10 sekund co stwarza problemy przy wywoływaniu go co 1 minutę wraz z innymi skryptami - zawieszenie przeglądarki po ok. 1 godzinie. W przykładzie poniżej ograniczyłem wynik do 5 minut, ale w rzeczywistości pobierane są dane z miesiąca (43 tys. rekordów). Proszę o radę w jaki sposób zoptymalizować ten skrypt?

Oczekiwany format kodowania:
Wynik działania skrypu

Kod:
  1. $sth = mysql_query("SELECT czas_unix, wind_speed_average, windgust, wind_direction_average FROM tab_czujniki_2 WHERE czas_datetime >= '$minus_data' ORDER BY czas_datetime ASC") or die('Błąd zapytania');
  2.  
  3. $rows = array();
  4. $rows['name'] = 'wind_speed_average';
  5. $rows1 = array();
  6. $rows1['name'] = 'windgust';
  7. $rows2 = array();
  8. $rows2['name'] = 'wind_direction_average';
  9.  
  10. while($r = mysql_fetch_array($sth)){
  11. $rows['data'][] = array(1000*($r['czas_unix']),$r['wind_speed_average']);
  12. $rows1['data'][] = array(1000*($r['czas_unix']), $r['windgust']);
  13. $rows2['data'][] = array(1000*($r['czas_unix']), $r['wind_direction_average']);
  14. }
  15.  
  16. $result = array();
  17. array_push($result,$rows);
  18. array_push($result,$rows1);
  19. array_push($result,$rows2);
  20. print json_encode($result, JSON_NUMERIC_CHECK)


Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
daro0
post
Post #2





Grupa: Zarejestrowani
Postów: 88
Pomógł: 12
Dołączył: 17.09.2014
Skąd: Krasnystaw

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


A zdajesz sobie sprawę z tego co w takim przypadku, kiedy np. pobierasz te 40k rekordów wypluwa profiler?

https://s16.postimg.org/nl90e5alh/profiler_1.png
https://s1.postimg.org/892sgpz7z/profiler_2.png

Test na 800k rekordów z losowymi danymi w bazie, profiler frameworka Kohana 3.3. Oprócz zapytań z bazy dałem benchmark na tych operacjach na array w PHP oraz na konwesji do JSON. W tym przypadku ponad 1s zajmuje pobranie danych z bazy i ponad 1s same operacje w PHP i konwersja do JSON. A i jeszcze zanim te dane zostaną wyplute na ekran to też trochę czasu minie.

Daje to wiele do myślenia. To dlatego przy listowaniu danych stosuje się paginację albo wczytuje tylko pewną ilość danych a przy scrollowaniu strony w dół AJAX-em wczytuje kolejne partie danych. Albo w ogóle pewne dane wczytuje AJAX-em z jakimś tam loaderem który każe czekać a nie coś takiego, że zanim się w ogóle strona wyświetli to trzeba czekać nie wiadomo ile.

I nic tu nie dało założenie tego indeksu.
Go to the top of the page
+Quote Post

Posty w temacie
- zbysiusp   Optymalizacja skryptu PHP   13.03.2017, 14:20:19
- - daro0   Masz założony indeks na pole czas_datetime?   13.03.2017, 17:20:56
- - zbysiusp   Cytat(daro0 @ 13.03.2017, 17:20:56 ) ...   13.03.2017, 17:23:58
- - qbson69   Problemem chyba nie jest zapytanie, ale duża ilość...   13.03.2017, 17:41:22
- - zbysiusp   Cytat(qbson69 @ 13.03.2017, 17:41:22 ...   13.03.2017, 17:55:09
- - viking   Sprawdź w jakimś narzędziu typu heidisql ile samo ...   13.03.2017, 18:54:49
- - zbysiusp   Cytat(viking @ 13.03.2017, 18:54:49 )...   13.03.2017, 19:56:57
- - phpion   Też obstawiałbym, że problemem jest ilość zwracany...   13.03.2017, 22:57:46
- - zbysiusp   Cytat(phpion @ 13.03.2017, 22:57:46 )...   13.03.2017, 23:21:09
- - phpion   1. Explain select czas_unix... i wklej tutaj wynik...   14.03.2017, 07:11:02
- - zbysiusp   Cytat(phpion @ 14.03.2017, 07:11:02 )...   14.03.2017, 07:51:16
- - daro0   Jaki to jest problem napisać sobie prostą klasę pr...   14.03.2017, 07:57:23
- - phpion   Tutaj widać, że zapytanie nie korzysta z żadnego i...   14.03.2017, 08:28:25
- - Pyton_000   Bo z czego miałby brać indeks skoro nie ma warunku...   14.03.2017, 08:53:35
- - zbysiusp   Cytat(phpion @ 14.03.2017, 08:28:25 )...   14.03.2017, 09:32:48
- - Lion   Jeśli masz już indeks na kolumnie z czasem, a zapy...   14.03.2017, 09:37:00
- - zbysiusp   Założyłem indeks na kolumnie 'czas_datetime...   14.03.2017, 19:57:25
- - daro0   A zdajesz sobie sprawę z tego co w takim przypadku...   15.03.2017, 11:40:52
- - zbysiusp   Witam. Bardzo dziękuję Wszystkim za rady, sugesti...   17.03.2017, 15:44:19
- - viking   Robisz tutaj 3 klucze stałe więc możesz od razu do...   17.03.2017, 16:31:37
- - zbysiusp   @viking Dziękuję bardzo. Działa dobrze. Pozdrawia...   17.03.2017, 18:04:34


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: 9.10.2025 - 04:12