Isso não é uma questão de configuração. Suas consultas normais são enviadas para o primário atual. Portanto, tudo o que você precisa fazer é garantir que as operações em lote (suponho que as agregações e / ou tarefas mapReduce) sejam executadas em um secundário. Você pode fazer isso definindo o readPreference como secondary
ou secondaryPreferred
.
Isso traz alguns inconvenientes sérios:
- Os trabalhos do mapReduce não podem sempre mostrar os resultados inline e não podem ser salvos. Uma maneira de atenuar esse problema é salvar os resultados do lado do aplicativo.
- As agregações com um estágio
$out
serão executadas no primário, independentemente da preferência de leitura definida - Dependendo de suas configurações de preocupação de gravação, seus secundários podem conter dados que não estão atualizados. Isso pode ser um problema em algumas situações.
Caso seja impossível usar uma preferência de leitura de secondary
ou secondaryPreferred
, a única maneira de minimizar a carga de operações de longa execução, como agregações, é o compartilhamento de tarefas mapReduce, dividindo a carga em várias máquinas. Observe que, para implementar essa distribuição de carga, é necessário planejamento cuidadoso e modelagem de dados.