MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Множество колекции, многодокументни „транзакции“ в MongoDB

Като общ отговор, многодокументните ангажименти в MongoDB могат да се извършват като двуфазни комитации, които са донякъде подробно документирани в ръководството (Вижте:http://docs.mongodb.org/manual/tutorial/perform-two-phase- ангажира/).

Моделът, предложен от ръководството, е накратко следният:

  • Настройте отделни transactions колекция, която включва целев документ , изходен документ , стойност и състояние (на сделката)
  • Създайте нов обект на транзакция с initial като state
  • Започнете да извършвате транзакция и актуализирайте state до pending
  • Прилагане на транзакции и към двата документа (цел, източник)
  • Актуализиране на състоянието на транзакцията до committed
  • Използвайте find, за да определите дали документите отразяват състоянието на транзакцията, ако е добре, актуализирайте състоянието на транзакцията до done

В допълнение:

  • Трябва ръчно да обработвате сценарии на неуспех (нещо не се е случило, както е описано по-долу)
  • Трябва ръчно да приложите връщане назад, основно чрез въвеждане на име state стойност canceling

Някои конкретни бележки за вашата реализация:

  • Бих ви разубедил да добавяте полета като lock_status , data_old , data_new в изходни/целеви документи. Това трябва да са свойства на сделките, а не самите документи.
  • За да обобщите концепцията за целеви/изходни документи, мисля, че бихте могли да използвате DBref s:http://www.mongodb.org/display/DOCS/Database+References
  • Не ми харесва идеята за изтриване на документи за транзакции, когато са готови. Задаване на състоянието на done изглежда като по-добра идея, тъй като това ви позволява по-късно да отстраните грешки и да разберете какъв вид транзакции са извършени. Почти съм сигурен, че няма да останете без дисково пространство (и за това има решения).
  • Как гарантирате във вашия модел, че всичко е променено според очакванията? Проверявате ли промените по някакъв начин?


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Най-добри практики за .NET за MongoDB връзки?

  2. Заявете MongoDB с израз на регулярен израз срещу ObjectId

  3. Spring Data MongoDB с Java 8 LocalDate MappingException

  4. Защо се добавя _id с ObjectID, когато се използва $push на MongoDB за добавяне на нов обект към масив?

  5. Как да използвате неподредено групово вмъкване с Mongoskin?