0

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

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

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

4

1 回答 1

0

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

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

于 2013-03-07T17:05:05.423 回答