Então eu fiz esta pergunta:
Configurando o Mongo com clustering
Mas eu não sabia o suficiente até ler as respostas e fazer mais pesquisas. É melhor usar Map-reduce ou sharding para sistemas de ritmo acelerado com ~ 100 consultas, todas feitas ao mesmo tempo? A fragmentação deslocará meus dados entre os clusters e parece que basicamente faz uma redução de mapa ou classificação. Se eu fosse usar map-reduce para tais consultas, deveria fazê-lo com um cluster também? Em caso afirmativo, é fácil começar com um servidor Mongo e, posteriormente, usar um cluster e distribuir as tarefas de redução de mapa para o cluster? Ou estou confuso sobre o que acho que preciso realizar?
Não está claro o que você quer dizer comparando map-reduce com sharding. Mas a resposta curta é: sharding .
De um modo geral, você projeta consultas de redução de mapa, não deseja que centenas de consultas de redução de mapa sejam executadas de uma só vez - você apenas sobrecarregaria o mongo, pois isso significa essencialmente centenas de varreduras de coleção completas sendo executadas ao mesmo tempo.
Se você tiver um exemplo de uma de suas consultas de redução de mapa existentes - adicione-o à sua pergunta.
Em relação à fragmentação, tudo se resume ao que você usa para a chave de fragmentação.
Se você fragmentar uma coleção de usuários em nome de usuário, por exemplo,
fará com que os mongos enviem a consulta para todos os shards e mesclem os conjuntos de resultados (de forma inteligente). Adicionando a chave de fragmentação à consulta:
daria aos mongos a opção de falar com menos mongodes por vez.
um exemplo melhor, se você consultar:
mongos enviará a consulta para os shards cujas chaves de shard indicam que eles podem conter respostas, provavelmente é um servidor apenas, resultando em uma consulta rápida e sem carga extra por parte dos mongos.
Talvez os exemplos acima não sejam novidade para você.
As consultas que você envia para o mongo agora são a mesma sintaxe que você usaria para enviar para um banco de dados fragmentado. A única coisa que você faria diferente é (anteriormente) analisar em quais chaves fragmentar para que você possa, quando necessário, modificar suas consultas para incorporar a chave de fragmentação e, assim, permitir que os mongos atuem como um proxy em vez de um agregador.
Uma chave de fragmentação ruim, ou simplesmente não aproveitar a fragmentação nas consultas que você está gerando, resultaria na necessidade de mongos consultar todos os servidores mongod para todas as consultas, resultando em alta carga e baixo desempenho.