Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将多个JSON对象记录为单个文件格式_Json_Logging_Protocol Buffers_Bson_Messagepack - Fatal编程技术网

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

将多个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

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

MongoDB如何使用BSON处理这个问题?它使用什么作为“记录”之间的分隔符


协议缓冲区、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以上的编码路由,则会得到“更少”的压缩