Vergleichen Sie JSON und BSON
Ich bin den Vergleich von JSON und BSON für das serialisieren von Objekten. Diese Objekte enthalten mehrere arrays von einer großen Anzahl von ganzen zahlen. In meinem test-Objekt, ich bin der Serialisierung enthält eine Gesamtzahl von rund 12 000 zahlen. Ich bin nur daran interessiert, wie die Größen vergleichen der Ergebnisse serialisiert. Ich bin mit JSON.NET als die Bibliothek, die nicht die Serialisierung. Ich bin mit JSON denn ich möchte auch in der Lage sein, mit ihm zu arbeiten, in Javascript.
Die Größe der JSON-string wird über 43kb und die Größe des BSON-Ergebnis ist 161kb. Also ein Unterschied um etwa den Faktor 4. Dies ist nicht das, was ich erwartet hatte, denn ich sah BSON, weil ich dachte, BSON ist effizienter bei der Speicherung von Daten.
Also meine Frage ist, warum ist BSON nicht effizient ist, kann es effizienter gemacht werden? Oder gibt es eine andere Möglichkeit der Serialisierung von Daten mit arrays, die große Anzahl der zahlen, die leicht gehandhabt werden können, die in Javascript?
Unten finden Sie den code zum testen der JSON/BSON-Serialisierung.
//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();
}
Edit:
Hier sind die resultierenden Dateien
https://skydrive.live.com/redir?resid=9A6F31F60861DD2C!362&authkey=!AKU-ZZp8C_0gcR0
InformationsquelleAutor der Frage Ronald | 2012-09-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Effizienz von JSON vs BSON, hängt von der Größe des integers, Sie sind speichern. Es gibt einen interessanten Punkt, wo die ASCII-braucht weniger bytes als tatsächlich die Speicherung von integer-Typen. 64-bit-Ganzzahlen ist, wie es scheint, Ihre BSON-Dokument, bis 8 bytes. Ihre zahlen sind alle weniger als 10.000, das heißt, Sie speichern könnte jeder in ASCII-4 Byte (ein byte für jedes Zeichen bis 9999). In der Tat, die meisten Ihrer Daten so Aussehen, dass es weniger als 1000, was bedeutet, es kann gespeichert werden, in 3 oder weniger bytes. Natürlich, dass der Deserialisierung braucht Zeit und ist nicht Billig, aber es spart Platz. Darüber hinaus nutzt Javascript 64-bit-Werte zur Darstellung aller zahlen, so dass, wenn Sie schrieb es auf BSON nach der Konvertierung jede ganze Zahl zu einem geeigneten dataformat, Ihre BSON-Datei könnte viel größer sein.
Laut spec, BSON, enthält eine Menge von Metadaten in JSON nicht. Diese Metadaten sind meist die Länge der Präfixe, so dass Sie übersprungen werden können, durch die Daten, die Sie nicht interessieren. Nehmen wir zum Beispiel die folgenden Daten:
Nun, wenn Sie in der JSON-Sie analysieren die Gesamtheit der ersten beiden Zeichenfolgen, um herauszufinden, wo die Dritte ist. Wenn Sie BSON, erhalten Sie markup mehr wie (aber nicht wirklich, weil ich mache das markup für den sake des Beispiels):
So, jetzt können Sie Lesen, '175', kennen zu überspringen 175 bytes, dann Lesen Sie '169', skip forward-169 bytes, und dann Lesen '19' und kopieren Sie die nächsten 19 bytes zu Ihrem string. So dass Sie nicht selbst Parsen der Zeichenketten für Trennzeichen.
Mit einer im Vergleich zu den anderen ist sehr davon abhängig, was Ihre Bedürfnisse sind. Wenn du gehst zu speichern enorme Dokumente, die Sie haben alle Zeit der Welt zu analysieren, aber Ihr Speicherplatz ist begrenzt, JSON verwenden, weil es mehr kompakt und platzsparend.
Wenn Sie gehen, um die Speicherung der Dokumente, sondern die Reduzierung warten Zeit (vielleicht in einem server-Kontext) ist für Sie wichtiger als das spart etwas Speicherplatz BSON.
Andere Sache zu beachten bei der Wahl ist die Lesbarkeit. Wenn Sie Debuggen müssen eine crash-Bericht, enthält BSON, werden Sie wahrscheinlich benötigen, ein Programm zu entschlüsseln. Sie vermutlich wissen nicht, BSON, aber Sie können nur Lesen JSON.
FAQ
InformationsquelleAutor der Antwort saml