MongoDB - Atomic Operations

MongoDB støtter ikke multi-dokument atom transaksjoner
. Men gjør det gi atom operasjoner i samme dokument. Så hvis et dokument har hundre felt oppdateringen uttalelsen vil enten oppdatere alle felt eller ingen, dermed opprettholde atomicity på dokumentnivå.

Model Data for Atomic Operations

Den anbefalte tilnærmingen for å opprettholde atomicity ville være å holde all sikkerhetsrelatert informasjon som oppdateres ofte sammen i ett enkelt dokument med innebygde dokumenter
. Dette vil sørge for at alle oppdateringer for et enkelt dokument er atom

Tenk på følgende produkter dokumentet.

{"_id": 1, "PRODUCT_NAME": "Samsung S3", " kategorien ":" mobiler "," product_total ": 5," product_available ": 3," product_bought_by ": [{" kunde ":" john "," date ":" 7-Jan-2014 "}, {" kunde " : "mark", "date": "8-Jan-2 014"}]}

I dette dokumentet har vi innebygd informasjon av kunde som kjøper produktet i product_bought_by
felt . Nå, når vi en ny kunde kjøper produktet, vil vi først sjekke om produktet er fortsatt tilgjengelig ved hjelp av product_available
feltet. Hvis tilgjengelig, vil vi redusere verdien av product_available feltet samt sette den nye kundens innlagte dokumentet i product_bought_by feltet. Vi vil bruke findAndModify
kommando for denne funksjonaliteten fordi det søker og oppdaterer dokumentet i samme farten

> db.products.findAndModify ({query:. {_ Id: 2, product_available: { $ gt: 0}}, oppdatere: {$ inc: {product_available: -1}, $ trykk: {product_bought_by: {kunde: "rane", dato: "9-Jan-2 014"}}}}) Anmeldelser

Vår tilnærming av innlagte dokumentet og bruke findAndModify spørring sørger for at produktet kjøpet informasjonen oppdateres bare hvis det produktet er tilgjengelig. Og hele denne transaksjonen være i samme spørringen, er atom.

I motsetning til dette, bør du vurdere scenario hvor vi kan ha holdt produktet tilgjengelighet og informasjon om hvem som har kjøpt produktet, separat. I dette tilfellet vil vi først sjekke om produktet er tilgjengelig ved hjelp av første spørringen. Så i den andre spørringen vil vi oppdatere kjøpsinformasjon. Det er imidlertid mulig at det mellom disse to utførelser av spørringer, er en annen bruker har kjøpt det produkt, og det er ikke lenger tilgjengelig. Uten å vite dette, vil våre andre spør oppdatere kjøp informasjon basert på resultatet av vår første spørringen. Dette vil gjøre databasen inkonsistent fordi vi har solgt et produkt som ikke er tilgjengelig. Anmeldelser