MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Por que o byte 0x00 à direita após a string BSON (não Cstring/ename)?


O raciocínio para o comprimento da string e o terminador nulo é duplo:compatibilidade com strings de estilo C existentes e desempenho.

Para desempenho, o MongoDB precisa ser capaz de ir rapidamente para um campo específico em um documento sem iterar por todo o BSON. Isso é importante especialmente se você estiver procurando por um campo próximo ao final de um documento grande (digamos, 16 MB). Com o comprimento da string codificada como uma das primeiras informações em um tipo de string, ele pode simplesmente pular esse número de bytes e ir para o próximo campo. Caso contrário, ele precisará iterar em toda a string até encontrar o final da string.

Para compatibilidade, o MongoDB é escrito em C++, onde as strings são null-terminated . Ele pode cortar esse terminador nulo para salvar um byte, já que o comprimento é codificado, mas obter essa string do BSON em um formato que seja utilizável pelo C++ exigiria adicionar esse nulo novamente. Isso precisará de uma rotina especializada de manipulação de strings, cuja única vantagem é economizar um único byte.

No geral, foi decidido que "desperdiçar" um único byte é uma compensação aceitável.