AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

複数コレクションの最初の同期の設定

initialSync Atlas Stream Processing ストリームchangeEvent プロセッサが、変更ストリーム のテーリングを開始する前に ドキュメントを挿入したかのように$source Atlasコレクション内の既存のドキュメントを取り込むようにします。単一のinitialSync ステージで、複数のコレクションに対して を一度に実行できるようになりました。

このページでは、単一コレクションと複数コレクション同期の特性を比較し、複数コレクション同期の構成手順を説明し、その上に構築されたクロスクラスターレプリケーションパイプラインを示します。

coll$sourceステージの フィールドは、単一のコレクション名またはコレクション名の配列のいずれかを受け入れます。配列で名前を付けるすべてのコレクションは、db フィールドで指定したデータベースに属している必要があります。単一の$source ステージで複数のデータベースのコレクションを同期することはできません。指定する値によって、同期の範囲が決まります。

スコープ
$source 構成
動作

単一コレクション

db: "app", coll: "orders"

Atlas Stream Processing は、コレクション という名前の 1 つのコレクションを同期します。

Explicit list

db: "app", coll: ["a", "b", "c"]

Atlas Stream Processing は、リスト内の各コレクションを一覧表示の順序で同期します。

マルチコレクション initialSync操作には次の特徴があります。

  • リスト順にコレクションを同期します。coll: ["a", "b", "c"] の場合、Atlas Stream Processing は a のパーティションを b より先に、b のパーティションを c より先にドレインします。ただし、スピルオーバーによって、後のコレクションのパーティションでアイドル状態の容量が使用される場合を除きます。

  • 完了したコレクションを再同期せずに再開します。 Atlas Stream Processing はどのコレクションが終了したかを追跡するため、再起動されたストリーム プロセッサは完了したコレクションをスキップし、進行中のコレクションを最後に同期されたドキュメントから再開します。すでに出力したドキュメントが再配信される可能性があるため、繰り返されるドキュメントを冪等で処理するようにシンクを設計します。

  • コレクションレベルの詳細な同期の進行状況を公開します。 stats().stats.operatorStats[0].targetStats は、各 ターゲットコレクションの同期の進行状況とドキュメント数を報告します。詳しくは、「 最初の同期の進行状況を確認する 」を参照してください。

マルチコレクション initialSync は、ストリーム プロセッサの構成および操作方法に影響を与える方法が単一コレクション同期とは異なります。

  • 並列処理はグローバルであり、コレクションごとではありません。 を設定すると、コレクションごとではなく、ターゲットinitialSync.parallelism コレクションのセット全体でパーティションの同時読み取り数が制限されます。

  • キャッチアップ スコープは、ソース スコープの後にします。同期フェーズの後、Atlas Stream Processing は、ソースのスコープに一致する変更ストリームを開きます。たとえば、データベース全体のソースの場合はデータベースレベルの変更ストリーム、クラスター全体のソースの場合はクラスターレベルの変更ストリーム、またはフィルタリングされた変更ストリームはソースのスコープに一致します。コレクションの明示的なリスト。これを個別に構成する必要はありません。

  • コレクションの同期に失敗すると、プロセッサ全体が失敗します。単一コレクション同期の場合と同様に、Atlas Stream Processing がリスト内のいずれかのコレクションの同期に失敗すると、ストリーム プロセッサ全体が失敗します。

  • 一部のソース側構成は宛先に複製されません。 initialSync では、インデックス、Cappedコレクション、時系列コレクション、バリデーター、デフォルトの照合、ビュー定義などのコレクションオプションは複製されません。ストリーム プロセッサを起動する前に、宛先でこれらを作成します。 Atlas Stream Processing は、ストリーム プロセッサの起動後に作成したコレクションも検出しません。同期するコレクションのセットは、その点で 固定されています 。

次の手順では、sample_analytics データセットの 2 つのコレクション、customers(顧客プロファイルを保持)と accounts(各顧客の金融口座を保持)を使用します。この手順では、ある Atlas クラスターから別の Atlas クラスターに両方のコレクションをコピーし、ドキュメントを最新の状態に維持するストリームプロセッサを設定します。

この手順を完了する前に、以下の手順を行ってください。

このセクションのコマンドをクラスターに対して実行します。接続するには、「mongosh を使用してクラスターに接続する」を参照してください。

