отображение # просмотров на странице без постоянного обращения к базе данных

Все больше и больше сайтов показывают количество просмотров (и кликов, как на dzone.com) определенных страниц. Как лучше всего отслеживать # представления, не затрагивая базу данных при каждой загрузке?

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

Спасибо, первый раз пользователь.


person PStamatiou    schedule 05.02.2009    source источник


Ответы (5)


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

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

person Chris    schedule 06.02.2009

Один дешевый трюк - просто кэшировать значение на несколько минут.

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

person Tiberiu Ana    schedule 06.02.2009
comment
это не решает проблему записи в базу данных при каждом просмотре страницы. - person Seun Osewa; 09.02.2009

Один из способов - использовать memcached в качестве счетчика. Вы можете изменить эту реализацию ограничения скорости, чтобы она действовала как общий счетчик. Ключ может быть в формате ггггммддччмм с истечением 15 или 30 минут (в зависимости от того, что вы считаете одновременными посетителями), а затем просто get эти ключи при отображении страницы.

Хорошие библиотеки для связи с сервером memcache доступны на многих языках.

person Anon    schedule 28.05.2009

Вы можете создать плоский файл, в котором есть количество обращений. При этом будут проблемы с масштабированием, но это может сработать.

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

person Buddy    schedule 05.02.2009
comment
да, мы ищем что-то масштабируемое, поэтому, вероятно, без файлов. могут быть проблемы с блокировкой, а что нет. Я хочу отобразить число, чтобы аналитическое программное обеспечение было не тем, что мне нужно. Конечно, местное программное обеспечение для аналитики может это сделать, но оно по-прежнему сохраняет в БД, может быть медленным. - person PStamatiou; 05.02.2009

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

person alok    schedule 06.02.2009