테일 커서(tailable cursor)
기본값 으로 MongoDB 는 클라이언트 가 커서 의 모든 결과를 소진하면 자동으로 커서 를 닫습니다. 그러나 고정 사이즈컬렉션 의 경우 클라이언트 가 초기 커서 의 결과를 모두 사용한 후에도 계속 열려 있는 테일 커서( tailable cursor) 를 사용할 수 있습니다. 테일 커서(tailable cursor)는 개념적으로 -f
옵션("팔로우" 모드)이 있는 tail
Unix 명령과 동일합니다. 클라이언트가 고정 사이즈 고정 사이즈 컬렉션 에 추가 문서를 삽입한 후 테일 커서( tailable cursor )는 계속해서 문서를 조회 합니다.
사용 사례
인덱스가 실용적이지 않은 경우 쓰기 볼륨이 큰 고정 사이즈 컬렉션에 테일 커서를 사용하세요. 예를 들어, MongoDB 복제는 테일 커서를 사용하여 프라이머리의 oplog를 추적합니다.
참고
쿼리가 인덱스 필드에 있는 경우 테일 커서(tailable cursor) 대신 일반 커서를 사용합니다. 쿼리에서 반환된 인덱싱된 필드의 마지막 값을 추적합니다. 새로 추가된 문서를 조회하려면 쿼리 조건에 있는 인덱싱된 필드의 마지막 값을 사용하여 컬렉션을 다시 쿼리합니다. 예시:
db.<collection>.find( { indexedField: { $gt: <lastvalue> } } )
시작하기
mongosh
에서 테일 커서(tailable cursor)를 만들려면 cursor.tailable()
을 참조하세요.
드라이버용 tailable cursor 메서드는 드라이버 설명서를 참조하세요.
행동
테일 커서와 관련된 다음 동작을 고려하세요.
테일 커서는 인덱스를 사용하지 않습니다. 문서를 기본 순서로 반환합니다.
테일 커서는 인덱스를 사용하지 않기 때문에 쿼리를 처음 스캔하는 데 비용이 많이 들 수 있습니다. 처음에 커서를 많이 소모한 후에는 새로 추가된 문서를 후속 조회하는 데에는 비용이 적게 듭니다.
현재 위치의 데이터를 새 데이터로 덮어쓰면 테일 커서(tailable cursor)가 유효하지 않게 될 수 있습니다. 예를 들어, 데이터 삽입 속도가 커서 반복 속도보다 빠른 경우 이런 일이 발생할 수 있습니다.