Docs Menu
Docs Home
/
MongoDB マニュアル
/

時系列コレクションに関する考慮事項

項目一覧

  • metaField に関する考慮事項
  • metaField ベストプラクティス
  • ストレージと濃度
  • 粒度
  • 圧縮とハードウェア

時系列コレクションは通常、通常のコレクションと同様に動作しますが、次の例外があります。時系列コレクションの動作と構造について詳しくは、「 時系列コレクション 」を参照してください。

metaFieldはほとんど変更されず、任意のデータ型になります。 metaFieldはオブジェクトにすることができ、サブフィールドを含めることができます。フィールドをmetaFieldとして定義した後、 metaFieldの値は変更できますが、 metaFieldを別のフィールドとして再定義することはできません。例、 metaFieldがフィールドAとして定義されている時系列ドキュメントを作成した場合、フィールドBを後でmetaFieldに変換することはできません。ただし、 Aの値がオブジェクトである場合は、 Aに新しいサブフィールドを追加できます。

注意

配列をmetaFieldとして使用すると、配列の等価性は特定の順序に依存するため、予期しないコレクション動作が発生する可能性があります。

MongoDBはmetaFieldを使用してデータを分割し、効率的な組織と取得を可能にします。時時系列コレクションを作成すると、 MongoDBはドキュメントをバケットにグループ化します。バケット内のドキュメントは同一のmetaField値を共有し、近い値のtimeField値を持ちます。

時系列コレクション内のバケット数は、一意のmetaField値の数によって異なります。きめ細かなまたは動的なmetaField値を持つコレクションでは、ほとんどまたはまったく変更されない単純なmetaField値を持つコレクションよりも多く、スパースに圧縮された、有効期間の短いバケットが生成される可能性があります。 metaFieldの値がきめ細かで動的な場合、通常、ストレージとクエリの効率は低下します。

  • metaField の一部として、ほとんどまたはまったく変更されないフィールドを選択します。

  • 可能であれば、metaField の一部として、フィルター式に一般的な識別子またはその他の安定値を選択します。

  • metaField の一部としてフィルタリングに使用されていないフィールドを選択することは避けてください。 代わりに、それらのフィールドを測定値として使用してください。

時時系列コレクションにデータを挿入すると、内部コレクションはバケットを使用して最適化されたストレージ形式にデータを自動的に整理します。適切なバケットが存在する場合、 MongoDBはそのバケットに新しいデータを挿入します 。適切なバケットが存在しない場合は、 MongoDBは新しいバケットを作成します。ストレージを最適化するには、ほとんど変更されないmetaFieldを選択して、より少なく、より高密度のバケットを持つ時系列コレクションを作成します。

metaField値がきめ細かな、または変更されているコレクションでは、スパースで圧縮された、有効期間の短いバケットが多数生成され、コレクションの濃度が増加します 。濃度を高めると、ストレージと クエリ効率が低下します。

granularityパラメータを使用して、データ取り込みレートに基づいてMongoDBが時系列データをバケット化する頻度を指定できます。次の表は、特定のgranularity値を使用する場合に 1バケットのデータに含まれる最大時間間隔を示しています。

granularity
granularity バケット制限
seconds
1 時間
minutes
24 時間
hours
30 日間

デフォルトでは 、 granularitysecondsに設定されています。同じデータソースからの受信測定値間の時間範囲に最も近い値にgranularity値を設定するとパフォーマンスを向上できます。例、数千のセンサーから気象データを記録しているが、各センサーからのデータは5分に 1 回のみレコードする場合は、 granularity"minutes"に設定します。新しいドキュメントを追加する頻度が低いほど、ストレージとパフォーマンスの利点は大きくなります。

granularityhoursに設定すると、最大 1 か月量のデータ取り込みイベントが単一のバケットにグループ化されるため、トラバース時間が長くなり、クエリが遅くなります。 これをsecondsに設定すると、ポーリング間隔ごとに複数のバケットが使用されます。その多くには 1 つのドキュメントのみが含まれる場合があります。

granularity値を選択する際には、一般的なクエリも考慮する必要があります。例、クエリが一度に1日のデータを取得すると予想されている場合は、「分」を使用します。 「秒」などのより細かい粒度の場合は、1 時間をカバーするバケットが作成されます。これにより、同じデータを表すにより多くのバケットが必要になり、ストレージとクエリのパフォーマンスに悪影響が生じます。 「時間」のような細かい粒度( 30日のバケット範囲)では、クエリで一度に30日のデータを取得し、そのほとんどをフィルタリングで除外する必要があります。

例については、「時系列データの詳細な設定 」を参照してください。

すべての時系列コレクションは、開かれたバケットまたは再度開かれたバケットにデータを追加する場合、圧縮されたバケット形式を使用します。キャッシュ内の時系列データを圧縮することで、効率的なクエリ パフォーマンスを維持しつつ、濃度の高いワークロードをサポートできます。

戻る

時系列データ