おおよそ次の形式のドキュメントを含むデータベースがあります。
{"created_at": some_datetime, "deleted_at": another_datetime, "foo": "bar"}
今後「deleted_at」を処理する必要がないと仮定すると、DB 内の削除されていないドキュメントの数を取得するのは簡単です。(UTC を使用して) 次のようなものに縮小するビューを作成することも簡単です。
[
{"key": ["created", 2012, 7, 30], "value": 39},
{"key": ["deleted", 2012, 7, 31], "value": 12}
{"key": ["created", 2012, 8, 2], "value": 6}
]
...つまり、2012 年 7 月 30 日に 39 件のドキュメントが作成され、2012 年 7 月 31 日に 12 件が削除済みとしてマークされたということです。私が欲しいのは、2012 年 8 月 1 日 (0+39-12 == 27) に「存在した」ドキュメントの数のスナップショットを取得するための効率的なメカニズムです。理想的には、キーまたはインデックスとして日付を使用してビューまたは DB (たとえば、事前に計算されてディスクに保存されたもの) をクエリし、値またはドキュメントとしてカウントを取得できるようにしたいと考えています。例えば:
[
{"key": [2012, 7, 30], "value": 39},
{"key": [2012, 7, 31], "value": 27},
{"key": [2012, 8, 1], "value": 27},
{"key": [2012, 8, 2], "value": 33}
]
これは、ビュー内のすべての行を反復処理し、実行中のカウンターを保持し、毎日合計することで十分に簡単に計算できますが、データセットが大きくなるにつれて、そのアプローチは遅くなります。結果を保存します。これに取り組むよりスマートな方法はありますか?