Menu Docs
Página inicial do Docs
/ / /
Mongoid
/ /

queries assíncronas

Neste guia, você pode aprender como realizar queries assíncronas no Mongoid. Você pode executar queries de banco de dados de forma assíncrona em segundo plano, o que pode ser benéfico se o seu aplicação recuperar documentos de várias coleções.

Para agendar uma query assíncrona, chame o método load_async em uma instância do Criteria, como mostrado no seguinte código:

@active_bands = Band.where(active: true).load_async
@public_articles = Article.where(public: true).load_async

O código anterior agenda as queries para execução assíncrona. Você pode então acessar os resultados das queries em sua visualização, como faz normalmente para queries síncronas.

Mesmo se você agendar uma query para execução assíncrona, ela poderá ser executada de forma sincronizada na conversa do chamador. A lista a seguir descreve possíveis cenários em que essa situação pode ocorrer:

  • Se o Mongoid concluir a tarefa assíncrona agendada, ele retornará os resultados.

  • Se o Mongoid iniciar, mas não concluir a tarefa, o thread do chamador bloqueará até que o Mongoid termine a tarefa.

  • Se o Mongoid ainda não tiver iniciado uma tarefa, ela será removida da fila de execução e o Mongoid executará a query de forma síncrona na thread do chamador.

Observação

Mesmo que o método load_async devolva um objeto Criteria, não execute nenhuma operação neste objeto além de acessar os resultados da query. O Mongoid agenda a query para execução imediatamente após chamar load_async, portanto, alterações posteriores no objeto Criteria podem não ser aplicadas.

As queries assíncronas são desativadas por padrão. Quando as queries assíncronas estão desativadas, o método load_async executa a query imediatamente na thread atual, bloqueando conforme necessário. Portanto, chamar load_async em uma instância Criteria nessa situação é semelhante a chamar o método to_a para forçar a execução da query.

Para habilitar a execução de query assíncrona, você deve definir as seguintes opções de configuração:

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

Para saber mais sobre como configurar o Mongoid em seu aplicação, consulte o guiade configuração do aplicativo.

Para saber mais sobre como executar operações CRUD, consulte o guia Executar operações de dados.

Voltar

Cache de consulta

Nesta página