/ / Protokollieren mehrerer JSON-Objekte in einer einzigen Datei - Dateiformat - JSON, Protokollierung, Protokollpuffer, BPS, Nachrichtenpaket

Protokollieren mehrerer JSON-Objekte in einer einzigen Datei - Dateiformat - JSON, Protokollierung, Protokollpuffer, BPS, Nachrichtenpaket

Ich habe eine Lösung, wo ich mehrere JSON-Objekte in einer Datei protokollieren kann. Im Wesentlichen eine Protokolldatei pro Tag. Was ist der einfachste Weg, um diese aus einer einzigen Datei zu schreiben (und später zu lesen)?

Wie geht MongoDB mit BSON um? Was benutzt es als Trennzeichen zwischen "Records"?

Bietet Protocol Buffers, BSON, MessagePack, etc ... Komprimierung und das Record-Konzept? Kompression wäre ein netter Vorteil.

Antworten:

0 für die Antwort № 1

Mit Protokollpuffern können Sie die Nachricht wie folgt definieren:

Message JSONObject {
required string JSON = 1;
}

Message DailyJSONLog {
repeated JSONObject JSON = 1;
}

Auf diese Weise würden Sie einfach die Datei aus dem Speicher lesen und sie deserialisieren. Es ist im Wesentlichen der gleiche Weg, sie auch zu serialisieren. Sobald Sie die Datei haben (serialisiert DailyJSONLog) auf der Festplatte können Sie einfach einfach serialisiert anhängen JSONObjects bis zum Ende dieser Datei (seit DailyJSONLog Nachricht ist sehr einfach ein wiederholtes Feld).

Das einzige Problem mit diesem ist, wenn Sie viel habenNachrichten jeden Tag oder wenn Sie an einem bestimmten Ort während des Tages beginnen möchten (Sie können nicht leicht in die Mitte (oder willkürlich) der wiederholten Liste).

Ich habe mich damit herumgeschlagen, indem ich ein JSONObjectserialisieren und dann base64 codieren. Ich würde diese in einer Datei speichern, die durch eine neue Zeile getrennt ist. Dadurch können Sie ganz einfach sehen, wie viele Datensätze in jeder Datei vorhanden sind, Zugriff auf beliebige JSON-Objekte innerhalb der Datei erhalten und die Datei trivial erweitern (Sie können erweitern) die obige "wiederholte" Nachricht ist auch ziemlich trivial, aber es ist eine einseitige einfache Operation ...)

Komprimierung ist ein anderes Thema. Protokollpuffer werden keine Zeichenfolgen komprimieren. Wenn Sie eine Pb-Nachricht definieren, die Ihrer JSON-Nachricht entspricht, dann haben Sie den Vorteil, dass Pb möglicherweise ganze Zahlen in ihre "komprimieren" kann [varint][1] kodiertes Format. Sie werden "weniger" Komprimierung erhalten, wenn Sie auch über die base64-Encoding-Route versuchen.