sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvorfor den efterfølgende 0x00 byte efter BSON-strengen (ikke Cstring/ename)?

Begrundelsen for både længden af ​​strengen og nulterminatoren er todelt:kompatibilitet med eksisterende C-stil strenge og ydeevne.

For ydeevne skal MongoDB hurtigt kunne gå til et bestemt felt i et dokument uden at gentage hele BSON. Dette er vigtigt, især hvis du leder efter et felt, der er tæt på slutningen af ​​et stort (f.eks. 16 MB) dokument. Med længden af ​​strengen kodet som en af ​​de første oplysninger om en strengtype, kan den bare springe det antal bytes over og komme til det næste felt. Ellers bliver den nødt til at iterere over hele strengen, indtil den finder enden af ​​strengen.

For kompatibilitet er MongoDB skrevet i C++, hvor strenge er nullterminerede . Det kan afskære den null-terminator for at gemme en byte, da længden er kodet, men at få den streng ud af BSON til et format, der kan bruges af C++, ville kræve at slå den null igen. Dette vil kræve en specialiseret strenghåndteringsrutine, som er den eneste fordel er at gemme en enkelt byte.

Generelt blev det besluttet, at "spild" af en enkelt byte er en acceptabel afvejning.




  1. MongoError:Dokument mislykkedes validering - Hvordan indsætter man både float og int i samme felt - som er markeret som dobbelt?

  2. MongoDB:Træk komplet Key:Array Pair

  3. Redis lua script virker ikke

  4. MongoDB $avg Aggregation Pipeline Operator