AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。

時系列データの粒度の設定

時系列コレクションを作成すると、MongoDB は自動的にsystem.bucketsシステム コレクションを作成し、受信した時系列データをバケットにグループ化します。 粒度を設定することで、データの取り込み率に基づいてデータがバケット化される頻度を制御します。

MongoDB 6.3 以降では、カスタム バケット パラメーターbucketMaxSpanSecondsとbucketRoundingSecondsを使用してバケット境界を指定し、時系列データのバケット化方法をより正確に制御できます。

バケット化の詳細については、「時系列データについて」を参照してください。

注意

コレクションが作成された後に時系列コレクションの粒度を変更するには、 MongoDB 5.0.1 以降を実行中いる必要があります。

現在のコレクション値を取得するには、 listCollectionsコマンドを使用します。

db.runCommand( { listCollections: 1 } )

時系列コレクションの場合、出力にはgranularity 、 bucketMaxSpanSeconds 、およびbucketRoundingSecondsパラメータが含まれます(存在する場合)。

{ cursor: { id: <number>, ns: 'test.$cmd.listCollections', firstBatch: [ { name: <string>, type: 'timeseries', options: { expireAfterSeconds: <number>, timeseries: { timeField: <string>, metaField: <string>, granularity: <string>, bucketMaxSpanSeconds: <number>, bucketRoundingSeconds: <number> } }, ... }, ... ] } }

次の例では、weather24h コレクションの granularity を minutes に設定します。

db.createCollection( "weather24h", { timeseries: { timeField: "timestamp", metaField: "metadata", granularity: "minutes" }, expireAfterSeconds: 86400 })

MongoDB 6.3 以降では、granularity の代わりに、2 つのカスタムバケットパラメータを使用してバケット境界を手動で設定できます。深夜0時から 4 時間ごとにデータをクエリするなど、固定された時間間隔でデータをクエリすることを想定している場合は、このアプローチを検討してください。これらの期間の間にバケットが重複しないようにすることで、大量のクエリと insert 操作に最適化されます。

カスタム バケット パラメータを使用するには、両方のパラメータを同じ値に設定し、 granularityを設定しないでください。

  • bucketMaxSpanSeconds 同じバケット内のタイムスタンプ間の最大時間を設定します。設定可能な値は 1~31536000 です。

  • bucketRoundingSeconds は、新しいバケットの開始タイムスタンプを決定する時間間隔を設定します。 ドキュメントに新しいバケットが必要な場合、MongoDB ではドキュメントのタイムスタンプ値がこの間隔で切り捨てられ、バケットの最小時間が設定されます。

気象ステーションの例では、4時間ごとに概要レポートを生成する場合、 "minutes"のgranularityを使用する代わりに、カスタム バケット パラメータを 14400 秒に設定することでバケットを調整できます。

db.createCollection( "weather24h", { timeseries: { timeField: "timestamp", metaField: "metadata", bucketMaxSpanSeconds: 14400, bucketRoundingSeconds: 14400 } })

2023-03-27T16:24:35Zという時間が設定されたドキュメントが既存バケットに収まらない場合、MongoDB は最小時間が2023-03-27T16:00:00Zで、最大時間が2023-03-27T19:59:59Zの新しいバケットを作成します。

collModコマンドを使用して、 timeseries.granularityを短い時間単位から長い時間単位に増やすことができます。

db.runCommand( { collMod: "weather24h", timeseries: { granularity: "seconds" | "minutes" | "hours" }} )

granularityの代わりにカスタム バケット パラメータbucketRoundingSecondsとbucketMaxSpanSecondsを使用している場合は、両方のカスタム パラメータをcollModコマンドに含めて、同じ値に設定します。

db.runCommand( { collMod: "weather24h", timeseries: { bucketRoundingSeconds: 86400, bucketMaxSpanSeconds: 86400 }} )

粒度間隔またはカスタム バケット値を減らすことはできません。

注意

シャーディングされた時系列コレクションの粒度を変更するには、MongoDB 6.0 以降を実行している必要があります。