将多个JSON对象记录到单个文件 - 文件格式

时间:2013-03-07 15:02:11

标签: json logging protocol-buffers bson messagepack

我有一个解决方案,我需要能够将多个JSON对象记录到文件中。基本上每天做一个日志文件。从单个文件中写入(以及稍后读取)这些内容的最简单方法是什么?

MongoDB如何使用BSON处理此问题?它用作“记录”之间的分隔符?

Protocol Buffers,BSON,MessagePack等...提供压缩和记录概念吗?压缩将是一个很好的好处。

1 个答案:

答案 0 :(得分:0)

使用协议缓冲区,您可以按如下方式定义消息:

Message JSONObject {
    required string JSON = 1;
}

Message DailyJSONLog {
  repeated JSONObject JSON = 1;
}

这样你就可以从内存中读取文件并对其进行反序列化。它的序列化方式基本相同。在磁盘上有文件(序列化DailyJSONLog)之后,您可以轻松地将序列化JSONObject附加到该文件的末尾(因为DailyJSONLog消息非常简单地是重复字段) 。

唯一的问题是,如果你每天都有很多信息,或者你想在白天某个地点开始(你不能轻易地到达重复的中间(或任意)列表)。

我通过采用JSONObject,序列化然后对其进行base64编码来解决这个问题。我将这些存储到一个用新行分隔的文件中。这使您可以非常轻松地查看每个文件中有多少条记录,可以访问文件中的任意JSON对象,并且可以轻松地扩展文件(您可以扩展上面的“重复”消息以及非常简单,但它是一个一种简单的操作...)

压缩是一个不同的主题。协议缓冲区不会压缩字符串。如果你要定义一个pb消息来匹配你的JSON消息,那么你将获得让pb可能'压缩'任何整数为[varint][1]编码格式的好处。如果你尝试使用base64编码路径,你将获得“减少”压缩。