1

コレクション内のドキュメントが特定の年齢になった後にデータベースクエリを実行するためのベストプラクティスは何ですか?

これが、投稿のコレクションを備えたmongoDBを備えたnode.jsWebシステムであるとしましょう。新しい投稿が挿入された後、60分後にいくつかのデータで更新される必要があります。

1〜2分ごとに(年齢<1時間)すべての投稿をチェックするcronジョブが最善の解決策でしょうか?このシステムに10.000を超えるアクティブユーザーがいる場合、最もストレスの少ないソリューションは何でしょうか。

4

1 に答える 1

0

いくつかのアイデア:

  • ソースレコードを更新する必要がある時刻を含む「更新時刻」フィールドを持つキューとして、2番目のコレクションを作成します。インデックスを作成し、スキャンして「現在」より古い値を探します。
  • 上記のフィールドを元のドキュメントに含め、同じ方法でインデックスを作成します
  • (コレクションへのドキュメントの挿入/削除/挿入ではなく)動作に応じて、完了時に値をクリアするか、次の60分にリセットすることができます。
  • update-collectionを区別しておくことで、キューに入れられた更新のワーキングセット全体を常にメモリに保持できる可能性が高くなります(更新情報を投稿に保存する場合と比較して)。
  • Nodeの同じインスタンスへのWebリクエストとしてではなく、ユーザーリクエストをブロックしないように、別のプロセスとして更新を開始します。

どのようにスケジュールするかについては、それはあなたとあなたのアーキテクチャ、そしてあなたのシステムに最適なもの次第です。特に複数のWebサーバーまたはシャードデータシステムがある場合、正しい「最良の」答えはありません。

上限付きのコレクションを使用することもできますが、更新が必要なレコードが失われる可能性があります(ただし、パフォーマンスは向上します)。

于 2013-01-27T15:06:49.517 に答える