У меня есть несколько объектов 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
... снова, довольно излишняя.
Итак, я вернулся к обычному хранилищу или YAML. Мой вопрос прост: да, есть некоторые преимущества для KiokuDB
(особенно тот факт, что он поддерживает граф объектов) и, возможно, также для MooseX::Storage
(хотя я не смог найти ничего для последнего). Но, учитывая, что эти преимущества на самом деле мне не нужны, есть ли причина не использовать Storable или YAML?
Другими словами, есть ли что-то неправильное в хранении объекта (Moose) таким образом? Это «незаконно»?