MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Mise à jour plusieurs à plusieurs dans MongoDB sans transactions

@Gareth , vous avez plusieurs façons légitimes de le faire. Leur principale préoccupation est donc de savoir comment vous prévoyez d'interroger les données (c'est-à-dire :quelles requêtes doivent être rapides )

Voici quelques méthodes.

Méthode n°1 :la collecte des "liens"

Vous pouvez créer une collection qui contient simplement des correspondances entre les collections.

Avantages :

  • Prend en charge les mises à jour atomiques afin que les données ne soient pas perdues

Inconvénients :

  • Requête supplémentaire lors de la tentative de déplacement entre les collections

Méthode n° 2 :stocker des copies de mappages plus petits dans une collection plus grande

Par exemple :vous avez des millions de Products , mais seulement une centaine de Categories . Ensuite, vous stockeriez les Categories sous forme de tableau à l'intérieur de chaque Product .

Avantages :

  • Encombrement réduit
  • Une seule mise à jour nécessaire

Inconvénients :

  • Requête supplémentaire si vous vous trompez de chemin

Méthode n° 3 :stocker des copies de tous les mappages dans les deux collections

(ce que vous suggérez)

Avantages :

  • Accès à requête unique pour passer d'une collection à l'autre

Inconvénients :

  • Index potentiellement volumineux
  • Nécessite des transactions (?)

Parlons des "besoins de transactions". Il existe plusieurs façons d'effectuer des transactions et cela dépend vraiment du type de sécurité dont vous avez besoin.

Vous pouvez certainement le faire. Vous devrez vous demander quel est le pire qui se passe si une seule des sauvegardes échoue ?

Méthode n° 4 :mettre la modification en file d'attente

Je ne sais pas si vous avez déjà travaillé avec des files d'attente, mais si vous avez une marge de manœuvre, vous pouvez créer une file d'attente simple et avoir différents travaux qui mettent à jour leurs collections respectives.

C'est une solution beaucoup plus avancée. J'aurais tendance à choisir le n° 2 ou le n° 3.