sql >> Database >  >> NoSQL >> MongoDB

Veel tot veel update in MongoDB zonder transacties

@Gareth , hebt u meerdere legitieme manieren om dit te doen. De belangrijkste zorg is dus hoe u van plan bent de gegevens op te vragen (d.w.z.:welke zoekopdrachten snel moeten zijn )

Hier zijn een aantal methoden.

Methode #1:de verzameling "links"

Je zou een verzameling kunnen bouwen die eenvoudig toewijzingen tussen de verzamelingen bevat.

Voordelen:

  • Ondersteunt atomaire updates zodat gegevens niet verloren gaan

Nadelen:

  • Extra zoekopdracht bij het wisselen tussen collecties

Methode #2:bewaar kopieën van kleinere toewijzingen in een grotere verzameling

Bijvoorbeeld:u heeft miljoenen Products , maar slechts honderd Categories . Dan zou je de Categories . opslaan als een array binnen elk Product .

Voordelen:

  • Kleinste voetafdruk
  • Slechts één update nodig

Nadelen:

  • Extra vraag als je de "verkeerde kant op" gaat

Methode #3:bewaar kopieën van alle toewijzingen in beide verzamelingen

(wat je voorstelt)

Voordelen:

  • Toegang tot één zoekopdracht om tussen beide verzamelingen te schakelen

Nadelen:

  • Potentieel grote indexen
  • Transacties nodig (?)

Laten we het hebben over "transacties nodig". Er zijn verschillende manieren om transacties uit te voeren en het hangt er echt van af welk type veiligheid u nodig heeft.

Dit kun je zeker doen. Je zult jezelf moeten afvragen, wat is het ergste dat er gebeurt als slechts één van de saves mislukt?

Methode #4:de wijziging in de wachtrij plaatsen

Ik weet niet of je ooit met wachtrijen hebt gewerkt, maar als je wat speelruimte hebt, kun je een eenvoudige wachtrij bouwen en verschillende taken uitvoeren die hun respectievelijke verzamelingen bijwerken.

Dit is een veel geavanceerdere oplossing. Ik zou geneigd zijn om voor #2 of #3 te gaan.



  1. Efficiënte paginering van MongoDB-aggregatie?

  2. Wat zijn goede manieren om actuele gebruikersdetails in modellen te krijgen?

  3. java.lang.IncompatibleClassChangeError:klasse Mongo implementeren

  4. Liquibase-MongoDb-Spring-boot gebruiken