時系列データのクエリについて
MongoDBは、時系列データのストレージとクエリレイテンシを最適化するために、一致する metaFieldを持つドキュメントをグループ化します。 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
値の両方を持つドキュメントをグループ化するため、クエリの範囲はさらに絞り込まれます。最近のトランザクションはメモリ内に保存されるため、 リアルタイムでデータをストリーミングするのが簡単です。
ブロック プロセシング
バージョン8.0以降、 MongoDB は、ブロック処理を使用して特定の時系列クエリを実行する場合があります。 このパフォーマンス向上により、クエリは個々の値ではなく、データの「ブロック」単位で処理されます。 ブロック処理 により、時系列コレクションを操作する際のクエリ実行速度とスループットが向上します。
MongoDBは、適格な時系列クエリに対してブロック処理を自動的に有効にします。クエリがブロック処理を使用するかどうかを手動で指定することはできません。時系列クエリがブロック処理を使用しているかどうかを確認するには、説明プランの出力のstages
を参照してください。