2010-10-27 38 views
4

我有幾個駝鹿對象和一些其他簡單的哈希對象(散列,數組)我想序列化。是否有我不應該使用Storable或YAML序列化我的(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 ...,這相當麻煩。

所以,我回到了普通的可儲存或YAML。我的問題很簡單:是的,KiokuDB(尤其是它維護一個對象圖的事實)可能還有一些好處,也可能是MooseX::Storage(儘管我無法爲後者找到任何好處)。但是,鑑於這些好處對我來說並不真的有用,是否有任何理由而不是使用Storable或YAML?

換句話說,以這種方式存儲(Moose)對象有什麼問題嗎?這是'非法'嗎?

回答

1

我的經驗是,這取決於你爲什麼序列化數據。我喜歡Storable的程序狀態,包括窗口大小/位置等。我更喜歡YAML的配置數據或任何您可能想與另一個應用程序副本交換的內容。 (即用戶之間的共享 - 可用的文件可能不會被具有不同版本的Perl或可存儲的用戶可讀)。可存儲的支持對象圖(假定凍結/解凍正確完成)。我不確定YAML。

+0

我存儲的對象僅供我以後使用。我不想每次重新創建它們(其中一些需要進行大量的預處理)。我喜歡YAML的是能夠查看存儲文件本身。很高興看到那裏發生了什麼。看起來YAML也支持對象圖 - 它使用內部指針,但困擾我的是爲什麼它不會自動加載所需的類。 – 2010-10-27 13:49:44

相關問題