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

Relacionamentos do MongoDB para objetos


Depende.

Depende de quantos de cada um desses tipos de objetos você espera ter. Você pode encaixá-los todos em um único documento MongoDB para um determinado usuário? Provavelmente não.

Depende dos relacionamentos - a conta de usuário é um relacionamento de um para muitos ou de muitos para muitos? Se for um para muitos e o número de contas for pequeno, você pode optar por colocá-las em uma IList em um documento de usuário.

Você ainda pode modelar relacionamentos no MongoDB com coleções separadas, MAS não há junções no banco de dados, então você precisa fazer isso no código. Carregar um usuário e, em seguida, carregar suas contas pode ser bom do ponto de vista do desempenho.

Você pode indexar matrizes INTO em documentos. Não pense em um índice como sendo apenas um índice em um campo simples em um documento (como SQL). Você pode usar, digamos, uma coleção de tags em um documento e indexar nas tags. (Consulte http://www.mongodb.org/display/DOCS/Indexes #Indexes-Arrays )

Quando você recupera ou grava dados, pode fazer uma leitura parcial e uma gravação parcial de qualquer documento. (consulte http://www.mongodb.org/display /DOCS/Recuperando+a+Subconjunto+de+Campos )

E, finalmente, quando você não consegue ver como obter o que deseja usando coleções e índices, pode conseguir usando map reduce. Por exemplo, para encontrar todas as tags atualmente em uso classificadas por sua frequência de uso, você deve mapear cada documento emitindo as tags usadas nele, e então você reduziria esse conjunto para obter o resultado desejado. Você pode então armazenar o resultado dessa redução de mapa permanentemente e atualizá-lo apenas quando necessário.

Mais uma preocupação:você menciona o cálculo de totais por tag. Se você deseja consistência transacional com qualidade contábil, o MongoDB pode não ser a escolha certa para você. "Consistência eventual" é o nome do jogo para armazenamentos de dados NoSQL e eles geralmente não são adequados para transações financeiras. Por exemplo, não importa se um usuário vê uma postagem de blog com 3 comentários enquanto outro vê 4, porque eles encontram cópias de réplicas diferentes que ainda não estão sincronizadas, mas para um relatório financeiro, esse tipo de consistência importa - seu o relatório pode não dar certo!