关于MessagePack的一些记录

昨天记录了ProtoBuf的一些记录,然后因为项目中用的是MessagePack,就大概了解了一下MessagePack的一些原理,然后做下简单记录。

MessagePack从数据上来看整体是不错的,空间也有较大节省,序列化和反序列化的速度都非常优秀(各家说各家的好,不知道怎么统计的)

对于MessagePack来说,它也是按照类型进行压缩,利用少量的类型信息,来优化Value部分的存储消耗。

比如我们分析了ProtoBuf采用的是Variant Number这种变长整形的压缩。MessagePack做的更直接,直接看你Value的值用几位可以表示,8位,16位,还是32位,那我就标记3种不同的类型信息,然后吧Value按照对应的字节直接写入后边。这样也起到了压缩的作用。和ProtoBuf比,可能会有一定的浪费,但对于小数字来说相对还好。因为ProtoBuf有MSB的概念,特别对于比较大的数,至少要浪费2-3位的MSB,如果这2-3位被MsgPack用来做type信息,实际上二者在空间上是差不多的。

但实际上,MsgPack应该还是节省了一些。因为ProtoBuf记录了FiledNum,也就是字段的信息,而MsgPack可以忽略这个信息,强制按照顺序去对字段进行序列化。这样的好处是节省内存空间,缺点是,比较难去做字段扩展,一旦字段顺序改变,或者增删,基本上很难和过去的数据结构进行兼容。但ProtoBuf因为有字段的信息,所以有的就序列化,没有的就用默认值。

只能说MsgPack对于各种正负数,小数的处理,都按照类型这种模式以后确实简化优雅了不少。

具体的效率,结合Runtime,可以做到更优,结合具体的预研,也可以优化。比如C#的GC。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值