【问题标题】:couchdb - filtering on complex keycouchdb - 过滤复杂键
【发布时间】:2012-06-09 14:58:52
【问题描述】:

我在 couchdb 中有以下模式的 30m 条记录。

{ countryIso: 'TR'
, region: '68'
, city: 'Ankara'
, lat: '39.927200317383'
, lon: '32.864398956299'
, action: 'install'
, itime: 1288523291000  // That is unix timestamp
, fileId: 33221
, api_level: '3'
, display_size: '320x480'
, model: 'Galaxy'
}

这些记录代表服务中文件的下载。我想做的是为这些事件提供统计数据。

一些示例查询:

  • 给定 fileId 和日期范围,获取每天的下载次数
  • 给定 fileId 和日期范围,获取每天使用的 display_size
  • 给定 fileId 和日期范围,获取每天使用的 api_level

理想情况下(如果可能)我们还应该回答更复杂的查询,例如:

  • 给定 fileId、日期范围和 countryIso,显示每天的下载量

我做了以下地图功能

function (doc) {
  emit([doc.fileId,
        Math.floor(doc.itime/60/60/24),
        doc.countryIso, doc.display_size,
        doc.api_level], 1)
}

_sum 作为reduce 函数。

现在我可以做到了

?group_level=2&startkey=[247]&endkey=[247,{}]

{"rows":[
{"key":[247,14913505],"value":4},
{"key":[247,14913528],"value":4},
{"key":[247,14913563],"value":4}
]}

例如,每天获取特定 fileId 的下载。

或者这个

?group_level=3&startkey=[247]&endkey=[247,{}]

{"rows":[
{"key":[247,14913505,"GB"],"value":4},
{"key":[247,14913528,"AE"],"value":4},
{"key":[247,14913563,"TR"],"value":4}
]}

获取每个国家/地区每天特定 fileId 的下载量。

但我似乎无法以返回此内容的方式查询我的视图

{"rows":[
{"key":[247,14913505,"320x480"],"value":4},
{"key":[247,14913528,"320x480"],"value":4},
{"key":[247,14913563,"320x533"],"value":4}
]}

我是否必须为我需要的每个查询(图表)创建一个单独的视图,或者您认为可以创建一个复杂的视图来回答所有这些查询?

【问题讨论】:

    标签: couchdb mapreduce analytics


    【解决方案1】:

    没有办法像那样分割你的键,你只能使用词汇顺序。所以制作单独的视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-28
      • 1970-01-01
      • 2021-11-10
      • 2012-03-30
      • 1970-01-01
      • 1970-01-01
      • 2011-07-27
      • 1970-01-01
      相关资源
      最近更新 更多