sql >> Databáze >  >> NoSQL >> MongoDB

Multi-sbírka, multi-dokumentové 'transakce' v MongoDB

Jako obecnou odpověď lze vícedokumentové odevzdání na MongoDB provádět jako dvoufázové odevzdání, které bylo poněkud rozsáhle zdokumentováno v příručce (viz:http://docs.mongodb.org/manual/tutorial/perform-two-phase- se zavazuje/).

Vzor navržený v příručce je stručně následující:

  • Nastavte samostatné transactions kolekce, která zahrnuje cílový dokument , zdrojový dokument , hodnota a stát (transakce)
  • Vytvořte nový objekt transakce s initial jako state
  • Začněte provádět transakci a aktualizujte state na pending
  • Použijte transakce na oba dokumenty (cíl, zdroj)
  • Aktualizujte stav transakce na committed
  • K určení, zda dokumenty odrážejí stav transakce, použijte funkci find. Pokud je to v pořádku, aktualizujte stav transakce na done

Navíc:

  • Scénáře selhání musíte zpracovat ručně (něco se nestalo, jak je popsáno níže)
  • Musíte ručně implementovat vrácení zpět, v podstatě zavedením názvu state hodnota canceling

Některé konkrétní poznámky k vaší implementaci:

  • Odradil bych vás od přidávání polí jako lock_status , data_old , data_new do zdrojových/cílových dokumentů. Měly by to být vlastnosti transakcí, nikoli samotné dokumenty.
  • Pro zobecnění konceptu cílových/zdrojových dokumentů si myslím, že byste mohli použít DBref s:http://www.mongodb.org/display/DOCS/Database+References
  • Nelíbí se mi myšlenka mazat transakční dokumenty, když jsou hotové. Nastavení stavu na done se zdá jako lepší nápad, protože vám to umožní později ladit a zjistit, jaké transakce byly provedeny. Jsem si docela jistý, že ani vám nedojde místo na disku (a i pro to existují řešení).
  • Jak ve svém modelu zaručíte, že se vše změnilo podle očekávání? Kontrolujete nějak změny?


  1. jak uložit obrázek do redis pomocí pythonu / PIL

  2. Tisková zpráva:ScaleGrid oznamuje hostingovou službu pro Redis™ na AWS

  3. Zpětné volání instance.save() Mongoose.js se nespustí

  4. Streamování dat v reálném čase s MongoDB Change Streams