应用程序用户可以执行不同的任务。每种任务都有唯一的标识符。每个用户活动都记录到数据库中。
因此,我们有以下事件实体要保存在数据库中:
{
"user_id": 1,
"task_id": 2,
"event_dt": [
2013, 11, 15, 10, 0, 0, 0
]
}
我需要知道在特定的时间段内,每种类型的任务由特定的用户执行了多少。时间框架可能相当长(即要求提供去年的滚动图表)。
为了更好地理解,映射函数可能类似于:
emit([doc.user_id, doc.task_id, doc.event_dt], 1)
并且可以使用CCD_ 1(或者在仅需要多个用户事件的情况下使用group_level=1
)来查询它。
是否可以通过使用map/reduce机制进行单视图查询来回答上述问题?我必须使用列表功能吗(尽管这可能会导致性能问题)?
只需使用平面键[doc.user_id, doc.task_id].concat(doc.event_dt)
,因为它将简化请求和分组逻辑:
- 使用
group_level=1
:您将获得每个用户在所有时间内的任务量 - 其中
group_level=2
:每个用户在所有时间内的特定任务ID的数量 group_level=3
:与上述相同,但在特定年份的上下文中- 与
group_level=4
相同,但也按月份分组按天、小时、分钟和秒
例如,group_level=3
的结果可能是:
{"rows":[
{"key": ["user1", "task1", 2012], "value": 3},
{"key": ["user1", "task2", 2013], "value": 14},
{"key": ["user1", "task3", 2013], "value": 15},
{"key": ["user2", "task1", 2012], "value": 9},
{"key": ["user2", "task4", 2012], "value": 26},
{"key": ["user2", "task4", 2013], "value": 53},
{"key": ["user3", "task1", 2013], "value": 5}
]}