Форумы PHP - как справиться с непрочитанными обсуждениями / темы / сообщения

Я знаю, что этот вопрос задали здесь пару раз, но ни один из ответов не понравился мне. Это вызвано тем, что почти все они включают огромное чтение / процесс записи, связанный с базой данных, которой я хотел бы избежать по всей стоимости.

О непрочитанных обсуждениях / темы / сообщения, существует много для размышления. Я не знаю, как системам форума нравятся MyBB, vBulletin, Плата питания Invision, Ваниль, phpBB, и т.д., справьтесь с той проблемой, таким образом, я хотел бы считать от Вас парней Ваш опыт с этим. Я знаю, что использование таблицы базы данных только для этого является самым простым путем, но это включило бы огромное чтение / запись, когда у сообщества есть более чем 10 000 участников и 1 000 новых тем каждый месяц. Это твердо, но должен быть способ избежать перегрузки сервера.

Так, что Вы находите как лучшие практики для этой проблемы, а также как другие системы форума справляются с нею?

28
задан Peter Mortensen 5 December 2010 в 21:24
поделиться

3 ответа

Вариантов не так много.

  1. отметить каждую цепочку читателей каждым пользователем.

    • Недостатки: много строк на очень активных форумах.
    • Преимущества: Каждый пользователь знает, прочитал он сообщение или нет.
  2. отмечать каждую непрочитанную цепочку каждого пользователя.

    • Недостатки: много места с «непрочитанными» строками при бездействии большого количества пользователей.
    • Решения: добавить метку времени жизни и удалить старые записи с помощью cron.
    • Преимущества: каждый пользователь знает, что с помощью сообщения читать или нет.
  3. используют временные метки, чтобы определить, показывать его как непрочитанное или нет.

    • Недостатки: пользователи не знают, с какими реальными непрочитанными потоками, метки показывают только «новые заголовки» с момента последнего входа в систему
    • Преимущество: экономия места

Другой альтернативой является смешивание решений, то есть ,

1 и 3) отображать поток как «непрочитанный», если он не старше X дней и для пользователя нет строки, отмеченной как прочитанная. «Прочитанные» строки могут быть удалены, когда они старше на X дней, без какого-либо влияния.

Преимущества

  • Меньший интервал используется для определения непрочитанных потоков

Недостатки

  • создают cron, который поддерживает чистоту системы
  • Пользователи не знают, читают ли они потоки старше x дней.

Преимущества

  • Каждый пользователь знает, какие «новые сообщения» прочитал или нет.
15
ответ дан 28 November 2019 в 03:47
поделиться

. Практически любой форум, о котором я знаю, будет используйте какую-то эталонную метку времени, чтобы определить, следует ли считать цепочку / сообщение «непрочитанными» или нет. Эта временная метка обычно представляет собой дату / время последнего действия, которое вы выполнили при предыдущем посещении форума.

Так что оставьте т.е. отметка времени previous_last_action и last_action в вашей пользовательской таблице, last_action обновляется при каждом действии пользователя, столбец previous_last_action один раз устанавливается на last_action при входе в систему (или при создании нового сеанса - если у вас есть функция «запомнить меня»). Чтобы определить, является ли цепочка / сообщение непрочитанной, вы должны сравнить эту метку времени создания (или обновления) цепочки / сообщения со значением в previous_last_action для пользователя, который в данный момент вошел в систему.

1
ответ дан 28 November 2019 в 03:47
поделиться

Почему вас это беспокоит?

Я не вижу проблем с каким-либо вводом-выводом для получения непрочитанных потоков. Это не обязательно должно быть вживую. 15-минутная задержка, основанная на значении кеша, подойдет.

Итак, для непрочитанных потоков вы просто

Псевдокод ..

$result = SELECT id,viewcount from my_forum_threads

$cache->setThreads($result['id'],$result['viewcount']);

Затем при загрузке страницы вы просто получаете значения кеша, а не снова запрашиваете базу данных. Это совсем не большая проблема.

Средняя страница моего сайта принимает 20 запросов MySQL. Когда я кеширую, это всего два-четыре запроса.

1
ответ дан 28 November 2019 в 03:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: