sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Por qué el byte 0x00 final después de la cadena BSON (no Cstring/ename)?

El razonamiento tanto para la longitud de la cadena como para el terminador nulo es doble:compatibilidad con cadenas de estilo C existentes y rendimiento.

Para el rendimiento, MongoDB necesita poder ir rápidamente a un campo específico en un documento sin iterar a través de todo el BSON. Esto es importante especialmente si está buscando un campo que esté cerca del final de un documento grande (digamos 16 MB). Con la longitud de la cadena codificada como una de las primeras informaciones en un tipo de cadena, puede omitir esa cantidad de bytes y pasar al siguiente campo. De lo contrario, deberá iterar sobre toda la cadena hasta que encuentre el final de la cadena.

Por compatibilidad, MongoDB está escrito en C++, donde las cadenas son terminación nula . Puede cortar ese terminador nulo para guardar un byte ya que la longitud está codificada, pero obtener esa cadena de BSON en un formato que pueda usar C ++ requeriría agregar ese nulo nuevamente. Esto necesitará una rutina de manejo de cadenas especializada, cuya única ventaja es guardar un solo byte.

En general, se decidió que "desperdiciar" un solo byte es una compensación aceptable.