Overview
En esta guía, puedes aprender cómo realizar queries asincrónicas en Mongoid. Puede ejecutar queries de base de datos de forma asíncrona en segundo plano, lo que puede ser beneficioso si tu aplicación recupera documentos de varias colecciones.
Ejecutar consultas asíncronas
Para programar una query asíncrona, llama al load_async método en una instancia Criteria, como se muestra en el siguiente código:
@active_bands = Band.where(active: true).load_async @public_articles = Article.where(public: true).load_async
El código anterior programó las queries para su ejecución asíncrona. Luego puedes acceder a los resultados de las queries en tu vista como lo harías normalmente con las queries sincrónicas.
Incluso si programas una query para su ejecución asincrónica, podría ejecutarse de manera sincrónica en el hilo de quien llama. La siguiente lista describe los posibles escenarios en los que esta situación podría ocurrir:
Si Mongoid completa la tarea asincrónica programada, devuelve los resultados.
Si Mongoid se inicia pero no completa la tarea, el hilo del que realiza la llamada se bloquea hasta que Mongoid termine la tarea.
Si Mongoid aún no ha iniciado una tarea, esta se elimina de la cola de ejecución y Mongoid ejecuta la query de manera sincrónica en el hilo que llama.
Nota
Aunque el método load_async devuelve un objeto Criteria, no realices ninguna operación en este objeto aparte de acceder a los resultados de la query. Mongoid programa la query para su ejecución inmediatamente después de llamar a load_async, por lo que es posible que los cambios posteriores en el objeto Criteria no se apliquen.
Configurar el rendimiento de query
Las consultas asíncronas están desactivadas por defecto. Cuando las queries asíncronos están deshabilitados, el método load_async realiza la query inmediatamente en el hilo actual, bloqueando según sea necesario. Por lo tanto, invocar load_async en una instancia de Criteria en esta situación es similar a invocar el método to_a para forzar la query.
Para habilitar la ejecución asíncrona de consultas, debes configurar las siguientes opciones:
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
Información Adicional
Para obtener más información sobre cómo configurar Mongoid en tu aplicación, consulta el Guía para conectar a MongoDB.
Para aprender más sobre cómo realizar operaciones CRUD, consulte la guía de Operaciones CRUD.