Zadejte hledaný výraz...
Jakub Glos
Webtrh.cz
Vývoj webových stránek na WordPressu a proklientský přístup pro freelancery
Třídenní infromacemi nabitý prezenční + online kurz v Praze od Webtrhu pouze za 2 871 Kč
Více informací

Kde vzít lepší výpočetní výkon pro PHP?

milanec
verified
rating uzivatele
15. 7. 2016 16:49:43
Dobrý den,
potřeboval bych zpracovávat větší XML soubory (velikost řádově 200-500 MB), a to několikrát denně. Zpracování zahrnuje jednoduchý dotaz do databáze SELECT * FROM xml WHERE id = ? a podle toho případně INSERT INTO ..., nic složitého. Problém je, že pokud takový script spustím na svém počítači (RAM 6 GB, procesor i7), tak trvá hodně dlouho, než se takový soubor celý zpracuje, že bych nestihl zpracovávat ho 3x denně a už vůbec ne zpracovávat více takových souborů současně.
Rychlost podle logu se nezdá být tak hrozná (cca 1 položka za vteřinu), jenže když vezmu v potaz, že položek je 65 tis., znamená to dlouhých 24 hodin, což je neúnosné:
2016-07-01 22:36:00 - 84 - insert
2016-07-01 22:36:01 - 85 - insert
2016-07-01 22:36:04 - 86 - insert
2016-07-01 22:36:05 - 87 - insert
2016-07-01 22:36:06 - 88 - insert
2016-07-01 22:36:07 - 89 - insert
2016-07-01 22:36:08 - 90 - insert
2016-07-01 22:36:09 - 91 - insert
2016-07-01 22:36:10 - 92 - insert
2016-07-01 22:36:11 - 93 - insert
2016-07-01 22:36:12 - 94 - insert
2016-07-01 22:36:13 - 95 - insert
2016-07-01 22:36:15 - 96 - insert
2016-07-01 22:36:16 - 97 - insert
2016-07-01 22:36:16 - 98 - insert
V PHP soubor procházím přes SimpleXMLElement - nevím, jestli se dá v tomhle ohledu uspořit nějaký čas volbou jiné technologie. Navíc čím více položek v databázi mám, tím déle ty dotazy do databáze trvají. Každopádně já ten čas potřebuji snížit o dost razantněji, ideálně aby z 24 hodin bylo max. několik desítek minut. Je možné toho dosáhnout? Co doporučíte? Klasický webhosting asi vyhovovat nebude kvůli omezenému max_exec_time. VPS? (jaké? jaká varianta by např. dostačovala u Wedosových VPS?) Koupit domů nějaký lepší PC, který by byl jen pro tyto účely?
Díky za rady.
15. 7. 2016 16:49:43
https://webtrh.cz/diskuse/kde-vzit-lepsi-vypocetni-vykon-pro-php/#reply1211124
hm
verified
rating uzivatele
(20 hodnocení)
15. 7. 2016 17:00:15
zmer si jetsli tak dlouho trvaji dotazy nebo prochazeni toho XML, respektive co z toho zabira jaky cas a podle toho se rozhodni co zmenit, ja navrhuju co nejvic veci narvat do jeidneho dotazu, to ze u kazde polozky delas select a insert musi byt? nemuzes to delat treba kazdou stou polozku dohromady? tedy zjistit si selectem o 100 polozkahc info a podle toho pak zavolat jediny insert co ale bude delany an vlozeni 100 radek? Podle me prave ten INSERT trva ze vseho nejdele a bylo by vhodne nevolat insert na kazdy radek ale davkove na 100, nebo i 1000 polozek naraz
15. 7. 2016 17:00:15
https://webtrh.cz/diskuse/kde-vzit-lepsi-vypocetni-vykon-pro-php/#reply1211123
Musi to byt v PHP ? Nemuzes si proste napsat treba script v Pythonu, ktery podporuje multithreading ?
15. 7. 2016 17:10:15
https://webtrh.cz/diskuse/kde-vzit-lepsi-vypocetni-vykon-pro-php/#reply1211122
phusar
verified
rating uzivatele
15. 7. 2016 17:22:52
Najskor zacni tym, ze si zmerias kde mas bottleneck. Ak je to databaza, tak skus zvazit nejaky iny typ ulozista, idealne nejake NoSQL, malo by to byt o dost rychlejsie.
Zvaz aj to co pisal @jbezdicek, idealne by bolo, keby si to vedel spracovat vo viac nez jednom vlakne naraz. Napriklad Java a Python su dobre volby.
15. 7. 2016 17:22:52
https://webtrh.cz/diskuse/kde-vzit-lepsi-vypocetni-vykon-pro-php/#reply1211121
hm
verified
rating uzivatele
(20 hodnocení)
15. 7. 2016 17:40:53
Napsal jbezdicek;1309587
Musi to byt v PHP ? Nemuzes si proste napsat treba script v Pythonu, ktery podporuje multithreading ?
Php taky podporuje multithreading.. Ale tohle vypadá spis na problem s databazi a milionem dotazu na ni a ne na problem s parsovanim xml
15. 7. 2016 17:40:53
https://webtrh.cz/diskuse/kde-vzit-lepsi-vypocetni-vykon-pro-php/#reply1211120
Petr Soukup
verified
rating uzivatele
(5 hodnocení)
15. 7. 2016 17:41:47
Předně se vykašlete na SimpleXML - je šikovný na jednoduchou práci s XML, ale zcela nevhodný, pokud se musí řešit výkon nebo zpracovávat velké soubory. Na to je určený spíš třeba XMLReader: https://secure.php.net/manual/en/book.xmlreader.php
Určitě také budete chtít upgradovat na PHP7, pokud ještě nejste. U tohoto typu úkonů jen přechod z PHP5 na PHP7 může hravě srazit čas na třetinu.
Rozhodně bych neviděl jako problém přímo PHP. V jednom projektu například máme instance s dvěma jádry a 4GB RAM a to zvládne zpracovat XML (projít, vyčistit, uložit do databáze) s 300 000 položkami za zhruba 3-4s.
15. 7. 2016 17:41:47
https://webtrh.cz/diskuse/kde-vzit-lepsi-vypocetni-vykon-pro-php/#reply1211119
Petr Soukup
verified
rating uzivatele
(5 hodnocení)
15. 7. 2016 17:44:28
Ještě jsem zapomněl na tu databázovou část :)
Inserty určitě spojovat dohromady a posílat v dávkách. Pokud to je u tohot typu dat možné, tak může být dobrý trik použít SQL LOAD FILE. To je s přehledem nejrychlejší způsob, jak nalít data do databáze - používá to třeba Piwik, když importuje statisíce záznamů o pohybu uživatelů na webu. Jsou s tím ale spojeny kompromisy, takže není vhodné na všechno.
Taky prověřte indexy. Každý insert způsobí jejich přepočítávání. Pokud jich tam je hodně, může to být problém, ale lze to různě řešit.
15. 7. 2016 17:44:28
https://webtrh.cz/diskuse/kde-vzit-lepsi-vypocetni-vykon-pro-php/#reply1211118
TomasX
verified
rating uzivatele
(4 hodnocení)
15. 7. 2016 17:50:09
optimalizuj, přidej na db indexy, už jsi na hranici, kdy se z mého pohledu nevyplatí přidávat výkon.
Lze to napsat optimálně i v php, zpracovávali jsme i 1GB xml importy do presty a její šílené struktury.
Klidně si z toho udělej tady na webtrhu zakázku, odhaduji cenu na cca 2 - 10 tis.
Pokud sem hodíš tvůj skript, obratem ti řekneme, jestli tam nemáš vyloženou hovadinu, která to brzdí. Pokud ho sem nechceš dávat, pošli mi to klidně do soukromé zprávy, často tam bývá maličkost. Pokud tam ale nechceš kód sdílet, hoď to třeba do zakázek.
K otázce, můžeš si vzít dedikovaný server od OVH soyourstart.com s 32 GB ram za litr měsíčně nebo si můžeš třeba třikrát denně na hodinu pronajmout "drtič asfaltu" od Amazonu. Investice do přepsání se ti za pár měsíců ale vrátí...
15. 7. 2016 17:50:09
https://webtrh.cz/diskuse/kde-vzit-lepsi-vypocetni-vykon-pro-php/#reply1211117
Jan Stejskal
verified
rating uzivatele
(7 hodnocení)
15. 7. 2016 18:19:06
Otestoval jsem si to, vytvořil jsem XML soubor o velikosti 320MB a nechal otevřít a zpracovat v PHP 5. Celý soubor se zpracoval za 570 vteřin, zpracováno bylo 1704000 položek. Použil jsem https://github.com/prewk/xml-string-streamer Pokud vám 65000 položek trvá celý den, pravděpodobně děláte něco nevhodným způsobem.
15. 7. 2016 18:19:06
https://webtrh.cz/diskuse/kde-vzit-lepsi-vypocetni-vykon-pro-php/#reply1211116
Martin
verified
rating uzivatele
(62 hodnocení)
15. 7. 2016 21:40:56
Jedna položka za sekundu znamená, že to máš opravdu špatně. Když mám správně indexy a zpracovávám to po dávkách jak psal Aleš Jiříček, dostanu se na slušném VPSku u jednoduchého XML a jednoduché DB i na 1000 -1500 položek na sekundu. Teď jsem zrovna dělal jedno docela složitější XML a i když jsem to všechno ukládal přes Doctrinu s dost vazbami, pohybuju se mezi 200-300 položkami za sekundu.
15. 7. 2016 21:40:56
https://webtrh.cz/diskuse/kde-vzit-lepsi-vypocetni-vykon-pro-php/#reply1211115
milanec
verified
rating uzivatele
15. 7. 2016 22:12:37
Přátelé, moc děkuji za všechny rady. Prozatím jsem zkusil následující:
- přechod na PHP7
- místo SimpleXMLElement jsem použil https://github.com/prewk/xml-string-streamer
- zrušil jsem select u každé položky a dal jeden select v rámci celého scriptu, výsledky zpracuji do pole podle potřeby a pak z něj jen čtu
- dávkový insert po 100 položkách
Rázem se z 24 hodin stala cca minuta, a to je prostor ještě pro pár dalších optimalizací. To je úžasné, moc díky ještě jednou.
15. 7. 2016 22:12:37
https://webtrh.cz/diskuse/kde-vzit-lepsi-vypocetni-vykon-pro-php/#reply1211114
Michal Novák
verified
rating uzivatele
(10 hodnocení)
15. 7. 2016 22:19:50
1s je opravdu hodně dlouho, podle mě to bude nešikovně naspaný skript
15. 7. 2016 22:19:50
https://webtrh.cz/diskuse/kde-vzit-lepsi-vypocetni-vykon-pro-php/#reply1211113
hm
verified
rating uzivatele
(20 hodnocení)
15. 7. 2016 22:27:20
parada, rad vidim ze to pomohlo :)
15. 7. 2016 22:27:20
https://webtrh.cz/diskuse/kde-vzit-lepsi-vypocetni-vykon-pro-php/#reply1211112
Pro odpověď se přihlašte.
Přihlásit