MongoDB ストレージを使用したモニタリング/ロギング アプリケーションのデータ モデルを定義しています。私は MongoDB を初めて使用するので、アドバイスをいただければ幸いです。
アプリケーションの書き込み:
私が持っているロガーごとに、10,000個のロガーがあります。
- 時間の経過とともに変化しない静的データ (ロガーあたり数キロバイト)
- 各ロガーから数秒ごとに継続的に取得される、ログに記録する必要があるデータ
データの量は次のとおりです。
- ロガーあたり 1 日 1 MB または 9000 メッセージ
排除パターン:
- データは、作成から 30 日後にシステムによって自動的に削除される必要があります
- データの 60% は 30 日前に他のシステムによって取得され、取得時に削除されます
アプリケーションの読み取り:
- データが読み取られると、一度にすべてのメッセージがシステムから削除されます
- データは作成後、最短で 1 時間、最新で 30 日後に読み取られます。平均は14日。
平均:
- データ保存の平均時間は 14 日間であり、40,000 メッセージまたはロガーあたり 13MB になると計算しました
- データベースに保存されるデータの総量は平均で 130 GB です。
私の質問:
- どのデータモデルを使用しますか?
- 何個のシャードを使用しますか?
次のデータ モデルを検討しました。
- 埋め込み: メッセージの配列を含むロガーごとのドキュメント。ドキュメントが大きくなったときのディスクの再配置が原因で不良
- ロガーごとに制限されたコレクション。ディスクの使用量が多く、データが上書きされるまでの時間が不正確なため、悪い
- 静的データ用のロガーのコレクションと、TTL 機能を使用するメッセージ用のロガーごとのコレクション。10,000のコレクションは大丈夫ですか?
- 静的データ用のロガーのコレクションと、TTL を使用するすべてのメッセージ用の単一のコレクション、および vehicle と messageId を含む複合インデックス。そのコレクションは本当に大きくないですか?
- 静的データ用のロガーのコレクションには、id 参照を持つ事前に割り当てられた配列と、インデックス付きの id を持つすべてのメッセージのコレクションが含まれます。複雑すぎる?
他のデータモデルを提案することは自由です