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

Muitos para muitos atualizam no MongoDB sem transações


@Gareth , você tem várias maneiras legítimas de fazer isso. Portanto, a principal preocupação é como você planeja consultar os dados (ou seja:quais consultas precisam ser rápidas )

Aqui estão alguns métodos.

Método nº 1:a coleção de "links"

Você pode criar uma coleção que simplesmente contenha mapeamentos entre as coleções.

Prós:
  • Suporta atualizações atômicas para que os dados não sejam perdidos

Contras:
  • Consulta extra ao tentar mover entre coleções

Método nº 2:armazene cópias de mapeamentos menores em uma coleção maior

Por exemplo:você tem milhões de Products , mas apenas uma centena de Categories . Então você armazenaria as Categories como uma matriz dentro de cada Product .

Prós:
  • A menor pegada
  • Só precisa de uma atualização

Contras:
  • Consulta extra se você seguir o "caminho errado"

Método nº 3:armazene cópias de todos os mapeamentos em ambas as coleções

(o que você está sugerindo)

Prós:
  • Acesso de consulta única para mover entre uma coleção

Contras:
  • Índices potencialmente grandes
  • Precisa de transações (?)

Vamos falar sobre "necessidades de transações". Existem várias maneiras de fazer transações e isso realmente depende do tipo de segurança que você precisa.

Você definitivamente pode fazer isso. Você terá que se perguntar, qual é a pior coisa que acontece se apenas um dos salvamentos falhar?

Método nº 4:enfileirar a mudança

Não sei se você já trabalhou com filas, mas se tiver alguma margem de manobra você pode construir uma fila simples e ter trabalhos diferentes que atualizem suas respectivas coleções.

Esta é uma solução muito mais avançada. Eu tenderia a ir com #2 ou #3.