За последние 24 часа нас посетили 22230 программистов и 1157 роботов. Сейчас ищут 828 программистов ...

Сетевой паучёк

Тема в разделе "Решения, алгоритмы", создана пользователем Roker, 19 янв 2009.

  1. Roker

    Roker Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    54
    Симпатии:
    0
    Есть табличка с urlами
    Нужно бродить по этим URL и сохранять содержимое ответов
    Есть такой скрипт
    PHP:
    1.  
    2. <?php
    3. $result = mysql_query("SELECT hostID, urlID, url FROM urls timestamp where level<='{$conf['max_level']}' and level>='{$conf['min_level']}' and timestamp<='{$conf['max_timestamp']}' ORDER BY timestamp LIMIT 1");
    4.  
    5. $mysql_ans = mysql_fetch_assoc($result);
    6. mysql_query("UPDATE urls SET timestamp=CURRENT_TIMESTAMP WHERE urlID = '{$mysql_ans['urlID']}' LIMIT 1");
    7.  
    8. //тут еще много кода который скачивает и сохраняет
    9. ?>
    10.  
    Скрипт запускается вот так
    HTML:
    1. <iframe src="index.php?rand=1" border="1" onLoad="this.src+=Math.round(Math.random()*10)" width="32%" height="400"></iframe>
    2. <iframe src="index.php?rand=2" border="1" onLoad="this.src+=Math.round(Math.random()*10)" width="32%" height="400"></iframe>
    3. <iframe src="index.php?rand=3" border="1" onLoad="this.src+=Math.round(Math.random()*10)" width="32%" height="400"></iframe>
    И часто получается что он запускается одновременно и начинает сканировать один и тотже urlID
     
  2. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    Делаешь в табличке еще одно поле status и для каждого urla вначале статус ready, потом когда отдаешь его на сканирование - processing, и когда все готово - done!
    и каждый раз отдаешь только со статусом ready

    А для чего тебе все это?
     
  3. Roker

    Roker Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    54
    Симпатии:
    0
    В моем первом алгоритме была идея что после старта скрипта данный url перемещается в конец списка

    Рассмотрим ваш алгоритм.
    Ну и оба скипта пошли выполнятся далее.
    И чем это будет лучше моего первого алгоритма.

    Сегодня проснулся и лежа думал как это все сделать. Идея похожа.
    Рассмотрим мой новый алгоритм.
    цитата из мануала php
     
  4. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    замечу, как реализовано у меня на кластере, где обработка массивов данных идет с многих нод.

    0. в таблицу постоянно валятся записи. много.

    1. нода помечет необработанные записи для себя.

    UPDATE table SET nodeid = NODEID WHERE nodeid = 0

    2. нода выбирает свои записи и их обрабатывает
    SELECT * FROM table WHERE nodeid = NODEID
    UPDATE SET data = бла-бла-бла, status = 1 WHERE id = RECORDID

    3. скрипт статистики выдирет записи со сттусом 1 и удаляет их, но это ужи лирика.

    прикол в том, что неограниченное кол-во нод/скриптов может сразу работать с записями и их паралельно обрабатывать.