Adicionar novo fragmento - sempre melhor? [fechadas]

2

Em nossa configuração, atualmente temos 3 shard set sharded cluster, cada shard sendo um conjunto de réplicas de 3. Nossas gravações estão prestes a aumentar significativamente para implementar um novo recurso, e sabemos que os dados extras serão necessários. A natureza de nossas gravações é basicamente todas as atualizações (que provavelmente serão atualizações) e atualizações nas quais incrementamos um campo específico em 1.

Nossas atualizações estão sempre sendo incrementadas em 1 e a forma como nossos dados são distribuídos, nem todos os documentos são tratados da mesma forma, alguns recebem seus campos incrementados muito mais. Uma solução alternativa que achei que poderia ser eficaz é ter algum tipo de intermediário, como alguns bancos de dados Redis (ou alguns mongods menores), onde fazemos as atualizações primeiro e depois de cerca de 5 minutos (ou use algum sistema de enfileiramento), nós temos um monte de trabalhadores que consomem os dados e atualizam o cluster atual com os documentos. Isso pouparia ao nosso cluster principal uma tonelada de gravações, pois permitiria que certos documentos pesados de atualização acumulassem suas atualizações e poderiam nos salvar uma tonelada de gravações (números exatos que postarei em breve em uma edição).

Assim, quando adicionar outro fragmento não é a solução correta?

    
por tonyl7126 17.05.2013 / 19:07

1 resposta

1

O Redis certamente pode ser usado como um método de cache / write-back para o MongoDB.

No entanto, Adicionar Shards é a principal maneira de aumentar a capacidade de gravação do seu aplicativo, se você já tiver esgotado as opções de adicionar memória, usar discos mais rápidos, etc.

Além disso, esteja ciente das tendências de bloqueio de gravação do MongoDB. O Mongo permite que o kernel gerencie o que está armazenado na RAM, portanto, uma melhor prática ao executar um upsert é primeiro ler o objeto (para que ele seja armazenado na RAM) e, em seguida, gravar nele. Não fazer isso faz com que o bloqueio de gravação dure muito mais tempo no caso de objetos que não estão no conjunto de trabalho, pois coloca um bloqueio de gravação, lê o documento do disco, grava no documento (agora no RAM) e libera o documento. bloqueio. Tudo isso é menos intrusivo se a leitura (trazendo objeto para a RAM) foi feita antes do fechamento da gravação.

    
por 17.05.2013 / 20:08