SuperPack——实现更小负载的新序列化格式

Shape Security开源了一个新的无模式二进制序列化格式,名为SuperPack。

SuperPack使用了二进制的序列化模式,这意味着会减少负载的大小。按照Shape Security的说法,对于一个给定的4.48 KB的样例信息,相对于多个其他的无模式格式,SuperPack的负载是最小的:

YAML和BSON非常冗长,会增加消息的负载。JSON比YAML要好得多,但是因为它基于文本编码格式,所以它的大小依然会远远超过SuperPack。在gzip压缩之后,它们的值会出现比较大的差异,YAML、JSON和SuperPack的值非常接近,是原始消息的12-14%。

采用SuperPack编码格式的一个主要优势在于,与客户端通信的时候不需要预先交换消息的模式。数据类型的信息会包含在负载之中。SuperPack有36个预先定义的数据类型,包括常见的true、false、uint16、uint32、float32,也包括不那么常见的类型,如 uint6、nint4和array5等,这些类型能够代表消息中很可能出现的值。

SuperPack还包含了针对数组、字符串以及map的类型。其中还有个类型是 extension,它能够让用户添加新的类型。SuperPack还有两个可选的优化选项,能够减少特定场景下的负载:重复字符串优化(repeated string optimization)以及重复keyset优化(repeated keyset optimization)。

我们采访到了Michael Ficarra,他是一名研究工程师和自由/开源软件协调人员(FOSS Coordinator),了解到了SuperPack的更多细节。

InfoQ:在编码后,你们的负载会更小,相对于其他的无模式格式,你们的做法有何不同呢?

MF: SuperPack有其背后的哲学,那就是即便我们不能预先推测出数据的模式,但数据中的结构或值很可能会重复出现很多次。举个例子,假设有个名为“cats”的数据结构,它将每个人与他的猫关联在了一起。我们不是直接进行编码,考虑到每只猫都有名称、生日以及喜欢的食物,我们只对其编码一次,稍后会对其进行引用,对这些值采用了非常高效的protobuff风格的打包方式。

另外,有些值比其他的值更为通用,应该有更为高效的表述形式。如果你看一下格式的详细描述的话,你会发现所有的值都由一个单字节的指示符打头,它用来表明值的类型,我们将其称之为“类型标签(type tag)”。在类型标签域中,我们预留了一部分区域范围,这样的话,值的全部或部分内容就可以在标签本身中进行编码。举个简单的例子,有两个boolean类型标签:一个用于值true,另一个用于值false。类似的,还有64个“uint6”类型标签,允许我们使用一个字节就能表示0到63之间的每个数字,另外,对于条目长度小于32的数组(必须要同时对它的长度和条目进行编码),可以将它的长度编码到标签中。回到前面的例子中,猫的胡须通常不会多于64根并且大多数人所养的猫不会超过32只,因此这些值能够非常高效地进行存储。

InfoQ:你们将SuperPack与模式驱动的二进制格式进行过对比吗,比如Protocol Buffers?Protobuf的负载会明显更小吗?

MF:我们没有进行过这种类型的对比。我认为,在大多数场景下,Protobuf的负载会更小,除非SuperPack的字符串去重功能能够特别有效。当你的需求允许你使用模式驱动格式的话,尤其是能够与某种无损数据压缩算法(如LZW或Deflate)结合使用时,那么你就应该采用这种方案。

InfoQ:在消息的编码/解码上所消耗的时间是怎样的?

MF:根据编码器是否启用可选的keyset和字符串去重优化功能,编码时间会有所差异。在实现语言层面,也会有一些遗留的性能难题,比如JavaScript针对所有的数字都使用了IEEE 754的双精度形式。

InfoQ:你们有支持其他语言的计划吗?

MF:当然!我们已经有了一个Java实现,目前,这个实现我们在Shape Security内部使用。它还没有为开源做好准备,但是如果我们听到有这种需求的话,就会加快这一进程。如果社区希望为另外的生态系统启动新实现的话,我也是非常乐意提供帮助的。我觉得Rust实现将是非常令人兴奋的!

另外,值得一提的是,SuperPack依然非常年轻,如果读者对于它的提升有什么建议的话,我们非常乐意倾听,只需在规范的issue tracker上开启一个issue即可。我们希望将来版本的SuperPack会更棒!

目前,SuperPack自带了一个JavaScript转码器,但是其他的转码器可以基于它来进行开发。SuperPack是开源的,并且采用了非常宽容的许可证协议。

