应用程序用户可以执行不同的任务。每种任务都有唯一的标识符。每个用户活动都记录在数据库中。
所以我们跟随Event实体保存在数据库中:
{
"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)
可以使用group_level=2
(或group_level=1
查询,以防需要用户事件数量。)
是否可以通过使用map / reduce机制进行单一视图查询来回答上述问题?我是否必须使用列表功能(尽管可能会导致性能问题)?
答案 0 :(得分:-1)
只需使用平键[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}
]}