Как мне хранить и сжимать объект Moose, используя Perl? - PullRequest
3 голосов
/ 03 октября 2010

Я создал пакет, используя Moose, и я хотел бы nstore некоторых крупных экземпляров.Получающиеся двоичные файлы очень большие (500 + МБ), поэтому я хотел бы сжать их.

Каков наилучший способ сделать это?Должен ли я открыть дескриптор файла с помощью bzip и т. Д., А затем сохранить с помощью fd_nstore?

Ответы [ 3 ]

5 голосов
/ 03 октября 2010

С MooseX :: Storage , большая часть этого уже сделана для вас - вам просто нужно указать сериализацию и форматы ввода / вывода.

4 голосов
/ 03 октября 2010

Хотя сжатие, безусловно, является жизнеспособным вариантом, вам также может потребоваться просто сериализовать меньше.

Может ли быть так, что ваши объекты содержат много данных, которые могут быть легко восстановлены из других данных, которые они также содержат? Например, если у вас есть атрибуты, которые лениво строятся из других атрибутов (например, используя lazy + builder или lazy_build) Moose, нет смысла хранить значения этих атрибутов вообще, если только пересчет не будет невероятно дорого. И даже в этом случае стоит подумать, поскольку считывание большого количества данных с диска тоже не самая быстрая вещь.

Если вы обнаружите, что хотите сериализовать только части своих объектов и все еще хотите использовать Storable, вы можете определить пользовательские STORABLE_freeze и STORABLE_thaw перехватчики, как описано в документации по Storable.

Однако есть и альтернативные сериализаторы. MooseX :: Storage - один из них, и он поддерживает множество бэкэндов и форматов сериализации, а также позволяет легко узнать, какие атрибуты сериализировать и какие пропустить для этой цели.

2 голосов
/ 03 октября 2010

Посмотрите на Data :: Serializer .Опционально используется zlib (через Compress :: Zlib ) или PPMd (через Compress :: PPMd) для сжатия ваших сериализованных данных.

...