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

Справяне с условия на състезание и глад при генериране на уникални идентификатори с помощта на MongoDB + NodeJS

Използвате MongoDB за съхраняване на идентификатора. Това е състояние. Генерирането на ID е функция. Вие използвате Mongodb за генериране на ID, когато процесът на mongodb вземе аргументи на функцията и върне генерирания ID. Не е това, което правиш. Използвате nodejs за генериране на ID.

Броят на нишките или по-скоро циклите на събития е критичен, тъй като определя архитектурата, но и в двата случая не се нуждаете от транзакции. Транзакциите в mongodb се наричат ​​„транзакции с множество документи“ точно за да се подчертае, че те са предназначени за последователно актуализиране на няколко документа наведнъж. Първият параграф на https://docs.mongodb.com/manual/core/transactions / ви предупреждава, че ако актуализирате един документ, няма място за транзакции.

Приложение с една нишка не изисква никаква синхронизация. Можете надеждно да прочетете последния генериран идентификатор при стартиране и да гарантирате, че идентификаторът е уникален в рамките на процеса nodejs. Ако изключите mongodb и други I/O от функцията за генериране, ще я направите синхронна, така че да можете да поддържате състоянието на ID в процеса на nodejs и да гарантирате неговата уникалност. Веднъж генерирани, можете да продължите в db асинхронно. В най-лошия случай може да имате празнина в последователните номера, но без дубликати.

Ако има най-малък шанс да се наложи да мащабирате до повече от 1 nodejs процес, за да обработвате повече едновременни заявки или да добавите друг хост за излишък в бъдеще, ще трябва да синхронизирате генерирането на ID и можете да използвате уникални индекси на Mongodb за че. Самата функция не се променя много, вие все още генерирате идентификатора, както при еднонишкова архитектура, но добавяте допълнителна стъпка, за да запазите идентификатора в mongo. Документът трябва да има уникален индекс в полето ID, така че в случай на едновременни актуализации една от заявките ще добави успешно документа, а друга ще се провали с „E11000 грешка при дублиран ключ“. Хващате такива грешки от страна на nodejs и повтаряте функцията отново, избирайки следващото число:



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да настроя MongoDB драйвер на XAMPP

  2. Обяснете Aggregate framework

  3. Кога курсорът на mongodb ще изтече

  4. Драйвер на Promise и nodejs MongoDB

  5. Разлика между MongoDB и Mongoose