是否存在建立良好的消息格式,可以很好地处理重复的密钥?

时间:2019-03-07 16:03:59

标签: json serialization compression deserialization

在我的工作中,我有一些非常大的嵌套对象,当序列化为JSON时,它们的大部分大小都由键名(字段名,重复多次)占用。这似乎是一种浪费。

所以我想出了一种新格式:

  

["foo","bar"]{0: [1, 2, {0: 12}], 1: true}

等效于以下json:

  

{"foo":[1, 2, {"foo":12}], "bar": true}

除非多次使用特定的密钥,否则您不会看到可观的节省,但是就我而言,这就是发生的情况。我使用我们的生产数据中的一个大型真实对象对其进行了测试,这是87 MB的解压缩json。将其重新格式化为上面建议的格式后,大小为24 MB。

我还尝试了CBOR(72M)和messagepack(71MB)。

我并不是说这将是所有用例的最佳消息格式,但是对我来说,这是一个巨大的节省。 Profiling表示,几乎所有的时间都花在对这些大型JSON文件进行解压缩上,因此切换到更紧凑的格式将节省大量费用(已通过尝试CBOR进行了确认)。

不幸的是,尽管以上述格式为原始对象编写python解析器/转储非常容易,但在我目前的时间限制下,编写Jackson插件或serde插件以支持反序列化为实际数据类型并不现实。

那么,是否有一个现有的数据序列化标准可以有效地消除重复的密钥(如上述格式;不必完全相同)?如果人们已经解决了这个问题,我就不想重新发明轮子。

0 个答案:

没有答案