4

我有一些 Moose 对象和一些其他简单的哈希对象(哈希、数组)我想序列化。

一开始我用了一个简单的

my $obj_store_file = nstore($obj);

my $obj = retrieve($obj_store_file);

这运作良好。

后来,我发现了关于MooseX::StorageKiokuDB。我尝试使用它们来享受它们所拥有的一些好处,但是:

  • MooseX::Storage似乎重新创建了多次引用的对象。例如,我的一个序列化对象包含一些属性,它们中的每一个都引用另一个对象的相同实例。在序列化之前,所有这些引用显然是相同的——它们都指向同一个对象。在使用 序列化/反序列化之后MooseX::Storage,这个曾经的单个对象被复制,并且每个引用都指向该对象的另一个实例。有人告诉我这MooseX::Storage不适合表示对象图,我可能想尝试一下KiokuDB
  • 我做到了,尽管我觉得KiokuDB这对我的需求来说有点过头了。我不需要数据库可以提供的所有花哨的东西。不幸的是,由于我的一个对象非常大并且在使用默认值进行序列化时会占用内存,看来我必须编写一个自定义序列化程序或单独存储它的“数据”部分,然后再编写一个服装KiokuX::Module......再次,相当过分。

所以,我回到了普通的 Storable 或 YAML。我的问题很简单:是的,有一些好处KiokuDB(尤其是它维护一个对象图的事实),也许还有MooseX::Storage(尽管我真的找不到后者)。但是,鉴于这些好处对我来说并没有真正用处,有什么理由使用 Storable 或 YAML 吗?

换句话说,以这种方式存储(Moose)对象有什么问题吗?是“非法的”吗?

4

1 回答 1

1

我的经验是,这取决于您为什么要序列化数据。我喜欢 Storable 用于程序状态,包括窗口大小/位置等。我更喜欢 YAML 用于配置数据或您可能想要与应用程序的另一个副本交换的任何内容。(即在用户之间共享——使用不同版本的 Perl 或 Storable 的用户可能无法读取 Storable 文件。) Storable 支持对象图(假设冻结/解冻正确完成)。我不确定 YAML。

于 2010-10-27T13:30:03.963 回答