このアプリケーションでは、データベースに5つのコレクションが必要です。アプリケーションにクライアントを追加するときは、顧客ごとに個別のデータベースを維持したいと考えています。たとえば、500の顧客がある場合、500のdbと2500のコレクションがあります(各dbには5つのコレクションがあります)。このようにして、各顧客データを分離できます。
それは素晴らしい考えです。これにより論理的に分離されることに加えて、MongoDBでデータベースレベルのセキュリティを使用して、他の顧客のデータへの不注意なアクセスを防ぐことができます。
私の懸念は、パフォーマンスの問題につながるのでしょうか?
いいえ。実際、データベースレベルのロックの場合と同様に、ある顧客の非常に激しいロック競合(シナリオで可能な場合)が別の顧客のパフォーマンスに影響を与えることはありません(同じI /O帯域幅で競合している場合でも可能性があります)。ただし、-directoryperdbオプションを使用すると、それらのDBを別々の物理デバイスに配置できます。
シャーディングを使用すると、コレクションを分割する必要がないため、簡単にスケーリングすることもできます。データベースを複数のシャードにラウンドロビンするだけで、負荷を別々のクラスターに分散できます(そのレベルに達した場合)。
他の回答の主張とは反対に、TTLMonitorスレッドは、ドキュメントが削除されていない(そしてフリーリストに追加されていない)場合を除いて、ドキュメントをRAMにプルしません。これらはTTLインデックスを使用して、ドキュメントの有効期限が切れているかどうかを判断するだけでなく、ドキュメントを直接検索します。
1つのデータベースに対して、多くのコレクションソリューションを使用することを強くお勧めします。これは、負荷を分割したり、セキュリティを提供したりすることも、アプリケーション側での処理を容易にすることもできないためです。