Overview
En esta guía, aprenderá a realizar consultas asincrónicas en Mongoid. Puede ejecutar consultas de base de datos de forma asincrónica en segundo plano, lo cual puede ser beneficioso si su aplicación recupera documentos de varias colecciones.
Ejecutar consultas asincrónicas
Para programar una consulta asincrónica, llame 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 programa una consulta para su ejecución asincrónica, podría ejecutarse sincrónicamente en el hilo del llamador. La siguiente lista describe posibles escenarios en los que esto 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 llamador se bloquea hasta que Mongoid finalice la tarea.
Si Mongoid aún no ha iniciado una tarea, se elimina de la cola de ejecución y Mongoid ejecuta la consulta de forma sincrónica en el hilo del llamador.
Nota
Aunque el método load_async devuelve un objeto Criteria, no realice ninguna operación en este objeto aparte de acceder a los resultados de la consulta. Mongoid programa la ejecución de la consulta inmediatamente después de llamar a load_async, por lo que los cambios posteriores en el objeto Criteria podrían no aplicarse.
Configurar el rendimiento de las consultas
Las consultas asincrónicas están deshabilitadas por defecto. Cuando están deshabilitadas, el método load_async ejecuta la consulta inmediatamente en el hilo actual, bloqueándose según sea necesario. Por lo tanto, llamar a load_async en una instancia Criteria en esta situación es similar a llamar al método to_a para forzar la ejecución de la consulta.
Para habilitar la ejecución de consultas asincrónicas, debe configurar las siguientes opciones de configuración:
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 su aplicación, consulte la Guíade configuración de la aplicación.
Para obtener más información sobre cómo realizar operaciones CRUD, consulta la guía Realiza operaciones de datos.