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

Como lidar com relacionamentos ao usar o mongodb

EDITAR:


Acabei de encontrar uma resposta de Brendan McAdams, cara da 10gen, que obviamente é muito mais autoritário do que eu, e ele recomenda incorporar documentos.

texto antigo:


A primeira é incluir manualmente em cada comentário ObjectID do usuário a que pertence.
comment: { text : "...", 
           date: "...", 
           user: ObjectId("4b866f08234ae01d21d89604"),
           votes: 7 }

A segunda e inteligente maneira é usar DBRefs

adicionamos E/S extra ao nosso disco, perdendo desempenho, certo? (não tenho certeza de como isso funciona internamente), portanto, precisamos evitar vincular, se possível, certo?

Sim - haveria mais uma consulta, mas o driver fará isso por você - você pode pensar nisso como um tipo de açúcar de sintaxe. Afeta o desempenho? Na verdade, depende também :) Uma das razões pelas quais o Mongo é tão rápido é que ele está usando arquivos mapeados de memória e o mongo tentam manter todo o conjunto de trabalho (mais índices) diretamente na RAM. E a cada 60 segundos (por padrão) ele sincroniza instantâneo de RAM com arquivo baseado em disco.
Quando estou dizendo conjunto de trabalho , quero dizer coisas com as quais você está trabalhando:você pode ter três coleções - foo , barra , baz , mas se você estiver trabalhando agora apenas com foo e bar, eles devem ser carregados na ram, enquanto o baz permanece no disco abandonado. Além disso, os arquivos mapeados em memória permitem carregar apenas parte da coleção. Portanto, se você estiver construindo algo como engadget ou techcrunch, há uma alta probabilidade de que o conjunto de trabalho seja comentários dos últimos dias e as páginas antigas sejam revividas com menos frequência (os comentários seriam gerados na memória sob demanda), então não t afetar significativamente o desempenho.

Então, recapitulando:contanto que você continue trabalhando configurado na memória (você pode pensar que é cache de leitura/gravação), a busca dessas coisas é super rápida e mais uma consulta não seria um problema. Se você estiver trabalhando com fatias de dados que não cabem na memória, haverá velocidade degradação , mas agora não sei suas circunstâncias -- pode ser aceitável, então, em ambos os casos, costumo escolher usar ligando.