我应该如何使用Perl存储和压缩Moose对象?

时间:2010-10-03 18:50:51

标签: perl compression store moose

我使用Moose创建了一个包,我想nstore一些大型实例。生成的二进制文件非常大(500 + MB),所以我想压缩它们。

这样做的最佳方式是什么? 我应该使用bzip等打开文件句柄,然后使用fd_nstore存储?

3 个答案:

答案 0 :(得分:5)

使用MooseX::Storage,大部分内容已经为您完成 - 您只需指定序列化和I / O格式。

答案 1 :(得分:4)

虽然压缩肯定是一个可行的选择,但您可能还需要考虑简单地序列化。

您的对象是否包含大量可以从其他数据中轻松重建的数据?例如,如果你有从其他属性延迟构建的属性(例如使用Moose的lazy + builderlazy_build),那么存储这些属性的值没有多大意义除非重新计算是非常昂贵的。即使这样,也许值得考虑,因为从磁盘上读取大量数据也不是最快的事情。

如果您发现只想序列化部分对象,并且仍想使用Storable,则可以定义自定义STORABLE_freezeSTORABLE_thaw挂钩,如可存储文档中所述。

但是,还有其他可用的序列化器。 MooseX :: Storage就是其中之一,并且恰好支持许多序列化后端和格式,并且还可以轻松告知要序列化哪些属性以及为此目的跳过哪些属性。

答案 2 :(得分:2)

看看Data::Serializer。它可选择使用zlib(通过Compress::Zlib)或PPMd(通过Compress::PPMd)来压缩序列化数据。