ソース コレクションを準備するには、次の手順を実行します。

2

手順の$source ステージで customersが設定されているため、accountsfullDocument: "required" コレクションと コレクションで変更前と変更後のイメージを有効にします。クラスターに対して次のコマンドを実行します。

db.getSiblingDB("sample_analytics").runCommand({
collMod: "customers",
changeStreamPreAndPostImages: { enabled: true }
})
db.getSiblingDB("sample_analytics").runCommand({
collMod: "accounts",
changeStreamPreAndPostImages: { enabled: true }
})

fullDocument: "required" の詳細については、「MongoDB コレクションの変更ストリーム」を参照してください。

Atlas UIまたは を選択して、ストリームmongosh プロセッサを構成します。

ストリーム プロセッサを起動した後、verbose オプションを指定して sp.<processor-name>.stats() を呼び出し、各ターゲットコレクションの同期進行状況を表示します。 stats.operatorStats のソース演算子のエントリでは、コレクションごとに 1 つの要素を含む targetStats 配列が報告されています。

sp.replicate_analytics_sp.stats(
{ options: { verbose: true } }
).stats.operatorStats[0].targetStats

各ターゲットの initialSync.statusフィールドは、Atlas Stream Processing が そのコレクションを同期 するときに、pending、in_progress、completed を通過します。また、同期が失敗した場合は failed を報告します。 estimatedDocs と copiedDocs は、その 1 つのコレクションの推定および完了したドキュメント数を報告します。

すべてのターゲットコレクションの合計進行状況を表示するには、ソース演算子独自の initialSyncフィールドを使用します。このフィールドでは、すべてのコレクションにわたる estimatedDocs と copiedDocs が合計されます。

sp.replicate_analytics_sp.stats(
{ options: { verbose: true } }
).stats.operatorStats[0].initialSync

上記の手順では、Atlas クラスター間で 2 つのコレクションを複製します。次の例では、同じパイプラインを別のコレクション セットに適用します。db coll$sourceステージの と の値のみが変更されます。

マルチコレクションの最初の同期と 動的名前空間ルーティング を組み合わせて、コレクション セットを複製します。

パイプラインはorders と customers の既存のドキュメントを同期し、その後は両方のコレクションに変更が発生するたびに複製を続行します。集計には、次の 3 つのステージがあります。

  1. $sourceステージでは、 でorders とcustomers <source-connection-name>を同期し、これら 2 つのコレクションにスコープが設定された変更ストリームを開きます。

  2. $replaceRootステージでは、 削除 イベントにはドキュメントキーが選択され、その他すべてのイベントには完全なドキュメントが選択されます。メタデータはドキュメント本体の一部ではないため、stream.source.* メタデータはこのステージを通過します。

  3. ステージでは、ソース $mergeイベントの名前空間メタデータを使用して書込みをルーティングし、宛先ドキュメントの挿入、置換、または削除のいずれかとして選択することで、各イベントを の一致操作コレクションに書込みます。<destination-connection-name>

sp = db.createStreamProcessor("replicate-app-db", [
{ $source: {
connectionName: "<source-connection-name>",
db: "app",
coll: ["orders", "customers"],
config: { fullDocument: "required" },
initialSync: { enable: true }
} },
{ $replaceRoot: {
newRoot: {
$cond: {
if: { $eq: [{ $meta: "stream.source.operationType" }, "delete"] },
then: { $meta: "stream.source.documentKey" },
else: "$fullDocument"
}
}
} },
{ $merge: {
into: {
connectionName: "<destination-connection-name>",
db: { $meta: "stream.source.ns.db" },
coll: { $meta: "stream.source.ns.coll" }
},
on: "_id",
whenMatched: { $cond: {
if: { $eq: [{ $meta: "stream.source.operationType" }, "delete"] },
then: "delete",
else: "replace"
} },
whenNotMatched: { $cond: {
if: { $eq: [{ $meta: "stream.source.operationType" }, "delete"] },
then: "discard",
else: "insert"
} }
} }
]);
sp.start();

このストリーム プロセッサを起動する前に、orders と customers が <destination-connection-name> で必要とするインデックス、コレクションオプション、またはビューを作成します。 initialSync はこれらを複製しません。

このガイドのステージと概念についてさらに学ぶには、次のリソースを参照してください。