MongoDB は、時系列データのストレージとクエリレイテンシを最適化するために、一致する metaFields を持つドキュメントをグループ化します。 metaField の選択は、アプリケーションでのクエリの最適化に最も大きな影響を与えます。
metaField のクエリ
時系列コレクションのクエリは、標準の MongoDB コレクションのクエリと同じ方法で実行します。クエリの例と集計パイプラインの例については、「時系列コレクションのクエリ」を参照してください。クエリのベストプラクティスのリストについては、「クエリのベストプラクティス」を参照してください。
時系列データに対するクエリは通常、コレクション内の単一の時系列に焦点を当てます。たとえば、次のスキーマを使用した、株価データを追跡する時系列コレクションについて考えてみましょう。
{ _id: 573a1397f29313caabce8347, "ticker": "MDB", "timestamp": ISODate("2024-07-24T13:45:00.000Z"), "price": 248.21, "volume": 6930 }
コレクションには、次の設定があります。
timeseries: { timeField: "timestamp", metaField: "ticker", granularity: "seconds" }
MongoDB は、ticker 値が一致するドキュメントをグループ化します。すべてのドキュメントのすべてのフィールドで一致を確認する代わりに、サーバーは metaField(この場合は ticker)と照合するだけで、検索範囲を一意の時系列に絞り込むことができます。これは、単一の株式のアクティビティを検索するという、予想されるユースケースと一致します。MongoDB(MDB)の株式情報を検索するユーザーは、Amazon(AMZN)の結果を考慮する必要はありません。
timeField のクエリ
時系列データをクエリするための 2 番目の主要な要素は時間です。MongoDB は同じ metaField 値と近い timeField 値の両方を持つドキュメントをグループ化するため、クエリの範囲はさらにバケットの範囲に絞り込まれます。最近のトランザクションはメモリ内に保存されるため、簡単にリアルタイムでデータをストリーミングできます。