4
我有幾個駝鹿對象和一些其他簡單的哈希對象(散列,數組)我想序列化。是否有我不應該使用Storable或YAML序列化我的(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)對象有什麼問題嗎?這是'非法'嗎?
我存儲的對象僅供我以後使用。我不想每次重新創建它們(其中一些需要進行大量的預處理)。我喜歡YAML的是能夠查看存儲文件本身。很高興看到那裏發生了什麼。看起來YAML也支持對象圖 - 它使用內部指針,但困擾我的是爲什麼它不會自動加載所需的類。 – 2010-10-27 13:49:44