【问题标题】:Logging Multiple JSON Objects to a Single File - File Format将多个 JSON 对象记录到单个文件 - 文件格式
【发布时间】:2013-03-07 15:02:10
【问题描述】:

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

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

Protocol Buffers、BSON、MessagePack 等是否提供压缩和记录概念?压缩将是一个很好的好处。

【问题讨论】:

    标签: json logging protocol-buffers bson messagepack


    【解决方案1】:

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

    Message JSONObject {
        required string JSON = 1;
    }
    
    Message DailyJSONLog {
      repeated JSONObject JSON = 1;
    }
    

    这样你就可以从内存中读取文件并反序列化它。序列化它们的方式也基本相同。在磁盘上获得文件(序列化DailyJSONLog)后,您可以轻松地将序列化JSONObjects 附加到该文件的末尾(因为DailyJSONLog 消息非常简单地是一个重复字段)。

    唯一的问题是,如果您每天有很多消息,或者如果您想在一天中从某个位置开始(您无法轻松到达重复消息的中间(或任意)列表)。

    我通过使用JSONObject,对其进行序列化,然后对其进行base64 编码来解决这个问题。我会将这些存储到一个由新行分隔的文件中。这使您可以非常轻松地查看每个文件中有多少条记录,访问文件中的任意 JSON 对象并轻松地继续扩展文件(您也可以非常简单地扩展上述“重复”消息,但它是一种简单的操作方式...)

    压缩是一个不同的主题。协议缓冲区不会压缩字符串。如果您要定义一条 pb 消息来匹配您的 JSON 消息,那么您将受益于让 pb 可能将任何整数“压缩”成它们的 [varint][1] 编码格式。如果您也尝试使用上述 base64 编码路线,您将获得“更少”的压缩。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-17
      • 2017-05-20
      • 1970-01-01
      • 2015-04-25
      • 2011-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多