1

私は、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 と日付範囲を指定して、1 日あたりのダウンロード数を取得します
  • fileId と日付範囲を指定して、1 日あたりに使用される display_size を取得します
  • fileId と日付範囲を指定して、1 日あたりに使用される api_level を取得します

理想的には (可能であれば)、次のようなより複雑なクエリにも回答する必要があります。

  • fileId、日付範囲、countryIso を指定して、1 日あたりのダウンロード数を表示

次のマップ関数を作成しました

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

そして_sumreduce関数として。

今、私はこれを行うことができます

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

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

たとえば、1 日あたりの特定の 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}
]}

国ごとに 1 日あたりの特定の fileId のダウンロードを取得します。

しかし、これを返す方法で自分のビューを照会することはできないようです

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

必要なクエリ (グラフ) ごとに個別のビューを作成する必要がありますか? それとも、これらすべてのクエリに答える複雑なビューを作成できると思いますか?

4

1 に答える 1

2

そのようにキーをスライスする方法はありません。作業するのは字句順序だけです。したがって、別のビューを作成します。

于 2012-06-26T08:03:05.067 に答える