هل BASE64 مشفر BSON أصغر ثم BSON؟
سؤال
هل BASE64 مشفر BSON أصغر ثم BSON؟
المحلول
يمين Piskvor ، Base64-encoded-anhother أطول من الخام. يمكنك Base64-encode شيء للحصول عليه على قناة ذات ذخيرة ذات أحرف محدودة ، وليس كوسيلة لتقليل حجمها.
ربما يجب أن يكون السؤال: هل Base64 bson أصغر بعد ذلك جيسون?
إذا كان الأمر كذلك ، فإن JSON-VS-BSON تعتمد إلى حد كبير على المحتوى. على سبيل المثال أرقام نقاط عائمة تعسفية مثل 1.2345678901234567
يتم تخزينها بشكل أكثر كفاءة في 8 بايتات ثنائية في BSON من إصدار JSON String Digit. لكن الأرقام الأكثر شيوعًا مثل ، على سبيل المثال ، 1
, ، يتم تخزينها بشكل أكثر كفاءة كأسلاك في JSON.
بالنسبة لقيم السلسلة ، تفقد BSON 4 بايت لكلمة طولها ، ولكنها تعود إلى كل شيء "
و \
يتعين على JSON الهروب ، بالإضافة إلى المزيد في الأوتار مع شخصيات التحكم حيث يتعين على JSON استخدام تسلسل HEX. (بعض ترميزات JSON أيضًا \u
-قم بتشكيل كل حرف غير ASCII لضمان انتقال آمن بغض النظر عن مجموعة الأحرف.)
IMO: BSON ليس لديه ميزة ضغوط كبيرة على JSON بشكل عام. تكمن قوتها في بساطة فك التشفير في لغة منخفضة المستوى ، بالإضافة إلى أنواع البيانات التي لا تملكها JavaScript. يمكن أن يكون لها مزايا هامشية للسلاسل الثنائية وبعض الحالات الأخرى ؛ من المؤكد أنه يستحق التحقق من عبء عمل معين. لكن هذا ما يقول أن الأمثلة في مواصفات BSON نفسها أصغر بكثير في JSON.
أما بالنسبة لـ BASE64 BSON BSON: نفس الشيء ، باستثناء 33 ٪ أسوأ.
نصائح أخرى
لا: مع Base64 ، 3 بايت من النص العادي تصبح 4 بايت من النص المشفر ، وبالتالي ستكون النتيجة دائمًا أكبر ، بغض النظر عن حمولة البيانات. أنظر أيضا: http://en.wikipedia.org/wiki/base64
لقد كتبت هذا للتو على أنه حل الخاص بي لتقصير BSON ، يرجى التحقق ، يمكن أن يساعدك:
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;
}
}
اختبار
//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);