Docs 菜单

异步查询

在本指南中,您可以学习;了解如何在 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 的更多信息,请参阅 应用程序配置指南。

要学习;了解有关执行增删改查操作的更多信息,请参阅执行数据操作指南。