我有一个解决方案,我需要能够将多个JSON对象记录到文件中。基本上每天做一个日志文件。从单个文件中写入(以及稍后读取)这些内容的最简单方法是什么?
MongoDB如何使用BSON处理此问题?它用作“记录”之间的分隔符?
Protocol Buffers,BSON,MessagePack等...提供压缩和记录概念吗?压缩将是一个很好的好处。
答案 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编码路径,你将获得“减少”压缩。