php баннер очередь fifo - PullRequest
       36

php баннер очередь fifo

1 голос
/ 08 сентября 2011

Я только начинаю размещать объявление на своем веб-сайте, и я хотел бы иметь возможность дать 1000 просмотров для ad_a, 2000 для ad_b и позволить 10000 для ad_c.

Если бы за один раз была просмотрена только одна страница, было бы легко обновить БД и определить, сколько осталось просмотреть для каждого объявления, но к страницам сервалов можно получить доступ одновременно, и это усложняет задачу.

Я думал о том, чтобы написать очередь для управления ею, и запрос будет выполняться один за другим в базе данных. Я не уверен, является ли это лучшей идеей или нет, никогда не занимался этим типом кодирования, и я ищу линию поведения, логические шаги, какую таблицу создать в БД, если есть спецификация.

Большое спасибо за вашу помощь!

Ответы [ 3 ]

0 голосов
/ 08 сентября 2011

Тот факт, что одна страница может просматриваться много раз одновременно, не должен быть проблемой, поэтому LOCK TABLES предназначен для.

LOCK TABLES ads WRITE;
SELECT ad_id FROM ads WHERE ad_views_remaining > 0 LIMIT 1;
UPDATE ads SET ad_views_remaining = ad_views_remaining -1 WHERE ad_name = THAT_AD_ID_YOU_SELECTED_BEFORE;
UNLOCK TABLES;

Таким образом, никто не сможет прочитать таблицу, пока она не обновится. (этот пример для MySQL, я уверен, что большинство других РСУБД также поддерживают блокировки)

0 голосов
/ 19 сентября 2013

Что насчет ранда?

$r = rand(1, 13);
if ( $r == 1 )
    echo 'ad_a';
if ( $r > 1 and $r < 4 )
    echo 'ad_b';
if ( $r > 3 )
    echo 'ad_c';
0 голосов
/ 08 сентября 2011

Вы можете использовать Memcached для хранения текущего количества просмотров. Memcached быстрый и легкий, у вас не будет проблем с производительностью. Кроме того, что-то более сложное может состоять в том, чтобы, как вы говорите, иметь «очередь», и некоторые параллельные процессы обновляют ее, добавляя туда, какой баннер показывать, чтобы вы могли смешать их.

...