Самый эффективный способ отображения статистики с использованием PHP / MySQL - PullRequest
2 голосов
/ 19 ноября 2010

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

Я бы предпочел найти метод для выполнения этих запросов, скажем, каждые 30 минут и сохранять результаты, но я не уверен в лучшем подходе, и я не хочу использовать cron.По сути, я не хочу делать тысячи запросов в день только для того, чтобы отобразить эти результаты.

Есть идеи по поводу лучшего метода для этого типа функции?

Заранее спасибо

Ответы [ 5 ]

4 голосов
/ 19 ноября 2010

К сожалению, cron - лучшее и надежное решение.

Cron - это временный планировщик заданий в Unix-подобных компьютерных операционных системах.Название cron происходит от слова «хронос», по-гречески «время».Cron позволяет пользователям планировать выполнение заданий (команд или сценариев оболочки) периодически в определенное время или даты.Он обычно используется для автоматизации обслуживания или администрирования системы, хотя его универсальный характер означает, что его можно использовать для других целей, таких как подключение к Интернету и загрузка электронной почты.

Если вы хотитесохраните вывод в файл на диске,
вы всегда можете проверить, что filemtime меньше, чем 30 минут,
, прежде чем приступить к повторному выполнению дорогостоящих запросов.

1 голос
/ 19 ноября 2010

Нет ничего плохого в том, чтобы использовать cron для хранения такого рода вещей.
Если вам нужны более сложные методы кэширования, я предлагаю прочитать memcached или APC , которые оба могут решить вашу проблему.

0 голосов
/ 19 ноября 2010

Использование cron - это самый простой способ решения проблемы.

Одна веская причина не использовать cron - вы будете генерировать статистику, даже если никто не запросит ее.

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

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

Однако правильным решением будет обновлять статистику каждый раз, когда добавляется запись. Если у вас очень большие объемы трафика, накладные расходы будут минимальными. Хотя «SELECT count (*) FROM some_table» будет работать очень быстро, вы, очевидно, столкнетесь с проблемами, если не захотите просто подсчитать все строк в таблице (например, если ведутся блоги и ответы). в той же таблице). Действительно, если бы вы внедрили обновление статистики в качестве триггера для соответствующих таблиц, вам бы не пришлось вносить какие-либо изменения в ваш код PHP.

0 голосов
/ 19 ноября 2010

У вас есть много, чтобы сделать это, я думаю, что хорошее не самое лучшее, вы можете хранить свои данные в таблице и отображать их каждые 30 минут. используя функцию sleep()
Я рекомендую вам взглянуть на систему блогов WordPress, и особенно на плагин BuddyPress ..

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

SELECT COUNT(*) FROM my_table

и я получил количество постов в моем случае.

В любом случае, подходов так много. Удачи.

Не забывай, что крон всегда твой лучший друг.

0 голосов
/ 19 ноября 2010

Cron Job - лучший подход. Ничего другого я не видел возможным.

...