2010-10-03 2 views
3

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

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

+0

Я, наконец, использовал 'nstore_fd' с файловым дескриптором, открытым слоем ввода-вывода gzip. –

ответ

5

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

.
+0

Документ действительно минимальный. Как я могу объединить его, например. GZIP? –

+2

@David: Я использовал MX: S сам в очень поверхностных случаях, но если вы прыгаете на perl.irc.org #moose, почти всегда есть кто-то, кто может помочь вам. – Ether

4

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

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

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

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

+1

Это связано с 'FastRanges', описанным здесь http://stackoverflow.com/questions/3790166 (см. Последнее обновление в исходном сообщении). Размер необходим для получения необходимой производительности. Он еще быстрее загружает, чтобы воссоздать объект. –

Смежные вопросы