변경 스트림은 데이터베이스에서 애플리케이션으로 흐르는 데이터베이스 변경의 실시간 스트림입니다. 이 기능을 사용하면 데이터베이스 변경 내용을 구독하여 사후 애플리케이션을 빌드할 수 있으므로 변경 내용을 감지하기 위한 연속 폴링이 필요하지 않습니다.
비고
Azure DocumentDB는 현재 단일 분할된 데이터베이스 클러스터에서 변경 스트림을 지원합니다. 가까운 장래에 다중 분할된 데이터베이스 클러스터에 대한 Change Stream 지원을 제공하기 위해 적극적으로 노력하고 있습니다.
Azure DocumentDB는 변경 스트림에 대해 400MB 시스템 관리 로그 제한을 적용합니다. 고객은 기록 변경 이벤트가 누락되는 것을 방지하기 위해 변경 스트림을 지속적으로 처리해야 합니다. 변경 스트림은 400MB 크기 제한의 시스템 관리 로그를 사용합니다. 다시 시작 토큰이 로그에서 롤아웃된 변경 이벤트를 참조하는 경우 해당 지점에서 변경 스트림을 다시 시작할 수 없으며 다시 시작해야 합니다. 가까운 장래에 추가 지원을 위한 미리 보기를 계획합니다.
변경 스트림 사용
Azure CLI 또는 ARM 템플릿을 사용하여 이 기능을 사용하거나 사용하지 않도록 설정할 수 있습니다. 포털 지원은 곧 추가될 예정입니다.
CLI를 통해 클러스터에서 변경 스트림을 사용하도록 설정하는 단계
- Azure CLI에 로그인
az login
- 클러스터의 기능 플래그에 대한 현재 설정을 검색합니다. 이렇게 하면 새 기능을 추가하는 동안 기존 플래그를 유지할 수 있습니다.
az resource show --ids "/subscriptions/<sub id>/resourceGroups/<resource group name>/providers/Microsoft.DocumentDB/mongoClusters/<resource name of your Azure DocumentDB cluster>" --api-version 2024-10-01-preview
- PATCH 요청을 보내 기능을 사용하도록 설정합니다.
az resource patch --ids "/subscriptions/<subscription_id>/resourceGroups/<resource_group_name>/providers/Microsoft.DocumentDB/mongoClusters/<cluster-name>" --api-version 2024-10-01-preview --properties "{\"previewFeatures\": [ \"ChangeStreams\"]}"
- 결과 확인:
- 응답 페이로드에
"previewFeatures": ["ChangeStreams"]가 포함되어 있는지 확인합니다. - "변경 스트림이 이 클러스터에서 지원되지 않음" 오류가 발생하는 경우 지원 요청을 만드세요.
- 응답 페이로드에
변경 스트림 구성
이 예제 코드는 exampleCollection 컬렉션에서 변경 스트림을 시작하여 변동 사항을 지속적으로 모니터링합니다. 변경 내용이 검색되면 변경 이벤트를 검색하고 JSON 형식으로 출력합니다.
// Open a change stream
const changeStream = db.exampleCollection.watch();
// Listen for changes
while (changeStream.hasNext())
{
const change = changeStream.next();
printjson(change);
}
Important
변경 스트림은 커서를 열 때 resumeAfter에 재시작 토큰을 지정하여 다시 시작할 수 있습니다. 하지만 토큰과 연결된 작업을 찾을 수 있는 충분한 기록이 있을 것으로 예상됩니다. 변경 스트림에서 _id 필드로 관찰된 문서는 다시 실행 가능한 토큰을 나타냅니다.
cursor = db.exampleCollection.watch(resume_after=resume_token)
변경 스트림을 사용하여 데이터베이스 변경 모니터링
예제를 통해 변경 스트림 출력을 이해해 보겠습니다.
이 변경 스트림 이벤트에서 우리는 새 레코드가 inserted 데이터베이스의 exampleCollection 컬렉션에 cs 되었음을 확인할 수 있으며, 이벤트 세부 정보에 새로 추가된 문서의 전체 콘텐츠가 포함되어 있습니다.
{
"_id": { "_data": "AeARBpQ/AAAA" }, // "resume_token"
"operationType": "insert",
"fullDocument": {
"_id": { "$oid": "66e6f63e6f49ecaabf794958" },
"employee_id": "17986",
"name": "John",
"position": "Software Engineer",
"department": "IT",
"rating": 4
},
"ns": { "db": "cs", "coll": "exampleCollection" },
"documentKey": { "_id": { "$oid": "66e6f63e6f49ecaabf794958" } }
}
변경 스트림에서 데이터 개인 설정
구성 중에 하나 이상의 파이프라인 단계 배열을 지정하여 변경 스트림 출력을 사용자 지정합니다. 지원되는 연산자는 다음과 같습니다.
$addFields$match$project$set$unset
제한점
- 다중 분할된 데이터베이스 클러스터의 변경 스트림 이벤트는 아직 지원되지 않습니다.
- 변경 스트림 커서는 현재 상태에서 장애 전환 이벤트 후 다시 초기화해야 합니다.
-
Update이벤트는 아직 업데이트 설명을 지원하지 않습니다. -
pre-image는 지원되지 않는 옵션입니다. -
$changestream다른 단계의 중첩된 파이프라인은 아직 지원되지 않습니다.