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

Как модификаторът $inc работи с едновременни заявки в mongodb?

Наистина е малко широко, но мога да предложа широките щрихи. От MongoDB използва заключване на ниво колекция с механизма за съхранение по подразбиране. Налице е и механизмът за съхранение WiredTiger, който прилага заключване на ниво документ . Но основно във всички версии има някакво ниво на „заключване“, което се случва при всяка заявка. Колкото по-фино е нивото, толкова по-добре в зависимост от вашите действителни нужди от пропускателна способност.

По същество няма две заявки, които да се случват по едно и също време, тъй като те ще „блокират“ на заключването, което е направено, докато не бъде освободено. Така че стойността, която ще бъде върната (да речем findAndModify() заявка ), ще бъде от „текущото състояние“ към момента, в който е направена тази заявка.

Така че при такава заявка операторът, който е бил изпълнен първи, ще върне стойност 2, а следващият изпълнен оператор ще върне стойност 3. Крайната позиция в базата данни е, че стойността в момента ще бъде 3.

Така че няма начин нещо да може да се "промени" по едно и също време и крайното състояние ще бъде това, което се случва след като "всички" заявки са били издадени. Така че $inc и други оператори правят точно както трябва и променят съдържанието въз основа на състоянието на документа в момента, в който действително са имали достъп до него.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $round

  2. MongoDB Aggregation, има ли начин да получите executionStats от обобщен курсор?

  3. Излъчваните променливи не се показват в дялове Apache Spark

  4. mongodb:вмъкнете, ако не съществува

  5. техники за съхраняване на библиотеки в system.js на mongoDB