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

MongoDB като услуга за опашка?

Използвам mongodb като услуга за опашка за изпращане на имейли. Скоро ще работи по следния начин:

  1. Когато дойде ново съобщение, го съхранявам в mongodb.
  2. След това фоново задание зарежда съобщението от mongodb чрез атомарната операция findAndModify и задава флага Processing на true, така че не обработва едно и също съобщение два пъти (тъй като моята фонова работа изпълнява няколко нишки паралелно).
  3. След като имейлът бъде изпратен, премахвам документа от mongodb.
  4. Можете също да отброите неуспехите за всяко съобщение и да го премахнете след 3 неуспешни опита.

По принцип използвам mongodb като услуга за опашка само поради една причина:защото трябва да изпращам имейли по определен график (всяко съобщение съдържа информация за това в колко часа трябва да бъде изпратено).

Ако нямате график и трябва незабавно да обработите съобщението, предлагам да разгледате съществуващите услуги за опашка, защото те вероятно обработват всички случаи, които може да не видите без по-задълбочено разбиране на опашките за съобщения.

Актуализиране

Когато фоновата задача се срине по време на обработката на съобщението, можете да направите следното:

  1. Преместете това съобщение в друго, събиране на грешки в опашката на съобщения или...

  2. Увеличете брояча на опитите за обработка в съобщението и отново задайте статус "Нов", за да опитате да го обработите отново. Просто се уверете, че фоновата задача е идемпотентна (може да обработва едно и също съобщение няколко пъти и да не повреди данни) и транзакционна (когато заданието се провали, трябва да отмените направените промени. ако има такива). Когато заданието се провали след 5 опита (конфигурационна стойност), изпълнете #1.

  3. След като грешката с обработката на съобщенията бъде отстранена, можете да я обработите отново, като зададете статус „Ново“ и се преместите в опашката за съобщения или просто изтриете това съобщение. Всъщност зависи от бизнес процесите.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как мога да преименувам поле за всички документи в MongoDB?

  2. $unwind обект в рамката за агрегиране

  3. 5 начина да получите секундите от дата в MongoDB

  4. Как да получите няколко реда в списък, разделен със запетая в SQL

  5. Индексиране на поле, което е в масив от поддокументи