Lepší návrh PHP/SQL pro získání dat a následný zápis?
Zdravím,
momentálně pracuji na projektu http://mujstream.cz/ - jedná se o databázi Českých a Slovenských online streamů.
Web je ve výstavbě a většina funkcí není aktivní, už teď ale narážím na problém, který musím nějak řešit.
V podstatě jde o to, že abych zjistil, zda je nějaký stream online a jaký počet diváků má, musím to pravidelně kontrolovat a následně zapisovat do databáze (zde každých 15 minut pomocí funkce CRON).
Bohužel jsem samouk a neznám jiný způsob než ten, který jsem sepsal.
Script je funkční, ale je příliš pomalý a za výsledek to má, že v pravidelných intervalech, kdy script právě probíhá se stránka nepřiměřeně dlouho načítá (lagne se, dokud se script nedokončí). Při cca 66 záznamech v databázi trvá tomuto scriptu provedení asi 3 minuty!
Nevím jak to lépe řešit, napadlo mě snad jen hodit script na jinou stránku (kterou nevyužívám) a tím vlastně eliminovat lagnutí této databáze (šlo by to?)
Script jako takový je zde
<?php
require('/dibi.php');
require('/cnf.php');
$stream = dibi::query('SELECT * FROM users')->fetchAll();
foreach($stream as $s){
$clientId ='*';
$channelName = $s['twitch'];
$json_array = json_decode(file_get_contents('https://api.twitch.tv/kraken/streams/'.strtolower($channelName).'?client_id='.$clientId), true);
if ($json_array['stream'] != NULL) {
$viewers = $json_array['stream']['viewers'];
$cron = array(
'online' => '1',
'viewers' => $viewers
);
dibi::query('UPDATE users SET', $cron, 'WHERE twitch=%s', $channelName);
} else {
$cron = array(
'online' => '0',
'viewers' => '0'
);
dibi::query('UPDATE users SET', $cron, 'WHERE twitch=%s', $channelName);
}
}
?>
Děkuji za případné rady, popř. ukázky jak to řešit.Pěkný den přeji!