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

Mongo db design de seguidores e feeds, onde devo incorporar?


Em geral, não é uma boa ideia incorporar relacionamentos seguidos/seguidos em documentos do usuário, por vários motivos:

(1) há um limite máximo de tamanho de documento de 16 MB, e é plausível que um usuário popular de um site bem inscrito possa acabar com centenas de milhares de seguidores, que se aproximarão do tamanho máximo do documento,

(2) os relacionamentos de seguidores mudam com frequência e, portanto, o caso em que um usuário ganha muitos seguidores se traduz em crescimento repetido de documentos se você estiver incorporando seguidores. O crescimento frequente de documentos prejudicará significativamente o desempenho do MongoDB e, portanto, deve ser evitado (o crescimento ocasional de documentos, especialmente se os documentos tendem a atingir um tamanho final estável, é uma penalidade de desempenho menor).

Então, sim, é melhor dividir o relacionamento seguinte/seguido em uma coleção separada de registros, cada um com dois campos, por exemplo, { _id :, oid :}, com índices em _id (para o "quem estou seguindo? ") e oid (para a consulta "quem está me seguindo?"). Qualquer alteração de estado individual é modelada por uma única adição ou remoção de documento, embora se você também estiver exibindo coisas como contagens de seguidores, provavelmente deve manter contadores separados que você atualiza após qualquer inserção/exclusão de borda.

(Claro, isso supõe que seus requisitos de negócios permitem alguma flexibilidade nos detalhes de consistência:em geral, se seu código de exibição informar a um usuário que ele tem 304 seguidores e depois enumerá-los, apenas o usuário mais exigente verificará se os seguidores enumerados Calcule até 304. Se os requisitos de negócios exigirem consistência absoluta, você precisará de um banco de dados que isole as transações para você ou terá que fazer a contagem você mesmo como parte da exibição de todas as identidades de usuário.)