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

Perché il byte finale 0x00 dopo la stringa BSON (non Cstring/ename)?

Il ragionamento sia per la lunghezza della stringa che per il terminatore null è duplice:compatibilità con le stringhe in stile C esistenti e prestazioni.

Per le prestazioni, MongoDB deve essere in grado di accedere rapidamente a un campo specifico in un documento senza scorrere l'intero BSON. Questo è importante soprattutto se stai cercando un campo vicino alla fine di un documento di grandi dimensioni (diciamo 16 MB). Con la lunghezza della stringa codificata come una delle prime informazioni su un tipo di stringa, può semplicemente saltare quel numero di byte e passare al campo successivo. In caso contrario, dovrà scorrere l'intera stringa finché non trova la fine della stringa.

Per compatibilità, MongoDB è scritto in C++, dove le stringhe sono null terminate . Può tagliare quel terminatore null per salvare un byte poiché la lunghezza è codificata, ma ottenere quella stringa da BSON in un formato utilizzabile da C++ richiederebbe di nuovo il valore nullo. Ciò richiederà una routine di gestione delle stringhe specializzata, l'unico vantaggio è il salvataggio di un singolo byte.

Nel complesso, è stato deciso che "sprecare" un singolo byte è un compromesso accettabile.