私は、ユーザーがサイトで別のユーザーを見つけるための特定の基準を選択し、サイトが同じ基準の誰かを探している他の誰かとあなたをペアにするウェブサイトを持っています。「ペアリングされていない」(まだペアリングされていない)ユーザーのコレクションがあり、誰かがペアリングを要求するたびに、プログラムはコレクション内の次の使用可能なユーザーを一致基準でチェックし、ユーザーを削除します一致する場合は「unpaired」コレクションから、一致しない場合は「unpaired」コレクションにユーザーを追加します。
私の質問は、次の基準に基づいてこのタイプのコレクションを処理するための最良の方法は何ですか?
- マッチングプロセスはリアルタイムで行われるため、SignalRなどを使用してリアルタイムのペアリングを処理しています
- システムがシャットダウンされた場合、システムがシャットダウンされたためにペアになっていないユーザーを「検索」するユーザーがいないため、コレクションを保持する必要はありません。
- サーバーをスケールアウトして複数のインスタンスがある場合、それらはすべて同じコレクションから引き出すことができる必要があります
- 2人のユーザーが同時に要求した場合は、並行性に対処します(必要かどうかはわかりません)。
私がこれを考えたときに生じたいくつかの標準的な質問は次のとおりです。
ユーザーは絶えず追加および削除されているので、このためのデータベースも必要ですか?
ある種のストレージが必要な場合、mongodbのようなものが良いオプションでしょうか?なぜ?
コレクションをメモリに保存した場合、スケールアウトすると異なるインスタンス間で機能しませんよね?