Learn the "why" behind slow queries and how to fix them in our 2-Part Webinar.
Register now >
Menu Docs
Página inicial do Docs
/ /

Cache de consulta

Neste guia, você aprenderá sobre cache de query. O cache de query salva os resultados de queries de localização e agregação anteriores e os reutiliza no futuro. Isso impede que o Mongoid execute as queries novamente, aumentando o desempenho do aplicação e reduzindo a carga do banco de dados .

Nesta seção, você pode aprender como habilitar o recurso de cache de query em seu aplicação. Você pode habilitar o cache de query usando o namespace do driver ou o namespace do Mongoid.

The Ruby driver provides middleware to automatically enable the query cache for Rack web requests and Active Job job runs.

Observação

O middleware de cache de query não se aplica ao código executado fora de solicitações ou trabalhos da web.

O driver Ruby fornece um middleware Rack que habilita o cache de query durante cada solicitação da web. O código a seguir demonstra como habilitar o Query Cache Middleware em uma aplicação Ruby on Rails :

config/application.rb
# Add Mongo::QueryCache::Middleware at the bottom of the middleware
# stack or before other middleware that queries MongoDB.
config.middleware.use Mongo::QueryCache::Middleware

Para saber mais sobre como usar o middleware Rack em aplicativos Rails, consulte Configurando a pilha de middleware na documentação do Rails.

O driver Ruby fornece Query Cache Middleware para Active Job. Você pode habilitá-lo para todos os trabalhos em um inicializador, conforme mostrado no código a seguir:

config/initializers/active_job.rb
# Enable Mongo driver query cache for Active Job
ActiveSupport.on_load(:active_job) do
include Mongo::QueryCache::Middleware::ActiveJob
end

Você também pode habilitá-lo para uma classe de tarefa específica, como mostrado no seguinte código:

class MyJob < ActiveJob::Base
include Mongo::QueryCache::Middleware::ActiveJob
end

Para ativar o cache de query manualmente para um segmento de código específico, você pode executar seu código no seguinte bloco:

Mongo::QueryCache.cache do
# Include code here ...
end

Você pode habilitar e desabilitar explicitamente o cache de query, mas recomendamos usar o formulário de bloqueio no exemplo de código anterior. O seguinte código demonstra como habilitar e desabilitar o cache de query:

begin
Mongo::QueryCache.enabled = true
# Include code here
ensure
Mongo::QueryCache.enabled = false
end

A chamada do método first em uma classe de modelo usa uma classificação crescente no campo _id ao retornar o resultado. Isso pode produzir um comportamento inesperado se você habilitar o cache de query.

Por exemplo, se você chamar o método all em uma classe de modelo antes de chamar first, poderá esperar que o método first use os resultados em cache de all. No entanto, como o Mongoid aplica uma classificação à segunda chamada, ambos os métodos executam query do banco de dados e armazenam separadamente os resultados em cache.

Para usar os resultados armazenados em cache ao chamar o método first, chame all.to_a.first na classe de modelo, conforme mostrado no código de exemplo a seguir:

Band.all.to_a.first

No exemplo anterior, encadear o método to_a executa a query e converte os resultados em uma array na memória. Em seguida, o método first simplesmente retorna a primeira entrada da array em vez de disparar outra query e armazenar os resultados em cache.

Para saber mais sobre como criar critérios de filtro, consulte o guia Especificar uma query de documento.

Para saber como personalizar seu destino de persistência, consulte o guia Configuração de persistência .

Voltar

Persistir dados de queries

Nesta página