비동기 쿼리
개요
이 가이드 에서는 Mongoid에서 비동기 쿼리를 수행하는 방법을 학습 수 있습니다. 배경 에서 데이터베이스 쿼리를 비동기적으로 실행 수 있으며, 이는 애플리케이션 이 여러 컬렉션에서 문서를 검색하는 경우 유용할 수 있습니다.
비동기 쿼리 실행
비동기 쿼리 예정 하려면 다음 코드에 표시된 대로 Criteria
인스턴스 에서 load_async
메서드를 호출합니다.
@active_bands = Band.where(active: true).load_async @public_articles = Article.where(public: true).load_async
앞의 코드는 비동기 실행을 위한 쿼리를 예약합니다. 그런 다음 일반적으로 동기 쿼리에 대해 수행하는 것처럼 보기에서 쿼리 결과 액세스 할 수 있습니다.
쿼리 비동기 실행으로 예정 하더라도 호출자의 스레드에서 쿼리가 동기적으로 실행될 수 있습니다. 다음 목록에서는 이러한 상황이 발생할 수 있는 가능한 시나리오에 대해 설명합니다.
Mongoid가 예약된 비동기 작업 완료하면 결과를 반환합니다.
Mongoid가 시작되었지만 작업 완료하지 않으면 Mongoid가 작업 완료할 때까지 호출자의 스레드가 차단됩니다.
Mongoid가 아직 작업 시작하지 않은 경우, 해당 작업은 실행 대기열에서 제거되고 Mongoid는 호출자의 스레드에서 쿼리 동기적으로 실행합니다.
참고
load_async
메서드가 Criteria
객체 반환하더라도 이 객체 에 대해 쿼리 결과에 액세스하는 것 외에 어떤 작업도 수행하지 마세요. Mongoid는 load_async
를 호출한 직후에 쿼리 실행을 예약하므로 Criteria
객체 에 대한 이후 변경 사항이 적용되지 않을 수 있습니다.
쿼리 성능 구성
비동기 쿼리는 기본값 으로 비활성화되어 있습니다. 비동기 쿼리가 비활성화되면 load_async
메서드는 현재 스레드에서 즉시 쿼리 수행하고 필요에 따라 차단합니다. 따라서 이 상황에서 Criteria
인스턴스 에서 load_async
를 호출하는 것은 to_a
메서드를 호출하여 쿼리 강제로 실행하는 것과 유사합니다.
비동기 쿼리 실행을 활성화 하려면 다음 구성 옵션을 설정하다 해야 합니다.
development: ... options: # Execute asynchronous queries using a global thread pool. async_query_executor: :global_thread_pool # Number of threads in the pool. The default is 4. # global_executor_concurrency: 4
추가 정보
애플리케이션 에서 Mongoid를 구성하는 방법에 대해 자세히 학습 애플리케이션 구성 가이드 참조하세요.
CRUD 작업 수행에 대해 자세히 학습 데이터 작업 수행 가이드 참조하세요.