Isso pode ser mais um conselho do que qualquer outra coisa, mas estou projetando um aplicativo que armazena em uma tabela objetos que possuem um índice 2dsphere e também possuem uma data (+hora), ambos fazendo parte de consultas que estou fazendo para recuperar alguns desses objetos.
Este banco de dados terá que ser fragmentado, então fragmentar de acordo com a chave espacial parece o primeiro passo. É basicamente um dado que esse índice fará parte da chave fragmentada. A outra chave deve ser o tempo, e tenho certeza de que o hash do tempo não será adequado, pois as consultas estão procurando o intervalo de datas para os objetos. Então, o hash forçará o acesso a todos os pedaços (com as restrições espaciais apropriadas), o que eu não quero.
Então, minha pergunta é saber se isso é viável e também se o mongodb será inteligente o suficiente para não dividir de acordo com a chave espacial, a menos que eu peça manualmente?
Um índice de chave de fragmentação não pode ser multichave, texto ou geoespacial , portanto, parte de sua abordagem teórica é definitivamente inviável. Você também menciona a possibilidade de fragmentação com hash em um campo de data e hora, o que poderia fornecer uma melhor distribuição de dados para valores que, de outra forma, aumentariam monotonicamente, como um carimbo de data/hora. No entanto, uma desvantagem é que a fragmentação com hash não oferece suporte a consultas de intervalo, pois os valores de origem adjacentes agora terão valores de chave de fragmentação distribuídos.
Como uma chave de fragmentação não pode ser uma matriz ou valor geoespacial, essa pergunta específica não se aplica.
O comportamento padrão da fragmentação do MongoDB é permitir que divisões de intervalo de chave de fragmentação (também conhecidas como "divisões de fragmentos") aconteçam automaticamente para que o balanceador de cluster fragmentado redistribua dados entre fragmentos com base em desequilíbrios de fragmentos. É possível ajustar o comportamento padrão (por exemplo, desabilitar divisões automáticas para um cluster ou balancear para uma coleção), mas você deve fazer isso apenas com cuidado. O microgerenciamento de um cluster fragmentado pode ser contraproducente.