2010-06-21 1 views
3

Немного странного вопроса, но я надеюсь, что кто-то может указать мне в правильном направлении. В основном у меня есть два сценария, и я хотел бы знать, какой из них лучше для моей ситуации (пользователь проверяет табло на сайте с высоким трафиком).Создание табло на больших участках трафика

  1. Top 10 регенерируется каждый раз, когда пользователь попадает на страницу - увеличивает нагрузку на сервер, особенно при высоком трафике, пользователь увидит, как он будет стоять как можно скорее.
  2. Топ 10 регенерируется с заданным интервалом, например. каждые 10 минут. - генерирует только один набор результатов, вызывающий один всплеск каждые 10 минут, а не потенциально один раз каждые х секунд, если пользователь попадает между обновлением, он не увидит их обновленный балл.

У каждого есть свои плюсы и минусы, в вашем опыте, который лучше всего использовать или есть какие-то магические альтернативы?

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

Благодарим вас за большой вклад.

+2

Как формируются табло? Я думаю, что идеальное решение находится где-то посередине: Создавайте оценочные карты только тогда, когда есть новые данные для включения. –

ответ

1

Добавляя к ответу Марселя, я предлагаю только обновлять табло при записи событий (например, новый счет или удаленный балл). Таким образом, вы можете сохранять статические ответы на популярные запросы, такие как Top 10 и т. Д. Используйте что-то вроде MemCache, чтобы хранить данные в кэше для запросов, или если вы не можете/не можете установить что-то вроде MemCache на своем сервере, выполните сериализацию общих запросов и напишите их к плоским файлам, а затем удалять/обновлять их при записи событий. Сначала попросите свой код искать кешированный результат (или файл), а затем, если он отсутствует, выполните запрос и создайте данные

+0

Таким образом, вы можете получить результаты «реального времени» и свести к минимуму нагрузку на пересчет или запрос БД – Evan

+0

Я переустановил систему, чтобы сделать именно это. Результаты теперь кэшируются в течение 15 минут, а доступ к базе данных возникает только при добавлении новой оценки в систему. Снова благодарим за все прекрасные предложения и помощь. – digital

0

Ничего не требуется в реальном времени, когда дело доходит до Интернета. Я бы пошел с вариантом 2, пользователи не заметят, что оценка не меняется. Вы можете использовать некоторые JS для обновления первых 10 каждый раз, когда кеш очистился

0

Чтобы добавить к Jordan предложение: я бы поместил оценочные карточки в отдельный (в формате HTML) файл, который создается каждый раз, когда новый данные поступают и только после этого. Вы можете включить этот файл на страницу PHP, содержащую оценочную карту, или даже позволить браузеру посетителя периодически его выбирать с помощью XMLHttpRequests (для экономии полосы пропускания). Пользователи с отключенным JavaScript или с помощью браузера, который не поддерживает XMLHttpRequests (редко в эти дни, но возможно), просто увидит статическую страницу.

0

Модуль голосования Drupal поможет вам в этом, предоставив вам возможность пересчитать. Если вы его реализуете самостоятельно, то кеширование лучших 10-х - хорошая идея - вы можете либо регенерировать ее через регулярные промежутки времени, либо вы можете сделать недействительным кеш в определенных точках. Вам нужно будет посмотреть, как часто люди голосуют, как часто это может привести к тому, что первые 10 будут меняться, как часто просматривается первая 10-страничная страница, а также производительность, которая регенерирует ее.

Если вы не настроены на Drupal/MySQL, тогда CouchDB будет полезен здесь. Вы можете создать представление, которое вычисляет 10 лучших данных, и оно будет кэшироваться до тех пор, пока не произойдет что-то, что приведет к необходимости пересчета. Вы также можете добавить встроенный прокси-сервер http для кэширования результатов за определенное количество минут.

 Смежные вопросы

  • Нет связанных вопросов^_^