アーカイブされたデータの復元
アーカイブされたデータは Atlas クラスターに復元できます。 Atlas Data Federation が$mergeパイプライン ステージに対して提供する代替構文を使用して、同じ Atlas プロジェクト内の同じまたは異なる Atlas クラスター、データベース、またはコレクションにデータを移動できます。
注意
クラスターがアーカイブから復元されるデータ量に十分にプロビジョニングされていることを確認し、アーカイブ データの復元中または復元後にスペースが不足しないようにしてください。 oplog のサイズ設定に関する追加の技術ガイダンスや、Atlas クラスターのスペースの問題のトラブルシューティングについては、サポートにお問い合わせください 。
このページでは、 $merge
パイプライン ステージまたは MongoDB ツールを使用してアーカイブ データを復元する方法について説明します。
必要なアクセス権
この手順に従うには、プロジェクトに対するProject Data Access Admin
以上のアクセス権が必要です。
手順
データセットが小さい場合は、 $merge
ステージを使用してアーカイブ データを Atlas クラスターに移動できます。 このアプローチは、多数のパーティションを持つ大規模なデータセット(約1 TB のデータ)には推奨されません。
アーカイブ済みデータを復元するコレクションに関連付けられている Atlas Online Archive を一時停止します。
詳細については、「アーカイブの一時停止と再開」を参照してください。
接続文字列を使用して Atlas Online Archive に接続します。
Atlas Online Archive に接続するには、{0 接続 を使用する必要があります。Archive Onlystring詳細については、「 Atlas Online Archive への接続 」を参照してください。
$merge
を使用して、アーカイブから Atlas クラスターにデータを移動します。
Atlas クラスターにデータを移動するための$merge
パイプライン ステージの構文と使用方法の詳細については、 $mergeパイプライン ステージを参照してください。
例
S3アーカイブ内の次のドキュメントを検討してみましょう。
{ "_id" : 1, "item": "cucumber", "source": "nepal", "released": ISODate("2016-05-18T16:00:00Z") } { "_id" : 2, "item": "miso", "source": "canada", "released": ISODate("2016-05-18T16:00:00Z") } { "_id" : 3, "item": "oyster", "source": "luxembourg", "released": ISODate("2016-05-18T16:00:00Z") } { "_id" : 4, "item": "mushroom", "source": "ghana", "released": ISODate("2016-05-18T16:00:00Z") }
$merge
これらのドキュメントを Atlas クラスターに復元するためのitem
構文では、source
$merge
ステージ中に フィールドと フィールドに基づいてドキュメントが識別されます。
db.<collection>.aggregate([ { "$merge": { "into": { "atlas": { "clusterName": "<atlas-cluster-name>", "db": "<db-name>", "coll": "<collection-name>" } }, "on": [ "item", "source" ], "whenMatched": "keepExisting", "whenNotMatched": "insert" } } ])
この例では、アーカイブされたドキュメントが Atlas クラスターの 2 つのフィールドにあるドキュメントと一致する場合、Atlas は既存のドキュメントをクラスターに保持します。Atlas クラスター上のドキュメントのコピーはアーカイブ内のドキュメントのコピーよりも新しいためです。 。 アーカイブされたドキュメントが Atlas クラスター内のどのドキュメントとも一致しない場合、Atlas は Atlas クラスター上の指定されたコレクションにドキュメントを挿入します。
Atlas クラスターにデータを復元する場合、アーカイブされたデータに重複する_id
フィールドが含まれる場合があります。 この例では、 ステージの前に フィールドと $merge
フィールドでソートするための ステージを含めることができ、解決する重複がある場合に Atlas$sort
が最新の日付を持つドキュメントを選択するようにします。_id
released
注意
複数のon
フィールドがある場合は、 on
識別子フィールドに複合一意のインデックスを作成する必要があります。
db.<collection>.createIndex( { item: 1, source: 1 }, { unique: true } )
または、一時コレクションに対して、 on
識別子フィールドごとに 1 つずつ、マージを順番に指定します。 次に、クラスターの 接続文字列を使用して、一時コレクションのデータをターゲット コレクションにマージします。 引き続き、各 on
識別子フィールドに一意のインデックスを作成する必要があります。
集計ステージは、 background
フラグをtrue
に設定することで、バックグラウンドで実行できます。 mongosh
でこのコマンドを実行するには、 db.runCommand
を使用します。
db.runCommand( "aggregate": "<collection>", "pipeline": [ { $sort: { "_id": 1, "released": 1, } }, { "$merge": { "into": { "atlas": { "clusterName": "<atlas-cluster-name>", "db": "<db-name>", "coll": "<collection-name>" } }, "on": [ "item", "source" ], "whenMatched": "keepExisting", "whenNotMatched": "insert" } } ], {"background": true} )
重複フィールドの解決の詳細については、 $merge に関する考慮事項 を参照してください。
Atlas クラスター内のデータを確認し、オンライン アーカイブを削除します。
詳細については、「 Atlas Online Archive の削除」を参照してください。
注意
Atlas クラスターへのデータの移行中に問題が発生した場合は、サポート にお問い合わせください。