У меня есть несколько объектов Moose и некоторые другие простые хеш-объекты (хэши, массивы), которые я хотел бы сериализовать.
Сначала я использовал простой
my $obj_store_file = nstore($obj);
и
my $obj = retrieve($obj_store_file);
Это сработало хорошо.
Позже я нашел около MooseX::Storage
и KiokuDB
. Я пытался использовать их, чтобы получить некоторые преимущества, которые они имеют, но:
MooseX::Storage
, казалось, воссоздает объекты, на которые ссылаются несколько раз. Например, один из моих сериализованных объектов содержит несколько атрибутов, каждый из которых относится к одному и тому же экземпляру другого объекта. До сериализации все эти ссылки, очевидно, одинаковы - все они указывают на один и тот же объект. После сериализации / десериализации с использованием MooseX::Storage
этот один объект дублируется, и каждая ссылка указывает на другой экземпляр объекта. Мне сказали, что MooseX::Storage
не подходит для представления графов объектов и что я могу попробовать KiokuDB
.
- Я так и сделал, хотя я чувствовал, что
KiokuDB
- это излишество для моих нужд. Мне не нужны все модные вещи, которые БД может предложить. К сожалению, поскольку один из моих объектов действительно большой и заполняет память при сериализации с использованием значений по умолчанию, мне кажется, что мне нужно написать собственный сериализатор или сохранить его часть данных отдельно, а затем написать костюм KiokuX::Module
... излишество.
Итак, я вернулся к обычному Storable или YAML. Мой вопрос прост: да, есть некоторые преимущества для KiokuDB
(особенно тот факт, что он поддерживает граф объектов) и, возможно, также для MooseX::Storage
(хотя я не мог найти что-либо для последнего). Но, учитывая, что эти преимущества на самом деле мне не нужны, есть ли причина не использовать Storable или YAML?
Другими словами, что-то не так с хранением (Moose) объекта таким образом? Это «незаконно»?