Pisalna skrb in bralna skrb nadzorujeta konsistentnost in trajnost garancij v MongoDB (v replikacijskih nizih) — z uravnoteženjem med zmogljivostjo in varnostjo/konsistentnostjo. Omogočata vam nastavljanje, kako močno so pisanja potrjena in kako dosledni so branja, glede na potrebe podatkov.
Pisalna skrb — trajnost pisanj
// write concern: how many nodes must acknowledge a write
db.orders.insertOne(doc, { writeConcern: { w: 1 } }); // primary only — fast
db.orders.insertOne(doc, { writeConcern: { w: "majority" } }); // majority of nodes — safe
db.orders.insertOne(doc, { writeConcern: { w: "majority", j: true } }); // + journaled to disk
w: 1 → only the PRIMARY acknowledges (fast, but a write could be LOST on failover)
w: "majority" → a majority of nodes acknowledge → the write SURVIVES primary failover
(no data loss) — safer but slower (waits for replication)
j: true → also wait for the write to be written to the JOURNAL (disk durability)
Pisalna skrb nadzoruje trajnost: w: "majority" zagotavlja, da je pisanje replizirano na večino (ohranilo bi se pri prevzemu ob odpovedi brez izgube), vendar je počasnejše; w: 1 je hitrejše, vendar bi se pisanje lahko izgubilo, če primarna vozlišča odpove pred replikacijo.
Bralna skrb — konsistentnost branj
db.orders.find().readConcern("majority"); // read data acknowledged by a majority
local → returns the most recent data on the node (may not be majority-committed,
could be rolled back) — default, fast
majority → returns only data acknowledged by a majority (won't be rolled back) — consistent
linearizable → strongest (reflects all prior majority writes) — slowest
Bralna skrb nadzoruje, katere podatke branja vidijo: majority vrne le podatke, potrjene s strani večine (ne bodo naknadno preklicani — dosledni), v primerjavi z local (najnovejši lokalni podatki, ki morda še niso potrjeni s strani večine).
Kompromis med konsistentnostjo in zmogljivostjo
Stronger guarantees (w: majority, readConcern: majority) → safer, consistent, but SLOWER
Weaker guarantees (w: 1, readConcern: local) → faster, but risk of data loss on failover
or reading not-yet-durable data
→ Choose based on the data: critical data (payments) → strong; less critical → faster.
→ Reading from secondaries adds eventual-consistency considerations (stale reads).
Zakaj je to pomembno
Razumevanje pisalne skrbi in bralne skrbi je pomembno za upravljanje kompromisa med konsistentnostjo in zmogljivostjo v MongoDB replikacijskih nizih, zato je dragoceno znanje za starejše ravni pri gradnji pravilnih, ustrezno uglašenih distribuiranih MongoDB aplikacij.
Te nastavitve nadzorujejo garantije konsistentnosti in trajnosti MongoDB, razumevanje pa je potrebno za zagotovitev, da se podatki obravnavajo z ustrezno stopnjo varnosti za njihov pomen. Pisalna skrb je posebej pomembna za trajnost: w: "majority" zagotavlja, da je pisanje replizirano na večino vozlišč (ohranilo bi se pri prevzemu primarne vozlišča brez izgube podatkov — kritično za pomembne podatke, kot so plačila ali naročila), medtem ko je w: 1 hitrejše, vendar tveganja izgube pisanja, če primarna vozlišča odpove pred replikacijo — pomenljiv kompromis, pri katerem bi bila napačna izbira lahko potiha izguba podatkov pri prevzemu. Bralna skrb nadzoruje konsistentnost branj: majority vrne le podatke, potrjene s strani večine (dosledni, ne bodo naknadno preklicani), v primerjavi z local (najnovejši podatki, morda še ne trajni in podvrženi preklicu) — vplivajo na to, ali branja morda vidijo podatke, ki pozneje izginejo.
Razumevanje kompromisa — močnejše garancije (večina) so varnejše in bolj dosledne, vendar počasnejše, šibkejše pa so hitrejše, vendar tvegajo izgubo podatkov ali nedosledna branja — in izbira glede na kritičnost podatkov (moč za pomembne podatke, hitrost za manj kritične) je ključna presoja.
Prav tako je relevantno, da branje s sekundarnih vozlišč dodaja razmisleke o eventualni konsistentnosti (zastarela branja).
Ker sta konsistentnost in trajnost podatkov kritični (pravilna stopnja pa je odvisna od podatkov) in ker sta pisalna/bralna skrb način, kako uglasiti te garancije glede zmogljivosti v MongoDB-jevi distribuirani (replikacijski) arhitekturi, razumevanje — ravni trajnosti/konsistentnosti, kompromisa zmogljivosti in ustrezna izbira — je pomembno znanje za starejše ravni pri gradnji pravilnih distribuiranih MongoDB aplikacij, tema, ki dokazuje razumevanje kompromisov konsistentnosti distribuiranih sistemov, ki je posebej pomembna za aplikacije, kjer bi bila izguba ali nedoslednost podatkov draga.
