時系列データの粒度の設定
注意
コレクションが作成された後に時系列コレクションの粒度を変更するには、MongoDB 5.0.1以降を実行している必要があります。 MongoDB 5.0の既知の問題を参照してください。
時系列コレクションを作成するときは、 metaField
フィールドの同じ一意な値を持つ連続する受信測定間の時間範囲に最も近い値に粒度を設定します。
db.createCollection( "weather24h", { timeseries: { timeField: "timestamp", metaField: "metadata", granularity: "minutes" }, expireAfterSeconds: 86400 } )
granularity
パラメーターを設定すると、時系列コレクション内のデータが内部的に保存される方法が最適化され、パフォーマンスが正確に向上します。
パラメータを正確に設定するには、 metaField
フィールドの値で指定される一意のデータソースの取り込みレートに最も近いgranularity
値を選択します。
たとえば、 metaField
データが気象センサーを識別し、5 分ごとに個々のセンサーからデータを取り込む場合は、 "minutes"
を選択する必要があります。 数百万のセンサーがあり、異なるセンサーから入力されるデータが 秒単位しか異なる場合でも、 granularity
は、メタデータによって一意に識別される 1 つのセンサーの取り込み率に基づいている必要があります。
次の表では、各granularity
値についてまとめて保存されるデータの最大時間範囲を確認できます。
granularity | カバーする時間 |
---|---|
"seconds" (デフォルト) | 1 時間 |
"minutes" | 24 時間 |
"hours" | 30 日間 |
時系列コレクションの granularity
を検索する
granularity
の現在の値を取得するには、listCollections
コマンドを使用します。
db.runCommand( { listCollections: 1 } )
結果ドキュメントには、options.timeseries.granularity
フィールドを含む時系列コレクションのドキュメントが含まれます。
{ cursor: { id: <number>, ns: 'test.$cmd.listCollections', firstBatch: [ { name: <string>, type: 'timeseries', options: { expireAfterSeconds: <number>, timeseries: { timeField: <string>, metaField: <string>, granularity: <string>, bucketMaxSpanSeconds: <number> } }, ... }, ... ] } }
時系列コレクションの granularity
を変更する
granularity
パラメーターの値を変更するには、次の collMod
コマンドを発行します。
db.runCommand({ collMod: "weather24h", timeseries: { granularity: "hours" } })
granularity
が設定されると、一度に 1 レベルずつのみ増やすことができます。 "seconds"
から"minutes"
または"minutes"
から"hours"
へ 。 その他の変更は許可されません。 granularity
を"seconds"
から"hours"
に変更する必要がある場合は、まずgranularity
を"minutes"
に増やし、次に"hours"
に増やします。
注意
シャーディングされた時系列コレクションのgranularity
は変更できません。