私は、エンドユーザーにいくつかのアドホックレポート機能を提供するアプリケーション(Meteorに組み込まれています)を持っています。私は、集約パイプラインを使用して特定のクエリの結果を生成することによって、その機能を構築しました。これは非常に高速になり、私は$out
を使用して結果を結果テーブルにプッシュしました。MongoDBのコレクションを動的に作成したり削除したりしてスケーラビリティの問題を起こすことはありますか?
結果テーブルは、クライアントが正しい結果そのうち把握するために使用されるQUERYIDを含ま。
残念ながら、$out
が新しいクエリを挿入する前に結果テーブル全体を削除するため、一度に複数のユーザーがレポートを実行すると、うまくいきません。
- 集約を実行しますが、手動で
$out
(動的衝突を避けるために命名)の一時的なコレクションに結果をし、その後は手動でコピー結果のコレクションに結果をプッシュ:私は、次の3つの回避策を参照してくださいそこから結果を収集し、すぐに一時的なものを削除します。これは
copyTo()
を使うことができると思ったときには意味がありましたが、それはMeteor内では不可能と思われるので、このオプションは#1に比べてあまり意味がないと思います。$out
結果(動的衝突を避けるために命名)の一時的なコレクションに、クライアントがそこから直接、その結果を引き出しています。私は定期的に余分なコレクションを24時間後に削除します(今日のメインコレクションの特定のクエリ結果と同じように)。
#3が最も高速です。手動で行をコピーするのにかかる時間は、クエリの実行にかかる時間を短縮します。しかし、私は非常に多くのコレクションの作成と削除の影響について懸念しています。
ここでは何百万ものユーザーを話していないが、500ユーザーの平均的な一日は、実行中の各10-20レポートであれば、いずれかの時点で、データベースの追加5-10kのコレクションがあるかもしれません。それはたくさんのようだ。おそらく、ユーザーがさまざまなレポートを開いて複数のタブを開くことが必要な場合があるため、ただちに削除することはできませんが、何らかの方法でそれらをクリーニングするほうが賢明かもしれません。それでも、数百から数千のコレクションについて話しています。
これは問題になるのでしょうか?
代わりに私が検討すべき他のアプローチはありますか?
その他のおすすめ?
ありがとうございます!