sql >> Database >  >> NoSQL >> MongoDB

Multi-collectie, multi-document 'transacties' in MongoDB

Als een generiek antwoord kunnen multi-document commits op MongoDB worden uitgevoerd als commits in twee fasen, die enigszins uitgebreid zijn gedocumenteerd in de handleiding (zie:http://docs.mongodb.org/manual/tutorial/perform-two-phase- commits/).

Het patroon dat in de handleiding wordt voorgesteld, is in het kort het volgende:

  • Stel een aparte transactions in verzameling, inclusief doeldocument , brondocument , waarde en staat (van de transactie)
  • Maak een nieuw transactie-object met initial als de state
  • Begin met het maken van een transactie en update state naar pending
  • Transacties toepassen op beide documenten (doel, bron)
  • Transactiestatus bijwerken naar committed
  • Gebruik find om te bepalen of documenten de transactiestatus weergeven, indien ok, update de transactiestatus naar done

Bovendien:

  • U moet faalscenario's handmatig afhandelen (er gebeurde iets niet zoals hieronder beschreven)
  • U moet handmatig een rollback implementeren, in feite door een naam state in te voeren waarde canceling

Enkele specifieke opmerkingen voor uw implementatie:

  • Ik zou u afraden velden toe te voegen zoals lock_status , data_old , data_new in bron-/doeldocumenten. Dit moeten eigenschappen van de transacties zijn, niet de documenten zelf.
  • Om het concept van doel-/brondocumenten te veralgemenen, denk ik dat je DBref . zou kunnen gebruiken s:http://www.mongodb.org/display/DOCS/Database+References
  • Ik hou niet van het idee om transactiedocumenten te verwijderen als ze klaar zijn. Status instellen op done lijkt een beter idee, omdat u hierdoor later kunt debuggen en kunt achterhalen wat voor soort transacties zijn uitgevoerd. Ik ben er vrij zeker van dat je ook niet te weinig schijfruimte zult hebben (en hier zijn ook oplossingen voor).
  • Hoe garandeer je in je model dat alles is veranderd zoals verwacht? Inspecteer je de wijzigingen op de een of andere manier?


  1. Retourneer alleen specifieke velden voor een query in Spring Data MongoDB

  2. Is er een manier om met sessies te werken zonder de ASP.Net MVC-site te vergrendelen?

  3. Draait mongodb?

  4. Redis-transacties