2013-03-07 49 views
0

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

MongoDB如何处理BSON?它用作“记录”之间的分隔符是什么?

协议缓冲区,BSON,MessagePack等等提供压缩和记录概念吗?压缩将是一个很好的好处。

回答

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编码路由,您将获得“较少”压缩。