私たちのアプリケーションでは、データベースに5つのコレクションが必要です。クライアントを に追加する際には、 お客様ごとに別々のdbを管理したいと考えています。たとえば、500人の顧客がいる場合は、 500 dbsと2500のコレクション(各データベースには5つのコレクションがあります)があります。この方法で、 それぞれの顧客データを分離することができます。
これは素晴らしいアイデアです。 MongoDBのデータベースレベルのセキュリティを使用して、他の顧客のデータへの不慮のアクセスを防ぐことができます。
私の懸念は、パフォーマンス上の問題につながるかどうかです。
ない、と(それがあなたのシナリオで可能の場合)実際には、彼らが競合している場合(それはまだかもしれない別の顧客のパフォーマンスに影響を与えない一人の顧客のためのデータベース・レベルのロックと同様に非常に重いロック競合を助けます同じ入出力帯域幅ですが、--directoryperdbオプションを使用すると、それらのDBを別々の物理デバイスに配置することができます。
シャーディングでは、複数のシャード間でデータベースをラウンドロビンするだけで、別のクラスタに負荷を分散させることができます(そのレベルに達した場合およびそのレベルに達したとき)
他の回答の主張とは異なり、TTLMonitorスレッドは、削除されていない(そして空きリストに追加されていない)文書をRAMにプルしません。 TTLインデックスは、文書が期限切れになるかどうかを知るために、また文書を直接配置するためにも使用されます。
1つのデータベースに対して多数のコレクションソリューションを強くお勧めします。これは、負荷を分割したり、セキュリティを提供したり、アプリケーション側で処理するのが簡単ではないためです。
多くのお客様には、代わりにisloatedインスタンスを探すほうが良いかもしれませんが、 – Sammaye
というものがあります。これは、それぞれが別のmongodインスタンス/レプリカセットです。これはMongoDBの多くのユーザーが複数のテナントをホストしている場合の非常に一般的な構成で、個別のDBが標準的な答えです。 –