이 페이지에서는 $merge 파이프라인 단계를 사용하여 보관된 특정 데이터를 복원 방법을 설명합니다. 이 접근 방식을 사용하면 특정 기준에 따라 보다 세분화된 복원 실행할 수 있습니다. 전체 클러스터 복원 해야 하는 경우 아카이브된 데이터 백업 및 복원 에서 자세한 내용을 참조하세요.
참고
클러스터 가 보관에서 복원 하려는 데이터의 양에 맞게 적절히 프로비저닝되었는지 확인합니다. 그렇지 않으면 복원 중이나 후에 공간이 부족 실행 위험이 있습니다. oplog 크기 설정에 대한 추가 기술 지침 이나 Atlas 클러스터의 공간 문제 해결에 대한 자세한 내용은 지원팀에 문의하세요.
필요한 액세스 권한
이 절차를 수행하려면 프로젝트에 대한 Project Data Access Admin 이상의 액세스가 필요합니다.
고려 사항
이 접근 방식은 파티션 수가 많은 대규모 데이터 세트(약 1TB의 데이터)에는 권장되지 않습니다.
절차
보관된 특정 데이터를 Atlas cluster 로 복원 하려면 다음 단계를 수행하세요.
복원 하려는 보관된 데이터가 포함된 컬렉션 과 연결된 Online 보관 일시 중지합니다.
자세한 내용은 보관 일시 중지 및 다시 시작을 참조하세요.
연결 문자열 사용하여 Online 보관 에 연결합니다.
Online 보관 에 연결하려면 Archive Only 연결 string 을 사용해야 합니다. 학습 내용은 Connect to Online 보관(온라인 아카이브에 연결하기)를 참조하세요.
단계를 사용하여 아카이브에서 Atlas cluster 로 데이터를 $merge 이동합니다.
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 단계에서 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" } } ])
이 코드는 다음 로직을 사용합니다.
보관된 문서 가
item및source필드의 Atlas cluster 에 있는 문서 와 일치하는 경우, Atlas cluster 의 문서 사본이 보관된 버전보다 최신이기 때문에 Atlas 기존 문서 클러스터 에 유지합니다.보관된 문서 Atlas cluster 의 어떤 문서 도 일치하지 않는 경우, Atlas 해당 문서 Atlas cluster 의 지정된 컬렉션 에 삽입합니다.
Atlas 클러스터로 데이터를 복원할 때 보관된 데이터에 중복된 _id 필드가 있을 수 있습니다. 이 예시 에서는 $sort 단계를 _id 및 released 필드에서 $merge 단계 이전에 정렬하여 해결해야 할 중복이 있는 경우 Atlas 가장 최근 날짜가 있는 문서를 선택하도록 할 수 있습니다.
다음 코드 샘플 $sort 단계를 추가합니다.
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" } } ], "cursor": { } }, { "background": true } )
중복 필드 해결에 대해 자세히 알아보려면 $merge 고려 사항을 참조하세요.
참고
on 필드가 여러 개 있는 경우 on 식별자 필드에 복합 고유 인덱스 를 만들어야 합니다.
db.<collection>.createIndex( { item: 1, source: 1 }, { unique: true } )
또는 각 on 식별자 필드 에 대해 하나씩 임시 컬렉션 에 병합을 순차적으로 지정합니다. 그런 다음 클러스터의 연결 문자열 사용하여 임시 컬렉션 의 데이터를 대상 컬렉션 에 병합합니다. 여전히 각 on 식별자 필드 에 대해 고유 인덱스 만들어야 합니다.
background 플래그를 true로 설정하여 배경 에서 집계 단계를 실행 수 있습니다. mongosh에서 이 명령을 실행 하려면 db.runCommand를 사용합니다.
Atlas 클러스터의 데이터를 확인하고 온라인 아카이브를 삭제합니다.
자세한 내용은 온라인 아카이브 삭제를 참조하세요.
참고
Atlas cluster 로 데이터를 다시 마이그레이션하는 실행 문제가 발생하는 경우 지원팀에 문의 하세요 .