Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem 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!

Odpověď na otázku

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny