我需要序列化一长串相对扁平的结构(它可以是递归的,但大部分时间都不是) - 它只是一个Map
,其中包含数字,文本,字节串,bool的和类型, utctime(以及一些集合和列表)作为值。关键是大部分时间我只是序列化数据而几乎从不读取它所以我需要尽可能快地进行序列化。
最初我使用了safecopy
,然后我切换到了binary
(Generic
个实例),最后我尝试了aeson
(0.10.0.0 HEAD - 0.10显着更快的编码,HEAD具有UTCTime
的固定实例。 aeson
序列化优于二进制和safecopy
(基于cereal
)2倍,同时提供更短的输出。
我不想将它编码为JSON,因为默认情况下我的JSON编码是有损的,所以我必须编写第二个编码器和解析器来处理和类型,但它可能是可行的 - 也许我甚至可以使用来自aeson
包的通用实例。但我仍然想知道 - 是否有任何序列化方法可以提供更短的输出(输出发送到DB,更短的输出 - 更好),同时比aeson更快?我还没有尝试过msgpack
,但它基于binary
,所以我对此并不太信任。
更新:暂时,我最终使用aeson
。令人惊讶的是,它比BufferBuilder
(仍然比binary
更快)。我不能使用通用实例,因为我不想为ToJSON
定义ByteString
- 所以我结束了手工编写整个实例。在我看来,与msgpack
构建在同一基础上的aeson
之类的东西将是序列化数据的好方法。