sql >> Database >  >> NoSQL >> MongoDB

Biedt het uitvoeren van een gedeeltelijke update van een MongoDb-document in WiredTiger enig voordeel ten opzichte van een volledige documentupdate?

WiredTiger gebruikt Multiversion Concurrency Control (MVCC) om meerdere weergaven van gegevens te behouden voor de levensduur van lezers. Het in-memory formaat van WiredTiger is anders dan het on-disk formaat:in het geheugen worden diffs naar een document opgeslagen, maar een volledige versie van het document wordt geconstrueerd wanneer het naar de gegevensbestanden wordt doorgespoeld als onderdeel van periodieke controlepunten.

Ongeacht hoe verschillende MongoDB-opslagengines met persistente updates op schijf omgaan, zijn er nog steeds prestatievoordelen bij het gebruik van gedeeltelijke updates in plaats van volledige updates waar mogelijk (vooral als u veldwaarden instelt die klein zijn in verhouding tot de totale documentgrootte).

Denk bijvoorbeeld aan:

  • Netwerkverkeer voor documentupdates (elke opslagengine)
  • Grootte van boekingen in het journaal (elke opslagengine)
  • Grootte van vermeldingen in de replicatie-oplog (elke opslagengine)
  • Grootte van in-memory versies van updates (WiredTiger)

Als u elke keer volledige documentupdates verstuurt, creëert u ook scenario's waarin de volgorde waarin updates de server bereiken significant is, zelfs wanneer wijzigingen mogelijk zijn voor afzonderlijke veldsets. U kunt aanvullende toepassingslogica toevoegen, zoals optimistisch versiebeheer om ervoor te zorgen dat u niet per ongeluk veldwaarden overschrijft, maar dit kan, afhankelijk van uw gebruikssituatie, onnodige complexiteit toevoegen.




  1. Wat is Hadoop OutputFormat in MapReduce?

  2. Als u in een primair-secundaire Mongo db-set per ongeluk naar een secundair schrijft, wordt dit in het primaire weergegeven en wordt het doorgestuurd naar het primaire

  3. kunnen meerdere clients tegelijkertijd toegang krijgen tot dezelfde lijst zonder geblokkeerd te worden in Redis?

  4. MongoDB $acosh