文章转载自 开源中国社区[http://www.oschina.net]

时间: 2024-09-29 16:57:04

SuperPack——实现更小负载的新序列化格式的相关文章

ICTroom公司推出更小的数据中心模块

日前,荷兰模块化数据中心专家ICTroom公司已扩大其产品范围,其中包括可支持只有8个机架IT设备,电力容量为50千瓦的小型机箱. 该公司表示,新的模块是针对那些不需要一个充满服务器.电力和冷却设备的集装箱的客户推出的,例如电信公司或内容分发网络(CDN). 这一举措符合较小的"边缘"数据中心的总体趋势,可以提供更好的延迟和带宽的在线服务,并靠近最终用户. 集成的模块化数据中心-数据层 建筑更小的模块化数据中心 与竞争对手不同,ICTroom公司从未在集装箱中部署设备.与之相反,该公司

BBS老了,但还没死 更小更细分消费粘性用户

中介交易 SEO诊断 淘宝客 云主机 技术大厅 原文发表于<财经天下>周刊3月25日刊,原作者投稿,虎嗅节选: 负增长 2012年11月底,网易社区突然发布了一则公告: "亲爱的朋友们:网易社区老了,是时候和大家说再见了!因业务调整,网易社区将于2012年12月18日零时停止服务." 存在了近16年的网易社区全面关停,让一些人确信:在微博.微信等新兴社交媒体冲击下,社区论坛这种最早的社交工具,已经被日益边缘化. 1999年推出的天涯社区,已经存在了14个年头,作为国内最成熟

新型全息存储技术亮相 体积更小存储容量更大

最近来自美国加州大学河滨伯恩斯工程学院和俄罗斯科学院研究人员演示了一种新型的全息存储器,结合了磁性数据存储和波基础的信息传输两者的优点,能为电子设备带来前所未有的数据存储和处理能力.全息技术是一种涉及面非常广泛的http://www.aliyun.com/zixun/aggregation/18665.html">应用领域,是利用干涉和衍射原理记录并再现物体真实的三维图像的记录和再现的技术. 它能为电子设备带来前所未有的数据存储和处理能力. 而本次研究的新型存储器利用的是自旋波而不是光束.

马云相信,应该拆得更小一点

阿里巴巴之前的拆分所取得的成绩,使得马云相信,应该拆得更小一点. 把变化作为企业文化的阿里巴巴[微博]的员工需要再一次"拥抱变化"了.而且,这一次变化很大. 1月10日,阿里巴巴集团董事局主席兼CEO马云[微博]宣布将整个阿里巴巴集团分为25个事业部.25个事业部的日常业务发展,将由这25个事业部的总裁(总经理)直接决策管理.在集团层面,阿里将设立战略决策委员会和战略管理执行委员会,前者由董事局负责,后者多由原阿里巴巴旗下子公司和事业群的总裁们构成. 1月15日,另一则重大信息公布,这

Vb.net2008做成的软件编译完才不到1M.运行支持软件却需要220M!!不可思议!做的安装软件,需要220M左右的软件支持,太庞大了,有没有更简单更小的软件支持就可以了?

问题描述 Vb.net2008写的程序做成安装软件,在其他纯净的系统中就需要220M左右的软件支持,太庞大了,有没有更简单更小的软件支持就可以运行软件了?象.Net2005需要FrameWork2.0只有20多M,还能够接受!现在是越做越庞大了! 解决方案 解决方案二:buhuiba你从网上下载一个,netframwork就可以运行了啊解决方案三:vs.net2008会自动生成的.生成的文件在Debug文件下221M.编译设置上我只选择了包含Framework3.5.装完后看控制面板里有Fram

[译] 如何在无损的情况下让图片变的更小

本文讲的是[译] 如何在无损的情况下让图片变的更小, 原文地址:Making Photos Smaller Without Quality Loss 原文作者:Stephen Arthur 译文出自:掘金翻译计划 译者:Xat_MassacrE 校对者:meifans,windmxf 如何在无损的情况下让图片变的更小 Yelp(美国最大点评网站)已经有超过 1 亿张用户上传的照片了,其中不但有晚餐.理发等活动的照片还有我们的新特性照片 -- #yelfies(一种在拍摄时,加上自拍头像的一种新的

泰丰葛涵思:PE行业会变得更小更低调

不可否认,私募股权投资(PE)行业在今天遭遇了巨大的挑战.一些专家预计新的黄金时代即将到来,而另一些则在为私募基金撰写"讣告".实际情况是,这个行业的某些方面已发生变化,需要重新修复.但是,私募股权投资基金在整体经济和客户的投资组合中依然发挥着重要的作用. 目前围绕着杠杆收购的失败有许多讨论,实际上是在探讨私募股权投资模式是否注定会失败.有些人认为信贷市场的紧缩和杠杆资金的匮乏会导致私募股权投资行业的终结.这些观察家指出,这个行业的萎缩预示着私募股权作为一种所有权形式的衰退. 但我认为

当超薄OPPOR5遇到更小更智能的VOOC闪充

2012年6月, OPPO Finder以当时最薄的6.65mm的机身厚度深受用户亲睐.2014年10月,OPPO发布薄至4.85mm的R5,又一次引领手机行业的超薄设计风潮.图1至美超薄机身设计,很容易在视觉上就赢得用户的喜爱.不过要满足用户的需求,手机在做薄的同时,还要同时兼顾手感.机身强度.硬件配置和充电续航等诸多方面.特别是手机充电续航,因为超薄机身的设计压缩了电池体积,在手机电池技术没有大的突破面前,超薄手机的充电续航会受到影响,解决超薄手机的充电续航变得尤为重要.不过这对目前最薄的O

如何优化Flash动画,使文件更小,播放更流畅?

flash动画|优化 Flash作为Macromedia公司出品的网页制作与动画创作的专业软件,操作简便,功能强大,现已成为交互式矢量图形和Web动画事实上的标准. 但是,如果制作的Flash电影文件较大,动辄几百k的话,常常会让网上浏览者在不断等待中失去耐心.对Flash电影进行优化就显得很有必要了,但前提是我们不能有损电影的播放质量. 1.多使用符号(Symbol).如果电影中的元素有使用一次以上者,则应考虑将其转换为符号.重复使用符号并不会使电影文件明显增大,因为电影文件只需储存一次符号的