Isso vai ser um monte de pequenos pontos. Infelizmente, não há uma resposta única para a sua pergunta.
O MongoDB permite que o kernel do sistema operacional manipule o gerenciamento de memória. Além de jogar o máximo possível de RAM no problema, existem apenas algumas coisas que podem ser feitas para 'gerenciar ativamente' seu Conjunto de Trabalho.
A única coisa que você pode fazer para otimizar as gravações é primeiro consultar esse registro (fazer uma leitura), para que fique na memória de trabalho. Isso evitará os problemas de desempenho associados ao bloqueio global do processo (que deve se tornar per-db em v2.2)
Não existe uma regra rígida para relação RAM vs SSD, mas acho que as IOPS brutas de SSDs devem permitir que você use uma proporção muito menor. Fora do topo da minha cabeça, 1: 3 é provavelmente o menor que você quer ir. Mas, considerando os custos mais altos e as capacidades mais baixas, é provável que você precise manter esse índice baixo de qualquer maneira.
Com relação às fases de 'gravação versus leitura', estou lendo corretamente que, uma vez que um registro é gravado, ele raramente é atualizado ("alterado")? Se for esse o caso, pode valer a pena hospedar dois clusters; o cluster de gravação normal e o cluster otimizado para leitura para dados "antigos" que não foram modificados em [período de tempo X] . Eu definitivamente habilitaria leitura de escravo neste cluster. (Pessoalmente, eu gerenciaria isso incluindo um valor modificado de data nos documentos de objeto do banco de dados.)
Se você tiver a capacidade de fazer um teste de carga antes de entrar no Prod, o perf monitore o inferno fora disso. O MongoDB foi escrito com a suposição de que muitas vezes seria implantado em VMs (seus sistemas de referência estão no EC2), portanto, não tenha medo de compartilhar com as VMs.