Estoy comparando JSON y BSON para serializar objetos. Estos objetos contienen varias matrices de una gran cantidad de enteros. En mi prueba, el objeto que estoy serializando contiene una cantidad total de aproximadamente 12,000 enteros. Solo me interesa cómo se comparan los tamaños de los resultados serializados. Estoy usando JSON.NET como la biblioteca que hace la serialización. Estoy usando JSON porque también quiero poder trabajar con él en Javascript.Comparar JSON y BSON
El tamaño de la cadena JSON es de aproximadamente 43kb y el tamaño del resultado BSON es de 161kb. Entonces, un factor de diferencia de aproximadamente 4. Esto no es lo que esperaba porque miré a BSON porque pensé que BSON es más eficiente en el almacenamiento de datos.
Entonces mi pregunta es por qué BSON no es eficiente, ¿se puede hacer más eficiente? ¿O hay otra forma de serializar datos con matrices que contienen una gran cantidad de enteros, que se pueden manejar fácilmente en Javascript?
A continuación encontrará el código para probar la serialización 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();
}
Editar:
Éstos son los archivos resultantes https://skydrive.live.com/redir?resid=9A6F31F60861DD2C!362&authkey=!AKU-ZZp8C_0gcR0
Si usted tiene una gran cantidad de pequeñas cantidades, puede ser más eficiente para enviar, por ejemplo, "2" a través del cable como un solo byte ASCII que como un número entero de 32 o 64 bits (4 y 8 bytes, respectivamente). ¿Es posible que esto (o algo similar) sea una propiedad de sus datos? –
Si lo entiendo correctamente, la codificación con ASCII/UTF-8 es lo que estoy haciendo en este momento con JSON. El objeto con las matrices de enteros se serializa a una cadena en formato JSON. Esta cadena se envía luego a través del cable o se guarda en el disco codificado en UTF-8. Entonces los números se envían como bytes ASCII/UTF-8. Por favor, corríjame si estoy equivocado. – Ronald
[Aquí] (https://coderwall.com/p/ccdryg) es un punto de referencia de rendimiento limpio por cierto Json y Bson en php. Además, consulte [protocol-buffers-versus-json-or-bson] (http://stackoverflow.com/questions/2000933/protocol-buffers-versus-json-or-bson) – nawfal