Pergunta

Base64 é codificado BSON menor que o BSON?

Foi útil?

Solução

A direita de Piskvor, Base64 codificada, qualquer coisa é mais longa que a crua. Você baseia 64 codifica algo para derrubá-lo em um canal com um repertório limitado de caracteres, não como um meio de reduzir o tamanho.

Talvez a pergunta deva ser: Base64 codificou o BSON menor então JSON?

Nesse caso, o JSON-VS-BSON depende muito do conteúdo. Por exemplo, números de ponto flutuante arbitrário como 1.2345678901234567 são armazenados com mais eficiência em 8 bytes binários no BSON do que na versão JSON String Digit. Mas os números mais comuns como, digamos, 1, são muito mais eficientemente armazenados como cordas em JSON.

Para valores de string, o BSON perde 4 bytes para uma palavra de comprimento, mas recua para cada " e \ O JSON tem que escapar, além de mais strings com caracteres de controle onde o JSON precisa usar uma sequência hexadecimal. (Alguns codificadores JSON também \u-Cescape todo caractere não-ASCII para garantir uma transmissão segura, independentemente do conjunto de caracteres.)

IMO: O BSON não tem uma grande vantagem de compactação sobre o JSON em geral. Sua força reside mais na simplicidade da decodificação em uma linguagem de baixo nível, além de tipos de dados que JavaScript não possui. Pode ter vantagens marginais para cordas binárias e alguns outros casos; Certamente vale a pena verificar por uma carga de trabalho específica. Mas é revelador que os exemplos na especificação BSON em si são consideravelmente menores em JSON.

Quanto ao BSON codificado por Base64: o mesmo, exceto 33% pior.

Outras dicas

Não: com base64, 3 bytes de texto simples tornam -se 4 bytes de texto codificado, portanto, o resultado sempre será maior, independentemente da carga útil dos dados. Veja também: http://en.wikipedia.org/wiki/base64

Acabei de escrever isso como minha só solução para interromper o BSON, por favor, verifique, pode ajudá -lo:

var bsonShortify = {
  encode:function(bson){
    return this._hex2urlBase(bson.substr(0,bson.length/2))+this._hex2urlBase(bson.substr(bson.length/2,bson.length/2));
  },
  decode:function(token){
    return this._urlBase2hex(token.substr(0,token.length/2))+this._urlBase2hex(token.substr(token.length/2,token.length/2));
  },
  _base:62,
  _baseChars:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
  _urlBase2hex:function(token){
    var s = 0, n, l = (n = token.split("")).length, i = 0;
    while(l--) s += this._baseChars.indexOf(n[i++]) * Math.pow(this._base, l);
    return s.toString(16);
  },
  _hex2urlBase:function(bson){
    var s = "", n = parseInt(bson,16);
    while(n) s = this._baseChars[n % this._base] + s, n = Math.floor(n / this._base);
    return s;
  } 
}

TESTE

//we have bson
var bson = '4f907f7e53a58f4313000028';
//let's encode it
var urlstring = bsonShortify.encode(bson) // = OqAYQdCHijCDMbRg
//let's decode urlstring
var decoded_bson = bsonShortify.decode(urlstring); // = 4f907f7e53a58f4313000028

console.log('bson',bson);
console.log('urlstring',urlstring);
console.log('decoded_bson',decoded_bson);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top