【发布时间】:2012-09-26 12:37:23
【问题描述】:
我正在比较 JSON 和 BSON 来序列化对象。这些对象包含多个包含大量整数的数组。在我的测试中,我正在序列化的对象总共包含大约 12,000 个整数。我只对序列化结果的大小比较感兴趣。我使用 JSON.NET 作为进行序列化的库。我使用 JSON 是因为我也希望能够在 Javascript 中使用它。
JSON 字符串大小约为 43kb,BSON 结果大小为 161kb。所以差异因子约为 4。这不是我所期望的,因为我查看了 BSON,因为我认为 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
【问题讨论】:
-
如果您有很多小数字,例如,通过网络发送“2”作为单个 ASCII 字节可能比作为 32 位或 64 位整数 (分别为 4 和 8 个字节)。这(或类似的东西)是否可能是您数据的属性?
-
如果我理解正确的话,用 ASCII/UTF-8 编码就是我现在用 JSON 做的事情。具有整数数组的对象被序列化为 JSON 格式的字符串。该字符串随后通过线路发送或保存到以 UTF-8 编码的磁盘。所以这些数字以 ASCII/UTF-8 字节的形式发送。如果我错了,请纠正我。
-
Here 是 php 中 Json 和 Bson 的简洁性能基准。另请参阅protocol-buffers-versus-json-or-bson
-
那么 PSON (github.com/dcodeIO/PSON) 呢?包含在我的github.com/eltomjan/gason C++ -> C# 翻译中。或者它原来的 C# DLL github.com/dcodeIO/PSONSharp
标签: javascript .net json json.net bson