ugrás a tartalomhoz

Aszinkron php kérés

olomhuszar · 2013. Júl. 12. (P), 16.04
Heló!

Hogy lehetséges aszinkron php kérést futtatni?
Van egy MYSQL kérésem, ami körülbelül 10 másodpercet vesz igénybe átlagos esetben.
Egy temp táblába írja be az adatokat, hogy ne kelljen mindig az egész, lassú lekérést futtani.
Viszont hogyha változás állbe a lekérést taralmazó táblákban, az egész temp táblát újra kéne generálnom( ami ugye 10 másodperc).

Ennek a sikerességét nem szükséges ellenőriznem, tehát jó lenne, hogyha ezt a tábla létrehozást/kitöltést egy külön függvénybe, vagy fájlba rakhatnám, és csak el kellene indítani.

Cron használatán gondolkoztam, ami mindig ellenőrzi hogy szükség van-e a tábla frissítésére, de az túl nagy overheadet okozna, kell lennie egy egyszerűbb megoldásnak is.

Bármi javaslat?
 
2

Program execution functions

Hidvégi Gábor · 2013. Júl. 12. (P), 16.34
Program execution functions

Ha a temporális táblát INSERT-tel töltöd fel, érdemes előtte kikapcsolni az indexelést, és csak utólag bekapcsolni, csodákra képes sebességügyileg (mert ha be van kapcsolva, minden INSERT művelet után újraindexel).
3

És ha már itt tartunk, akkor

Joó Ádám · 2013. Júl. 12. (P), 16.36
És ha már itt tartunk, akkor ugye az egészet egy tranzakcióban, nem műveletenként commitolva…
1

A legelső dolog, az, hogy bár

Joó Ádám · 2013. Júl. 12. (P), 16.23
A legelső dolog, az, hogy bár lehet, hogy teljesen jogos, de az tíz másodperces művelet nagyon hosszúnak tűnik. Biztos, hogy jól csinálod?

Ha nem PHP-ról lenne szó, akkor a kézenfekvő megoldás az ilyen jellegű problémára háttérfolyamat írása lenne.

PHP környezetben azonban tényleg az lenne a legegyszerűbb, ha cronnal periodikusan hívnád a szkriptet. Miért gondolod, hogy nagy lenne az overhead? Csináld úgy az ellenőrzést, hogy a változások írásakor érvénytelennek jelölöd a gyorstárat, és így az ellenőrzés már csak egy triviális lekérdezést futtatna.

Ha ez nem működik, akkor elágaztathatod a kódot, hogy kvázi aszinkron végezd a munkát, illetve léteznek aszinkron adatbáziskérések is.
4

TRIGGER

Poetro · 2013. Júl. 12. (P), 16.38
Mi lenne ha írnál egy TRIGGER-t MySQL-ben, ami az adott táblák frissítése esetén megcsinálná helyetted MySQL-ben az egészet? Bár a 10 másodperc tényleg soknak tűnik, inkább valami optimalizációs problémát sejtet.
5

"processek" indításánál volt

Kubi · 2013. Júl. 15. (H), 17.55
"processek" indításánál volt ilyen problémám, erre legjobb meg oldás linux környezetben, ha van jogod exec parancsra (hostolt szerveren kérdéses)

$pid = exec("php run.php >> log.txt & echo $!");

a $pid az elindult folymat pid-jét tartalmazza, amivel később le tudod kérdezni, hogy fut e még, ha szükséges.