複数のJSONオブジェクトをファイルに記録できるようにする必要があるソリューションがあります。基本的に、1日に1つのログファイルを実行します。単一のファイルからこれらを書き込む(そして後で読み取る)最も簡単な方法は何ですか?
MongoDBはBSONでこれをどのように処理しますか?「レコード」間の区切り文字として何を使用しますか?
Protocol Buffers、BSON、MessagePackなどは圧縮とレコードの概念を提供しますか?圧縮は素晴らしい利点です。
複数のJSONオブジェクトをファイルに記録できるようにする必要があるソリューションがあります。基本的に、1日に1つのログファイルを実行します。単一のファイルからこれらを書き込む(そして後で読み取る)最も簡単な方法は何ですか?
MongoDBはBSONでこれをどのように処理しますか?「レコード」間の区切り文字として何を使用しますか?
Protocol Buffers、BSON、MessagePackなどは圧縮とレコードの概念を提供しますか?圧縮は素晴らしい利点です。
プロトコル バッファを使用すると、次のようにメッセージを定義できます。
Message JSONObject {
required string JSON = 1;
}
Message DailyJSONLog {
repeated JSONObject JSON = 1;
}
この方法では、メモリからファイルを読み取って逆シリアル化するだけです。それらをシリアル化する方法も本質的に同じです。ディスク上にファイル ( serialized ) を作成したら、そのファイルの最後にDailyJSONLog
serialized を簡単に追加できます (メッセージは非常に単純な繰り返しフィールドであるため)。JSONObject
DailyJSONLog
これに関する唯一の問題は、毎日大量のメッセージがある場合、または日中に特定の場所から開始したい場合です (繰り返されるリストの中間 (または任意) に簡単に到達することはできません)。
JSONObject
を取得し、シリアル化してからbase64でエンコードすることで、これを回避しました。これらを改行で区切ってファイルに保存します。これにより、各ファイルにいくつのレコードがあるかを非常に簡単に確認し、ファイル内の任意の JSON オブジェクトにアクセスして、ファイルを簡単に展開し続けることができます (上記の「繰り返される」メッセージも簡単に展開できますが、片道簡単操作...)
圧縮は別のトピックです。Protocol Buffers は文字列を圧縮しません。JSON メッセージに一致するように pb メッセージを定義する場合、pb で任意の整数を[varint][1]
エンコードされた形式に「圧縮」できるという利点があります。上記の base64 エンコーディング ルートも試すと、「より少ない」圧縮が得られます。