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

MongoDB jako služba fronty?

Používám mongodb jako službu fronty pro odesílání e-mailů. Brzy to bude fungovat následujícím způsobem:

  1. Když přijde nová zpráva, uložím ji do mongodb.
  2. Úloha na pozadí poté načte zprávu z mongodb prostřednictvím atomické operace findAndModify a nastaví příznak Processing na true, takže nezpracovává stejnou zprávu dvakrát (protože moje úloha na pozadí spouští paralelně více vláken).
  3. Jakmile bude e-mail odeslán, odstraním dokument z mongodb.
  4. Můžete také udržovat počet neúspěšných zpráv pro každou zprávu a odstranit je po 3 neúspěšných pokusech.

Obecně používám mongodb jako službu fronty pouze z jednoho důvodu:protože potřebuji odesílat e-maily podle stanoveného plánu (každá zpráva obsahuje informace o tom, kdy by měla být odeslána).

Pokud nemáte žádný plán a potřebujete zpracovat zprávu okamžitě, doporučuji vám podívat se na existující frontové služby, protože pravděpodobně zvládnou všechny případy, které možná nevidíte bez hlubšího porozumění frontám zpráv.

Aktualizovat

Když se úloha na pozadí během zpracování zprávy zhroutí, můžete provést následující:

  1. Přesunout tuto zprávu do jiné, kolekce chyb ve frontě zpráv nebo...

  2. Zvyšte počítadlo pokusů o zpracování ve zprávě a znovu přiřaďte stav „Nový“, abyste ji mohli zkusit zpracovat znovu. Jen se ujistěte, že úloha na pozadí je idempotentní (může zpracovat stejnou zprávu vícekrát a nepoškodí data) a transakční (když úloha selže, musíte vrátit zpět provedené změny, pokud nějaké byly). Když úloha selže po 5 pokusech (hodnota konfigurace), proveďte #1.

  3. Jakmile byla chyba ve zpracování zpráv opravena, můžete ji zpracovat znovu přiřazením stavu "Nová" a přesunem do fronty zpráv, nebo tuto zprávu jednoduše smazat. Ve skutečnosti záleží na obchodních procesech.



  1. Optimalizovaný způsob dotazování v MongoDB pomocí $in vs $or

  2. MongoDB:Výpočet doby prodlevy mezi každou změnou stavové hodnoty

  3. Couchbase benchmark odhaluje velmi pomalé INSERTy a GETy (pomocí operací KeyValue); pomalejší než trvalá data MySQL

  4. Mongoose vytáhne ObjectId z pole