커서에서 데이터 액세스
개요
이 가이드 에서는 Java Reactive Streams 운전자 를 사용하여 커서 에서 데이터에 액세스 하는 방법을 학습 수 있습니다.
커서는 읽기 작업의 결과를 반복 가능한 배치로 반환하는 메커니즘입니다. 커서는 주어진 시간에 문서의 하위 집합만 보유하기 때문에 커서는 메모리 소비와 네트워크 대역폭 사용량을 모두 줄입니다.
Java Reactive Streams 운전자 에서 일부 스트림은 커서로 지원됩니다. 이러한 기본 커서에 사용되는 배치의 크기는 Publisher
에 대한 Subscription
에서 요청된 수요에 따라 달라집니다. 각 기본 커서 에 포함된 데이터의 배치 크기는 FindPublisher.batchSize()
메서드를 사용하여 설정하다 수 있습니다.
샘플 데이터
이 가이드 의 예제에서는 Atlas 샘플 데이터 세트 의 sample_restaurants.restaurants
컬렉션 을 사용합니다. 무료 MongoDB Atlas cluster 를 생성하고 샘플 데이터 세트를 로드하는 방법을 학습 보려면 시작하기 가이드 를 참조하세요.
중요
프로젝트 리액터 라이브러리
이 가이드 에서는 Project Reactor 라이브러리를 Publisher
사용하여 Java Reactive Streams 운전자 메서드에서 반환된 인스턴스를 사용합니다. 프로젝트 Reactor 라이브러리와 사용 방법에 학습 보려면 Reactor 문서에서 시작하기 를 참조하세요. 이 가이드 에서 Project Reactor 라이브러리 메서드를 사용하는 방법에 학습 보려면 MongoDB 에 데이터 쓰기 가이드 를 참조하세요.
반복적으로 커서 내용에 액세스
커서 의 내용을 반복하려면 다음 예시 와 같이 Flux.from()
메서드를 사용합니다.
FindPublisher<Document> findPublisher = collection.find(); Flux.from(findPublisher) .doOnNext(x -> System.out.println(x.getString("name"))) .blockLast();
모든 문서 검색
경고
쿼리에서 반환되는 문서의 수와 크기가 사용 가능한 애플리케이션 메모리를 초과하면 프로그램이 충돌합니다. 큰 결과 세트가 예상되는 경우 커서에 반복적으로 액세스합니다.
커서 에서 모든 문서를 조회 하려면 다음 예시 와 같이 커서 를 List
로 변환합니다.
FindPublisher<Document> findPublisher = collection.find(Filters.eq("name", "Dunkin' Donuts")); List<Document> resultsList = Flux.from(findPublisher).collectList().block();
테일 커서(tailable cursor)
고정 사이즈 고정 사이즈 컬렉션 을 쿼리할 때는 클라이언트 가 커서 의 결과를 모두 사용한 후에도 계속 열려 있는 테일 커서( tailable cursor )를 사용할 수 있습니다. 고정 사이즈 고정 사이즈 컬렉션 에 테일 커서( tailable cursor )를 만들려면 FindPublisher
객체 의 cursorType()
메서드에 CursorType.TailableAwait
값을 전달합니다.
다음 예시 에서는 컬렉션 에 테일 커서( tailable cursor )를 생성하고 해당 내용을 출력합니다.
FindPublisher<Document> findPublisher = collection.find().cursorType(CursorType.TailableAwait); Flux.from(findPublisher) .doOnNext(System.out::println) .blockLast();
테일 커서(tailable cursor) 및 사용법에 학습 보려면 MongoDB Server 매뉴얼의 테일 커서(tailable cursor) 가이드 를 참조하세요.
API 문서
이 가이드에서 사용되는 메서드 또는 유형에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.