ログに記録された大量の情報の統計を個別のチャネルに分割して維持したいシステムがあります。各チャネルには、時間、日、月、年の最大値と最小値を含む統計をカスケード形式で維持する概要ドキュメントがあります。
チャネルの統計を 1 か月間保持する単一のドキュメントを維持できます。これには、1 か月の最大/最小、31 の毎日の最大/最小、およびそれらの日のそれぞれの 24 時間の最大最小が含まれます。
$inc を使用してドキュメントをカウントすることは、その場でのアトミックな更新に最適です。更新修飾子の $max と $min は問題を解決しますが、残念ながらそれは利用できません。
タスク プロセッサ内で最大値と最小値を保持し、$set を発行することはできますが、システム内のすべてのタスク プロセッサ (異なるマシン上にある可能性があります) を調整するのに問題があるため、mongo をメイン リファレンスとして保持することにしました。また、異なるタスク プロセッサ インスタンスで同時に実行されている 2 つの別個のタスクによって、同じ統計が更新されている可能性があります。
そのため、最善の解決策に関するコメント/提案を探しています(必ずしも生データを保持するとは限らないため、後処理はオプションではありません)
更新が必要になるたびに読み取り、更新、保存しますか?
db Eval を使用して JavaScript サーバー側を実行し、単一の値を渡すだけで max/man カスケードを更新しますか?
別の方法はありますか?
助けてくれて本当にありがとうございます。