sql >> Database >  >> NoSQL >> MongoDB

Waarom de achterliggende 0x00 byte na BSON-tekenreeks (niet Cstring/ename)?

De redenering voor zowel de lengte van de snaar als de nulterminator is tweeledig:compatibiliteit met bestaande C-stijl snaren en prestaties.

Voor prestaties moet MongoDB snel naar een specifiek veld in een document kunnen gaan zonder de hele BSON te doorlopen. Dit is vooral belangrijk als u op zoek bent naar een veld dat zich dicht bij het einde van een groot document (bijvoorbeeld 16 MB) bevindt. Met de lengte van de string gecodeerd als een van de eerste informatie over een stringtype, kan het dat aantal bytes gewoon overslaan en naar het volgende veld gaan. Anders moet het de hele string herhalen totdat het het einde van de string vindt.

Voor compatibiliteit is MongoDB geschreven in C++, waar strings null beëindigd zijn . Het kan die null-terminator afsnijden om één byte op te slaan, omdat de lengte is gecodeerd, maar om die string uit BSON te krijgen in een formaat dat bruikbaar is voor C++, zou die null opnieuw moeten worden aangepakt. Dit vereist een gespecialiseerde routine voor het afhandelen van strings, het enige voordeel is het opslaan van een enkele byte.

Over het algemeen werd besloten dat het "verspillen" van een enkele byte een acceptabele afweging is.




  1. Sorteren op Meerdere velden mongo DB

  2. Hoe objectsleutels en waarden in Mongoose Schema valideren?

  3. MongoDB met CSV-gegevens

  4. Exporteer JSON-gegevens en laad ze in een relationele database