Write concern -asetukset ja vahvistettu kestävyys
Oppijat määrittävät w:majority-, w:1- ja journaling-asetukset kirjoitusoperaatioiden kestävyystakuun säätämistä varten.
Write concern -asetukset ja vahvistettu kestävyys on ilmainen MongoDB Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu MongoDB Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. MongoDB Academy-kurssilla on yhteensä 4 oppituntia.
Mikä on write concern?
Write concern kertoo MongoDB:lle, kuinka monen replikasarjan jäsenen on vahvistettava kirjoitus, ennen kuin ajuri pitää sitä onnistuneena. Se on keskeinen säätökohta, jolla tasapainotetaan kestävyyttä (useampi vahvistus = turvallisempi) ja viivettä (harvempi vahvistus = nopeampi). Jokainen kirjoitusoperaatio — lisäys, päivitys, poisto tai korvaus — voi määrittää oman write concern -asetuksensa.
w-asetus: vahvistusten määrän laskeminen
w-kenttä määrittää, kuinka monen jäsenen on vahvistettava kirjoitus. w: 0 tarkoittaa fire-and-forget-toimintaa (ei vahvistusta lainkaan). w: 1 (oletus) tarkoittaa, että vain primaryn on vahvistettava kirjoitus. w: 2 tarkoittaa primaryä ja yhtä secondaryä. w: 'majority' on suositeltu tuotantoasetus — se odottaa, että enemmistö äänestävistä jäsenistä vahvistaa kirjoituksen.
// w:1 — only primary acknowledges (default)
db.orders.insertOne({ item: 'pen' }, { writeConcern: { w: 1 } })
// w:majority — safe for production
db.orders.insertOne({ item: 'pen' }, { writeConcern: { w: 'majority' } })w: majority — suositeltu asetus
w: 'majority' takaa, että kirjoitus on replikoitu enemmistölle äänestävistä jäsenistä, ennen kuin ajuri vastaanottaa onnistumisvastauksen. Tämä tarkoittaa, että juuri valittu primary on aina saanut kirjoituksen — myös failoverin jälkeen. Se on ainoa asetus, joka estää tietojen palautumisen primaryn vikaantuessa.
// Set default write concern at the database level
db.runCommand({
setDefaultRWConcern: 1,
defaultWriteConcern: { w: 'majority', wtimeout: 5000 }
})j-asetus: journalin kestävyys
j-asetus (journal) määrittää, odottaako MongoDB, että kirjoitus vahvistetaan levyllä olevaan journaliin ennen kuittauksen lähettämistä. Kun j: true on käytössä, edes heti kuittauksen jälkeen tapahtuva palvelimen kaatuminen ei voi hukata kirjoitusta. Ilman journalingia (j: false) kaatuminen muistiin tehdyn kirjoituksen ja seuraavan journalin flushauksen välillä voi hukata operaation.
// Fully durable write: majority replication + journaled
db.payments.insertOne(
{ amount: 499.99, currency: 'USD' },
{ writeConcern: { w: 'majority', j: true, wtimeout: 5000 } }
)wtimeout-asetus
wtimeout määrittää enimmäisajan (millisekunteina), jonka palvelin odottaa vaadittuja w-vahvistuksia. Jos kynnystä ei saavuteta ajoissa, MongoDB palauttaa virheen WriteConcernError — mutta kirjoitus tehtiin silti primarylle. Aikakatkaisu kertoo replikoinnin viiveestä, ei kirjoituksen epäonnistumisesta.
// Timeout after 3 seconds if secondaries are slow
db.logs.insertOne(
{ event: 'login', userId: 'u123' },
{ writeConcern: { w: 'majority', wtimeout: 3000 } }
)w:0 Fire-and-Forget: milloin sitä kannattaa käyttää
w: 0 lähettää kirjoituksen ja palauttaa vastauksen heti odottamatta vahvistusta. Tämä maksimoi suorituskyvyn suurivolyymisissä ja tietojen menetyksen sallivissa työkuormissa, kuten telemetriassa, analytiikkatapahtumissa tai lokien ingestiossa, joissa satunnainen tietojen menetys hyväksytään. Älkää koskaan käyttäkö sitä rahansiirtoihin, käyttäjien tuottamaan sisältöön tai mihinkään dataan, jota ette voi menettää.
// High-throughput metrics logging — loss acceptable
await db.collection('metrics').insertMany(
readings,
{ writeConcern: { w: 0 } }
)Write concern ja rollback
Kun primary vikaantuu ja secondarysta tulee primary, kaikki kirjoitukset, joita vanha primary ei ollut vielä replikoinut enemmistölle, palautetaan. Palautetut kirjoitukset tallennetaan levyllä olevaan rollback-kansioon manuaalista palautusta varten. Asetuksen w: 'majority' käyttäminen poistaa tämän riskin, koska kirjoitus kuitataan vasta, kun enemmistöllä on se.
Write concernin yhdistäminen transaktioihin
Usean dokumentin transaktioissa write concern vaikuttaa commit-vaiheessa, ei transaktion yksittäisissä operaatioissa. Kun commit tehdään asetuksella w: 'majority', kaikki transaktion kirjoitukset ovat kestävällä tavalla enemmistön hallussa, ennen kuin sovellus jatkaa. Transaktion sisällä määritetyt operaatiotason write concern -asetukset ohitetaan.
const session = client.startSession()
await session.withTransaction(async () => {
await orders.insertOne({ item: 'book' }, { session })
await inventory.updateOne({ _id: 1 }, { $inc: { qty: -1 } }, { session })
}, { writeConcern: { w: 'majority' } })MongoDB 5+:n oletusarvoinen write concern
MongoDB 5.0:sta lähtien implisiittinen oletusarvoinen write concern on replikasarjoissa ja sharded cluster -klustereissa w: 'majority'. Ennen versiota 5.0 oletusarvo oli w: 1. Tämä tarkoittaa, että nykyaikaiset MongoDB-käyttöönotot ovat oletusarvoisesti turvallisia, mutta write concern kannattaa silti määrittää eksplisiittisesti kriittisessä sovelluskoodissa selkeyden ja siirrettävyyden vuoksi.
// Verify the current default write concern
db.adminCommand({ getDefaultRWConcern: 1 })
// { defaultWriteConcern: { w: 'majority' }, ... }Write concern asiakastasolla
Write concern voidaan määrittää kolmella tasolla: operaatiotasolla (kunkin insert- tai update-operaation yhteydessä), kokoelmatasolla (kokoelman käsittelijää haettaessa) tai asiakas-/yhteysmerkkijonotasolla. Tarkemman tason asetukset ohittavat yleisemmän tason asetukset. Asiakastasolla määritetty asetus koskee oletusarvoisesti kaikkia operaatioita, kun taas operaatiotason asetukset sopivat parhaiten tilanteisiin, joissa tarvitaan erityisiä kestävyystakuita.
// Set write concern at MongoClient level
const client = new MongoClient(uri, {
writeConcern: { w: 'majority', j: true, wtimeout: 5000 }
})
// Override per-operation when needed
await db.criticalData.insertOne(doc, { writeConcern: { w: 3 } })Sopivan write concernin valitseminen
Valitkaa write concern tietojen kriittisyyden perusteella. Taloudelliset ja transaktionaaliset tiedot: w: 'majority', j: true. Käyttäjien sisältö: w: 'majority'. Istunto- ja välimuistitiedot: w: 1. Suurivolyyminen telemetria: w: 0. Oikea valinta tasapainottaa tietojen menettämisen kustannuksia ja lisävahvistusten odottamisesta aiheutuvaa viivettä.
Pikatarkistus
Testatkaa, miten hyvin hallitsette tämän oppitunnin MongoDB:tä ja NoSQL-tietokantoja käsittelevät käsitteet.
Oppitunnin kertaus
Tässä oppitunnissa opitte, että write concernin w määrittää, kuinka monen jäsenen on vahvistettava kirjoitus, w: 'majority' on suositeltu tuotantoasetus, joka estää rollbackin failoverin jälkeen ja j: true lisää levyllä olevan journalin tarjoaman kestävyyden kaatumisten varalta. Seuraavaksi tutustumme read preference -asetuksiin ja siihen, miten lukukuormaa jaetaan replikasarjassa.
Opi JavaScript tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 30
- Oppitunnit
- 120
Usein kysytyt kysymykset
Onko oppitunti ”Write concern -asetukset ja vahvistettu kestävyys” ilmainen?
Kyllä – oppitunnin ”Write concern -asetukset ja vahvistettu kestävyys” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko MongoDB Academy-kurssin, päivitä CoddyKit PROhon. MongoDB Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Write concern -asetukset ja vahvistettu kestävyys”?
Oppijat määrittävät w:majority-, w:1- ja journaling-asetukset kirjoitusoperaatioiden kestävyystakuun säätämistä varten. Harjoittelet MongoDB Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni MongoDB Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin MongoDB Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”Write concern -asetukset ja vahvistettu kestävyys”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä MongoDB Academy-oppitunnilla?
Kyllä. Jokainen MongoDB Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Replikajoukon jäsenet: primary, secondary ja arbiter
- Vaalit ja automaattinen vikasietoisuus
- Write concern -asetukset ja vahvistettu kestävyys
- Read preference -asetukset: lukukuorman jakaminen