私はCouchDBについての理解を深め、実際のシナリオではデータをモデル化する方法を模索しています。日付は依頼することも可能であるエポックであるCouchDBモデリング - 時間フィルタリングとグループデータ
{
"_id": "couch1",
"_rev": "2-338d0a592ad1e5570000002b00000000",
"eventType": "event1",
"date": 1328805860000
}
{
"_id": "couch2",
"_rev": "1-1e0315c2e1ca7f5f0000002b00000000",
"eventType": "event1",
"date": 1328133600000
}
{
"_id": "couch3",
"_rev": "1-154cd416b78cb2ef0000002b00000000",
"eventType": "event2",
"date": 1325434920000
}
:)そうのような
考える文書を、私は今のことができますように私は、「日付で私を得るブログの投稿」などの多くを行ってきましたあなたが2つのタイムスタンプの間に起こったすべての "イベント"を尋ねたところで、そのデータを "eventType"でグループ化するためにソファを作るのですか?
"event1": 2
"event2": 1
私はそれを意識してい
を取得したさらなる情報を:私たちは、出力を見てみたいと思います - だから、上記と包含するでそれらの文書を渡されたタイムスタンプを仮定を使用して
ソファはキーでソートされるので、もし私が「トップ10」を望むなら、それは第二段階になるだろうが、私はそれを扱うことができる。
ここで重要な問題は、1つの列でフィルタリングしてから別の列でグループ化することです。
我々は、次のマップ機能を使用する場合:私たちはタイムスタンプが本質的であるため、ユニークなソファーがグループとキーをすることができますので、値1
を持っていることができないことがわかり機能を減らすcount
で
function (doc) {
emit([doc.date, doc.eventType], doc.eventType);
}
を以下に、マップ機能を変更します。その後、
function (doc) {
emit([doc.eventType, doc.date], doc.eventType);
}
とイベントBUによって正しくgroup level
1にその意志グループを変更あなたのプライマリ注文はイベント名によるものなので、あなたのデータを時間でスライスすることはできません。つまり、時間の順序が壊れていますか?
これに関する戦争物語はありますか?これは再削減する必要がありますか?この
Eggsy
答えは素晴らしいです。キー** A **での選択/選択とキー** B **によるグループ化は、基本的に2次元のクエリであることに注意してください。 CouchDBのビューは常に* 1次元です。 – JasonSmith
だから、本質的には最も効率的なやり方で行えず、DBに動かすことはできないと言っています。私たちは常にクライアント上でグループ化を行うことができますが、私たちはむしろそうしないでしょう。この種の問題は、分析の問題の典型的な形であり、大規模なデータ用に構築された他のNoSQLソリューションがそのようなタスクを実行できるかどうか疑問に思う。 – eggsy84