MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Onde devo colocar a linha do tempo de atividades no mongodb, incorporada ao usuário ou separadamente?


Ambos os artigos estão certos e ambos estão errados.

Incorporar ou não incorporar? Esta é sempre a pergunta chave e se resume às suas necessidades, consulta e armazenamento e até mesmo ao seu conjunto de trabalho.

No final do dia, só podemos dar dicas que você não pode realmente dizer qual é o melhor.

No entanto, considerando o tamanho de um feed de atividades, eu pessoalmente não o incorporaria, pois poderia crescer facilmente além de 16 meg (por usuário), no entanto, para a velocidade e o poder de consulta, você pode agregar, digamos, as últimas 20 atividades de um usuário e depois incorporar isso na linha de usuários (já que os últimos 20 são normalmente os mais consultados).

Mas a incorporação de uma agregação depende, a fragmentação pode cuidar da consulta de enormes coleções dimensionadas horizontalmente e usar as consultas certas significa que você não obtém nenhum benefício real da incorporação e pode potencialmente tornar sua vida mais difícil por ter que manter os índices, armazenamento e consultas necessárias para manter esse subdocumento.

Quanto à incorporação até o ponto da morte. Muitas consultas de MongoDBs no momento dependem principalmente de um ou dois níveis de incorporação, por isso pode ser difícil manter, digamos, 12 tabelas aninhadas, momento em que você começa a ver perguntas aqui e o grupo do Google sobre como manter essas um documento enorme (a resposta é do lado do cliente, se você realmente quiser).

Considerando isso, eu abrigaria um agregado no usuário, o que significa que o usuário pode ver sua própria atividade ou a de outros usuários individualmente com uma viagem de ida e volta.

No entanto, considerando que um professor provavelmente teria que ter resultados de páginas de todos os usuários, eu abrigaria uma coleção de atividades separada e consultaria isso para eles. A paginação de um agregado de subdocumentos requer algumas consultas e, neste caso, seria melhor fazê-lo dessa maneira.

Espero que isso deve começar.