JSONとBSONをシリアル化するオブジェクトを比較しています。これらのオブジェクトには、多数の整数の配列が含まれています。私のテストでは、シリアル化しているオブジェクトには合計約12,000の整数が含まれています。私は、直列化された結果のサイズを比較する方法にのみ関心があります。私は、シリアル化を行うライブラリとしてJSON.NETを使用しています。 JSONを使用しています.Javascriptで作業できるようにしたいからです。JSONとBSONの比較
JSON文字列のサイズは約43kbで、BSON結果のサイズは161kbです。 BSONの方がデータを保存する方が効率的だと思ったので、これは私が期待したものではありません。
私の質問はなぜBSONが効率的でないのか、より効率的にすることができるのですか?または、Javascriptで簡単に処理できる多数の整数を含む配列を使用してデータをシリアル化する別の方法がありますか?
JSON/BSONシリアル化をテストするコードを以下に示します。
// Read file which contain json string
string _jsonString = ReadFile();
object _object = Newtonsoft.Json.JsonConvert.DeserializeObject(_jsonString);
FileStream _fs = File.OpenWrite("BsonFileName");
using (Newtonsoft.Json.Bson.BsonWriter _bsonWriter = new BsonWriter(_fs)
{ CloseOutput = false })
{
Newtonsoft.Json.JsonSerializer _jsonSerializer = new JsonSerializer();
_jsonSerializer.Serialize(_bsonWriter, _object);
_bsonWriter.Flush();
}
編集:
はここ https://skydrive.live.com/redir?resid=9A6F31F60861DD2C!362&authkey=!AKU-ZZp8C_0gcR0
、(32ビットまたは64ビット整数としてよりも、単一のASCIIバイトとして線を越え、例えば、「2」を送信するために、より効率的であるかもしれそれぞれ4バイトおよび8バイト)。 これは(または類似の)データのプロパティである可能性がありますか? –
私が正しく理解していると、ASCII/UTF-8でのエンコーディングがJSONで現時点でやっていることです。整数の配列を持つオブジェクトは、JSON形式の文字列にシリアル化されます。この文字列は、ワイヤを介して送信されるか、またはUTF-8でエンコードされたディスクに保存されます。したがって、数値はASCII/UTF-8バイトとして送信されます。私が間違っていれば私を修正してください。 – Ronald
[Here](https://coderwall.com/p/ccdryg)は、PHPのJsonとBsonの優れたパフォーマンスベンチマークbtwです。また、[protocol-buffers-versus-json-or-bson](http://stackoverflow.com/questions/2000933/protocol-buffers-versus-json-or-bson)を参照してください。 – nawfal