我使用Moose创建了一个包,我想nstore
一些大型实例。生成的二进制文件非常大(500 + MB),所以我想压缩它们。
这样做的最佳方式是什么?
我应该使用bzip
等打开文件句柄,然后使用fd_nstore
存储?
答案 0 :(得分:5)
使用MooseX::Storage,大部分内容已经为您完成 - 您只需指定序列化和I / O格式。
答案 1 :(得分:4)
虽然压缩肯定是一个可行的选择,但您可能还需要考虑简单地序列化。
您的对象是否包含大量可以从其他数据中轻松重建的数据?例如,如果你有从其他属性延迟构建的属性(例如使用Moose的lazy
+ builder
或lazy_build
),那么存储这些属性的值没有多大意义除非重新计算是非常昂贵的。即使这样,也许值得考虑,因为从磁盘上读取大量数据也不是最快的事情。
如果您发现只想序列化部分对象,并且仍想使用Storable,则可以定义自定义STORABLE_freeze
和STORABLE_thaw
挂钩,如可存储文档中所述。
但是,还有其他可用的序列化器。 MooseX :: Storage就是其中之一,并且恰好支持许多序列化后端和格式,并且还可以轻松告知要序列化哪些属性以及为此目的跳过哪些属性。
答案 2 :(得分:2)
看看Data::Serializer。它可选择使用zlib(通过Compress::Zlib)或PPMd(通过Compress::PPMd)来压缩序列化数据。