ストリーミング マテリアライズドビューは、Atlas Stream Processing ストリーム プロセッサーが更新し続けるコレクションです。これを実現するため、ストリーム プロセッサーはソース コレクションへの変更を読み取り、その変更の影響を計算し、その結果をビューに適用します。ビューは、手動またはスケジュールされた更新なしでソース データの現在の状態を反映します。
ストリーミングマテリアライズドビューは、ダッシュボード、実行中の合計、開始アイテムのカウントなど、ソースデータの変更よりも計算結果の読み取りが多いワークロードに適しています。データが到着するとビューが更新されるため、読み取りにより、低レイテンシで現在の結果が返されます。
オンデマンド マテリアライズドビューとの比較
MongoDB は、マテリアライズドビューに対する2つのアプローチをサポートしています。
オンデマンドのマテリアライズドビューには、手動または予定に基づいて実行する集計パイプラインの結果が保存されます。
ストリーミングマテリアライズドビューは、継続的に実行されるAtlas Stream Processingストリームプロセッサの結果を保存します。
どの方法でも、計算結果をディスクに保存し、ビューから直接読み取りを行います。ビューの更新方法と時期が異なります。
特性 | オンデマンドのマテリアライズドビュー | ストリーミング マテリアライズドビュー |
|---|---|---|
trigger の更新 | 手動またはスケジュールされたもの | 変更駆動型、継続的 |
レイテンシ | 数分から数日 | 1 秒未満~数秒 |
データの新鮮度 | 点インタイム スナップショット | 永久に同期される |
コンピュート モデル | 全体の結果を再計算します | 増分効果を計算します |
Best fit | バッチするレポート作成、定期的集計 | ライブ ダッシュボード、運用分析 |
ストリーミングマテリアライズドビュープロセッサの特性
ストリーミング マテリアライズドビューの維持は、標準の Atlas Stream Processing 集計ステージから構成されるパスワードなしです。このパスワードなしを実装するストリーム プロセッサには、次の特徴があります。
変更ストリーム ソースを読み取ります。
fullDocumentとfullDocumentBeforeChangeがrequiredに設定された$sourceステージは、パイプラインが変更前後の各ドキュメントの状態を比較できるように、ソース コレクションから読み取ります。イベントごとに符号付きの差分を計算します。
$addFieldsステージでは、$switch式を使用して、変更が計算結果にどのように影響するかに基づいて、各挿入、更新、または削除に正または負の値を割り当てることができます。結果をウィンドウにグループ化します。ストリーム プロセッサーは無限のストリームで動作するため、すべての
$groupステージはウィンドウ ステージ内で実行する必要があります。ウィンドウ化された$groupは、ウィンドウ間隔でキーごとの差分を合計します。ウィンドウ間隔はビューの更新間隔としても機能するため、ビューの新鮮度を決定します。設定できる最小の間隔は 1 ミリ秒です。結果を追加して適用します。
$mergeステージでは、各ウィンドウの結果をビューの実行中の合計に追加するパイプラインwhenMatchedを使用できます。これにより、結果が置き換えられることはありません。シンクステージで終了します。Stream Processing パイプラインはシンクステージで終了する必要があります。Use
$mergeを使用して Atlas コレクションに書き込み (write)ます。
増分集計のみがストリーミングマテリアライズドビューに変換されます。完全なコレクションスキャンが必要な集計は対象外です。
考慮する必要がある動作の違い
ストリーミングのマテリアライズドビューは、ダウンストリームのコンシューマーに影響を与える方法でバッチ集計とは異なります。
ストリーミングマテリアライズドビューの作成
次のチュートリアルでは、購入方法別の完了した販売数を維持するストリーミングマテリアライズドビューを作成します。ストリーム プロセッサは、sample_supplies.sales コレクションの変更ストリームを読み取り、sample_supplies.sales_by_channel コレクションに書き込み (write)ます。
注意
ストリーム プロセッサーは、また Apache Kafka トピックから読み取り、 AWS S3 上の Apache Iceberg テーブルへの書き込み (write) を行うこともできます。詳細については、Apache Kafka Broker および $iceberg 集計ステージ。を参照してください。
前提条件
Stream Processingプロセッサーを作成する前に、ソースデータを保持するクラスターへの Atlas 接続を含む Stream Processingワークスペース が必要です。接続を追加するには、接続の管理 を参照してください。
このセクションのコマンドをクラスターに対して実行します。接続するには、「mongosh を使用してクラスターに接続する」を参照してください。
ソース コレクションを準備し、ビューをシードするには、次の手順に従ってください。
サンプル データセットをロードします。
この手順では、sample_supplies データセットの sales コレクションを使用します。サンプル データのロード方法を学ぶには、Atlas 配置へのサンプル データのインポートを参照してください。
ビューに現在の結果をシードします。
クラスターに対して次のバッチする集計を実行し、ビューに現在のカウントを移入します。
db.sales.aggregate([ { $match: { status: "completed" } }, { $group: { _id: "$purchaseMethod", active_count: { $sum: 1 } } }, { $merge: { into: "sales_by_channel", whenMatched: "replace", whenNotMatched: "insert" } }])シードされたカウントを確認するには、ビューをクエリします。sales_by_channel コレクションには、購入方法ごとに 1 つのドキュメントが含まれています。
db.sales_by_channel.find()このシード集計は、それ自身が オンデマンド マテリアライズドビュー です。2 つのビュー タイプは相補的です。バッチする集計でオンデマンド マテリアライズドビューを初期化し、同じコレクションを現在の状態に保つストリーム プロセッサーを起動できます。オンデマンド ビューはストリーミング マテリアライズドビューになります。
注意
パイプラインでウィンドウステージを使用しない場合は、代わりに initialSync を使用してビューにシードすることができます。この場合、ストリームプロセッサーはまず、ソース コレクション内の存在するすべてのドキュメントを挿入イベントとして取り込み、次に新しい変更イベントを処理します。$source オプション initialSync について学ぶには、MongoDB コレクション変更ストリーム。を参照してください。
手順
Atlas UI または mongosh を選択してストリームプロセッサーを作成します。
ビューが最新の状態に保たれていることを確認します
このセクションのコマンドをクラスターに対して実行します。接続するには、「mongosh を使用してクラスターに接続する」を参照してください。
プロセッサーを開始すると、sales コレクションへの変更は数秒以内に sales_by_channel を更新します。これを確認するには、新しい完了したオンライン販売を挿入します。
db.sales.insertOne({ saleDate: new Date(), purchaseMethod: "Online", status: "completed", items: [], customer: {}, couponUsed: false})プロセッサーは Online カウントを増分し、ウィンドウ境界を lastWindowStart にレコードします。
db.sales_by_channel.find()[ { _id: 'Phone', active_count: 596 }, { _id: 'Online', active_count: 1586, lastWindowStart: ISODate('2026-07-23T15:18:01.000Z') }, { _id: 'In store', active_count: 2819 }]カスタマーがその販売を返品すると、Online カウントはシード値に戻ります。
db.sales.updateOne( { purchaseMethod: "Online", status: "completed" }, { $set: { status: "returned" } })db.sales_by_channel.find()[ { _id: 'Phone', active_count: 596 }, { _id: 'Online', active_count: 1585, lastWindowStart: ISODate('2026-07-23T15:18:13.000Z') }, { _id: 'In store', active_count: 2819 }]例
これらの例では、Atlas Stream Processing の例リポジトリの smv の例 について説明します。優先順位ごとに 1 つのドキュメントを保持し、開始されたサポート チケットの実行中のカウントを保持する queue_stats コレクションを維持します。ストリームプロセッサは support_tickets 変更ストリームを読み取り、チケットが開始、解決、削除されるたびに各カウントを更新します。
詳細情報
このガイドのステージと概念についてさらに学ぶには、次のリソースを参照してください。
ストリーム プロセッサーの作成、開始、停止、モニターについては、ストリーム プロセッサーの開発と管理を参照してください。
Atlas Stream Processing がサポートする集計ステージについて学ぶには、Stream Processing 用集計パイプライン ステージ を参照してください。
Stream Processing が読み取り可能なソースについて学ぶには、
$sourceステージ (Stream Processing)。 を参照してください。ウィンドウステージについて学ぶには、Stream Processor Windows. を参照してください。
オンデマンドのマテリアライズドビューの詳細については、「オンデマンドのマテリアライズドビュー」を参照してください。