将多个JSON对象记录为单个文件格式
我有一个解决方案,需要能够将多个JSON对象记录到一个文件中。基本上每天做一个日志文件。从单个文件中写入(以及以后读取)这些文件的最简单方法是什么 MongoDB如何使用BSON处理这个问题?它使用什么作为“记录”之间的分隔符将多个JSON对象记录为单个文件格式,json,logging,protocol-buffers,bson,messagepack,Json,Logging,Protocol Buffers,Bson,Messagepack,我有一个解决方案,需要能够将多个JSON对象记录到一个文件中。基本上每天做一个日志文件。从单个文件中写入(以及以后读取)这些文件的最简单方法是什么 MongoDB如何使用BSON处理这个问题?它使用什么作为“记录”之间的分隔符 协议缓冲区、BSON、MessagePack等是否。。。提供压缩和记录的概念?压缩将是一个很好的好处 使用协议缓冲区,您可以如下定义消息: Message JSONObject { required string JSON = 1; } Message Dail
协议缓冲区、BSON、MessagePack等是否。。。提供压缩和记录的概念?压缩将是一个很好的好处 使用协议缓冲区,您可以如下定义消息:
Message JSONObject {
required string JSON = 1;
}
Message DailyJSONLog {
repeated JSONObject JSON = 1;
}
这样,您就可以从内存中读取文件并对其进行反序列化。这与序列化它们的方法基本相同。一旦文件(序列化的DailyJSONLog
)在磁盘上,您就可以轻松地将序列化的JSONObject
s附加到该文件的末尾(因为DailyJSONLog
消息只是一个重复的字段)
唯一的问题是,如果你每天都有很多消息,或者你想在一天中的某个位置开始(你不能轻易地进入重复列表的中间位置(或任意位置)
我通过获取一个JSONObject
,将其序列化,然后对其进行base64编码来解决这个问题。我会将它们存储到一个文件中,以新行分隔。这使您可以非常轻松地查看每个文件中有多少条记录,访问文件中的任意JSON对象,并轻松地继续扩展文件(您也可以轻松地扩展上面的“重复”消息,但这是一个单向的简单操作…)
压缩是另一个主题。协议缓冲区不会压缩字符串。如果要定义pb消息来匹配JSON消息,那么pb可能会将任何整数“压缩”为其[varint][1]
编码格式,这将使您受益匪浅。如果您也尝试使用base64以上的编码路由,则会得到“更少”的压缩