多数のホストから計装データを収集して保存します。私たちのストレージは MongoDB です - レプリカを持ついくつかのシャード。すべてが 1 つの大きなコレクションに格納されます。挿入する各ドキュメントは、いくつかの属性 (測定値) を持つ時間ベースの観察です。すべてのクエリは少なくとも時間に基づいているため、タイム スタンプは最も重要な属性です。ドキュメントは決して更新されないため、純粋な書き込みルックアップ モデルです。現在、数十億のドキュメントで十分に機能しています。
今、
少し大きくして、最大 12 か月のデータを保持したいと考えています。これは、1 兆件以上の恐ろしい観察結果 (ドキュメント) になる可能性があります。すべてを単一の巨大なコレクションにダンプすることが最善の選択なのか、それとももっと賢明な方法があるのか 、私はさまよっていました。よりインテリジェントとは、高速な挿入と (重要なことに) 高速なクエリを提供しながら、より少ないハードウェアを使用することを意味します。そこで、インデックス、挿入、およびクエリの速度でメモリを獲得することを期待して、大きなコレクションを小さな断片に分割することを考えました。
私はシャードを調べましたが、タイムスタンプによるシャーディングは悪い考えのように思えます。なぜなら、すべての書き込みが 1 つのノードに送られ、シャーディングの利点が失われるからです。挿入率は非常に高いため、ここで適切に機能するにはシャーディングが必要です。また、毎月新しいコレクションを作成し、ユーザー クエリに関連するコレクションをピックアップすることも考えました。12 か月より前のコレクションは削除されるか、アーカイブされます。毎月まったく新しいデータベースを作成し、同様のローテーションを行うオプションもあります。その他のオプション?それとも、1 つの大規模なコレクションが、本当に大きく成長するためのオプションなのでしょうか?
同様のアプリでの経験と考慮事項を共有してください。