アーカイブされたデータの復元
アーカイブされたデータは 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 に接続するには、Archive Only 接続stringを使用する必要があります。 詳細については、「 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 クラスターへのデータの移行中に問題が発生した場合は、サポート にお問い合わせください。