Docs Menu

비동기 쿼리

이 가이드 에서는 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 작업 수행에 대해 자세히 학습 데이터 작업 수행 가이드 참조하세요.