Помогите разобраться с алгоритмом!

Discussion in 'PHP' started by GiMli.GM, 3 Jan 2012.

  1. GiMli.GM

    GiMli.GM New Member

    Joined:
    20 Oct 2009
    Messages:
    10
    Likes Received:
    0
    Reputations:
    0
    В качестве примера буду использовать браузерную онлайн игру "травиан".
    В игре "травиан" игроки строят здания и получают за них очки. Сами здания строятся не сразу, а через определённый промежуток времени и очки добавляются после того как здание построенно!
    Пример: здание строится 30 минут. Игрок заходит в игру скрипт проверяет есть ли построенные здания и если есть добавляет за них очки. Но если он не зашёл скрипт ведь сам не запустится!
    Возможные решение:
    1)У всех игроков при запуске какого то скрипт происходит проверка на готовность зданий у всех игроков, но если нужно будет выполнить 1000 апдэйтов(мускул) это станет проблемой?
    Собственно мой вопрос :) : Как им добавляются очки если игрок не зашёл в игру?
    Какие технологии используются для этого(чисто php или крон?).
    Кто понял суть вопроса? :D
     
  2. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    GiMli.GM как раз запуск апдейта по крону позволяет уменьшить нагрузку на БД. В принципе можно обойтись двумя-тремя запросами обновляющими большое количество записей одновременно.

    Ситуацию стоит рассматривать с такой точки зрения:

    1) вам в любом случае надо делать начисления для всех игроков независимо от того заходят они в игру, или нет. Хотя бы для того, чтобы отображать актуальный рейтинг игроков.

    2) При обновлении данных на доступе к ним у вас в худшем случае будет N (по числу игроков одновременно обратившихся к странице) конкурирующих запросов на обновление базы.

    3) Либо у вас будет раз в некоторое время делаться два три запроса, достаточно сложных, но которые СУБД хорошо обрабатывает
     
    _________________________