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

O que é uma boa estrutura de documento do MongoDB para consulta mais eficiente de seguidores/seguidores de usuários?


Este é um problema clássico de seguidor seguidor e não há uma resposta para ele. Confira este link:

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

Na verdade, essa situação se presta muito bem a um esquema relacional, se MongoDB e servidor SQL fossem as únicas opções que você tivesse. Mas este é um tipo especial de problema relacional em que você tem um relacionamento de mão dupla. Isso talvez possa ser melhor tratado por um banco de dados gráfico:

http://forum.kohanaframework.org/discussion/10130/followers-and-following-database-design-like-twitter/p1

O problema é que você pode manter seguidores ou seguidores em um documento do usuário, mas não ambos, para evitar problemas de exclusão dupla. Então, se você deve ficar com o MongoDB, uma saída pode ser ..(assumindo que as pessoas não seguem/deixam de seguir ninguém que com frequência),

Mantenha apenas os seguidores no documento, pois quando vejo meu perfil, me interessaria pelas pessoas que sigo. certo?)..E então faça uma consulta como:

db.Users.find({ user_id : { $in : followees })

Isso dirá quem está me seguindo (digamos que meu id é 'user_id').

Outra razão pela qual eu não sugiro o contrário é que.. pode-se seguir no máximo 30-40 pessoas, então o documento do usuário que armazena 30-40 seguidores deve estar bem em comparação com um documento do usuário que armazena milhares de seguidores! Com a abordagem do seguidor no documento, você obtém documentos de usuário de tamanho aproximadamente igual. Na abordagem do seguidor no documento, você terá alguns documentos muito pequenos, mas também muito volumosos. E dependendo da quantidade de dados de seguidores inseridos (se houver, além de follower_id), você pode quer ter cuidado com o limite de tamanho do documento.