sql >> Database >  >> NoSQL >> MongoDB

Waarom gebruikt MongoDB geen fsync()?

De reden is de prestatie. Zonder bij elke wijziging naar schijf te hoeven schrijven, kan MongoDB updates sneller verwerken.

MongoDB vertelt u wanneer updates zijn geleverd naar de server, niet wanneer de updates zijn geschreven , zoals u kunt lezen in de documentatie op Propagatie verifiëren van schrijfbewerkingen met getLastError :

Dit gaat in tegen ACID , meer specifiek tegen de D, die staat voor duurzaamheid :

ACID-eigenschappen zijn meestal van toepassing op traditionele RDBMS-systemen. NoSQL-systemen, waaronder MongoDB, geven een of meer van de ACID-eigenschappen op om een ​​betere schaalbaarheid te bereiken. In het geval van MongoDB is duurzaamheid opgeofferd voor betere prestaties bij het verwerken van grote hoeveelheden updates.

MongoDB en ACID

De meeste ACID-eigenschappen zijn garanties op transactieniveau . Een transactie is meestal een groep zoekopdrachten die als een enkele eenheid moet worden behandeld. MongoDB heeft geen concept van transacties, opnieuw om prestatieredenen . Daarom zijn de meeste ACID-eigenschappen niet van toepassing op MongoDB.

Een — Atomiciteit stelt dat een transactie moet slagen of mislukken. Het is niet toegestaan ​​om gedeeltelijk te slagen; als een deel van de transactie mislukt, moet de hele transactie worden teruggedraaid. MongoDB ondersteunt atoombewerkingen op documentniveau, maar niet op 'transactieniveau'.

C — Consistentie verwijst gedeeltelijk naar atomiciteit, maar omvat ook referentiële integriteit . Een relationele database is verantwoordelijk om ervoor te zorgen dat alle refererende sleutelreferenties geldig zijn. MongoDB heeft geen concept van externe sleutels, dus deze ACID-eigenschap is niet van toepassing.

Ik — Isolatie stelt dat twee gelijktijdige transacties elkaar niet mogen hinderen; als twee transacties dezelfde gegevens proberen te wijzigen, moet de tweede transactie wachten tot de eerste is voltooid. Om dit te bereiken, zal de database de gegevens vergrendelen. MongoDB heeft geen concept van vergrendeling, dus het ondersteunt geen isolatie voor meerdere activiteiten. Enkele bewerkingen zijn geïsoleerd.

D — Duurzaamheid is hierboven beschreven. MongoDB ondersteunt (nog) geen echte duurzaamheid in termen van ACID-ic duurzaamheid.

Nu denk je misschien dat MongoDB nutteloos is in vergelijking met RDBMS-systemen omdat het transacties en de meeste ACID-garanties mist. Een deel van de reden dat transacties bestaan, is echter dat relationele databases bepaalde gegevens als een enkele entiteit moeten behandelen. , maar deze gegevens zijn genormaliseerd in meerdere tabellen .

Met MongoDB kunt u uw gegevens als een enkele entiteit opslaan . Hierdoor zijn in de meeste gevallen geen externe sleutels en referentiële integriteit meer nodig. U hebt ook geen transacties met meerdere query's nodig, omdat u niet meerdere tabellen nodig hebt om een ​​enkele entiteit bij te werken. Meestal hoeft u maar één document bij te werken, en deze bewerkingen zijn atomair in MongoDB.

Volgens de eerste reactie op deze pagina , db.eval() biedt isolatie voor meerdere operaties. Volgens de documentatie u wilt meestal het gebruik van db.eval() . vermijden .



  1. Automatisering van implementatie van MongoDB-database

  2. MongoDB uitvoeren met Ops Manager

  3. Test lege string in mongodb en pymongo

  4. Redis store (of een database?) Lock-mechanisme (NodeJS)