За последние 24 часа нас посетили 18340 программистов и 1634 робота. Сейчас ищут 1600 программистов ...

Периодический контроль таблицы базы данных

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

  1. fennick

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

    С нами с:
    8 сен 2010
    Сообщения:
    1
    Симпатии:
    0
    Всем доброго дня!
    Перед нами стоит задача запрограммировать аукцион. Нет, не типа всем известного Гагена, скорее упрощенная версия eBay, где выигрывает тот, кто сделал последнюю наибольшую ставку.
    Сам процесс разыгрывания лотов не составляет проблемы, а мгновенное (или близкое к тому) оповещение участников аукциона после завершения торгов (время аукциона вышло), кажется задачей посложнее.

    Тривиальное решение:
    1. циклически сканировать таблицу базы с аукционами, находя в ней завершенные (запись в поле end_time < текущее время)
    2. участникам торгов этого аукциона рассылать письма
    3. перемещать этот аукцион в архив / отмечать как проверенный, чтобы не разослать письма по второму разу.

    Сложности:
    1. время работы сценариев ограничено -> сценарий не будет работать вечно.
    2. даже если отредактировать php.ini для этого сценария так, чтобы он работал без ограничений, не вижу возможности проверить текущее состояние работы после его запуска.
    3. создать 1440 CronJobs для ежеминутного запуска сценария тоже не лучшая идея.

    Альтернативно можно выделить эту задачу в, скажем, программу на Java, которую вполне можно запустить в одной из консолей и контроллировать работу, но решение средствами PHP было бы тут более интересным.

    Может быть кто-то уже решал подобную задачу?
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    fennick
    пишите не на пхп =)
     
  3. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Делайте как php делает сборку муссора сессий. Думаете, как сессия автоматически удаляется через N секунд неиспользования? Параметр session.gc_divisor задает вероятность запуска сборщика муссора. Т.е. если он равен 1000, то вероятность 1:1000, что при конкретном запуске скрипта он запустится.
    Вот и вы так же, в зависимости от посещаемости меняйте его автоматически чтобы примерно раз в минуту запускался.
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    [vs]
    ты че, это ж аукцион. ставки можно будет ставить уже после завершения, а это ж пипец чо. так нельзя.
     
  5. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    igordata
    А при установки ставки проверять, не просрочен ли аукцион, и если просрочен, но не закрыт - закрывать и не принимать ставку.
     
  6. Апельсин

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

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Эх, хотел бы я аукцион сделать. Интересная задачка. Но борода еще не выросла и живота нет :)