MongoDB Запрос просмотра страниц с временным интервалом - PullRequest
0 голосов
/ 08 июля 2011

Я использую mongodb для хранения метаданных изображения и URL-адресов S3. я бы хотел показать наиболее просматриваемые элементы за период времени, например, «сегодня», «на этой неделе», так же, как YouTube делает с видео. Как хранить «просмотры» на mongodb для запроса таких данных?

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

1 Ответ

3 голосов
/ 08 июля 2011

Не создавайте отдельный документ для каждого представления, если вам это не нужно.

Вы можете вырезать незначительную часть даты, сохранить только день + час или только день и использовать $inc чтобы добавить новое представление:

db.hits.update(
    {"item": "image0001", "date": ..dayordayandhour..},
    {"$inc": { "hits": 1}},
    true) //upsert

Для агрегации, которую вы можете использовать group, mapreduce является излишним для этого.

Примечание: Есливам не нужны точные числа, вы можете производить агрегацию ежечасно, а затем обновлять счетчики «этот день» / «эта неделя» (вы можете управлять несколькими счетчиками с помощью этого подхода!) для каждого документа, чтобы вы могли быстро выполнять поиск исортировка по счетчикам просмотров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...