Você deve usar documentos incorporados se forem documentos estáticos ou se não forem mais do que algumas centenas devido ao impacto no desempenho. Já discuti esse assunto há algum tempo. Recentemente, Asya Kamsky, que trabalha como arquiteto de soluções para o MongoDB, havia escrito um artigo sobre "usando subdocumentos".
Espero que ajude quem está procurando soluções ou as melhores práticas.
Primeiro de tudo, temos que considerar por que queremos fazer uma coisa dessas. Normalmente, eu aconselho as pessoas a incorporar coisas que eles sempre querem voltar quando estão buscando este documento. O outro lado disso é que você não deseja incorporar coisas no documento que não deseja voltar com ele.
Se você incorporar a atividade que eu realizo no documento, ele funcionará muito bem no início, porque toda a minha atividade está ali e, com uma única leitura, você pode recuperar tudo o que deseja me mostrar: "você clicou recentemente aqui e aqui são seus dois últimos comentários ", mas o que acontece depois de seis meses se passaram e eu não me importo com as coisas que fiz há muito tempo e você não quer mostrá-las, a menos que eu vá especificamente procurar alguma atividade antiga?
Primeiro, você retornará documentos cada vez maiores e se preocupará com cada vez menos partes dele. Mas você pode usar a projeção para retornar apenas parte da matriz. A verdadeira dor é que o documento no disco ficará maior e ainda será lido, mesmo se você só devolver parte dele ao usuário final, mas como minha atividade não será interrompida enquanto eu estiver ativo, o documento continuará crescendo e crescendo.
O problema mais óbvio disso é que, eventualmente, você atingirá o limite de 16 MB de documentos, mas não é com isso que você deve se preocupar. Um documento que cresce continuamente terá custos cada vez mais altos sempre que for realocado no disco e, mesmo que você tome medidas para reduzir os efeitos da fragmentação, suas gravações serão desnecessariamente longas, afetando o desempenho geral de todo o aplicativo.
Há mais uma coisa que você pode fazer que prejudica completamente o desempenho do seu aplicativo e é indexar essa matriz cada vez maior. O que isso significa é que, toda vez que o documento com essa matriz é realocado, o número de entradas de índice que precisam ser atualizadas é diretamente proporcional ao número de valores indexados nesse documento, e quanto maior a matriz, maior será o número. estar.
Não quero que isso o assuste de usar matrizes quando elas são adequadas para o modelo de dados - elas são um recurso poderoso do modelo de dados do banco de dados de documentos, mas, como todas as ferramentas poderosas, ele precisa ser usado nas circunstâncias certas e deve ser usado com cuidado.