2010-03-02 63 views
2

我正在研究一個項目,其中有大量的對象被序列化並使用pickle/cPickle存儲到磁盤。Pickled Object Versioning

隨着項目的進展(在發佈給現場客戶之後),將來的功能/修復很可能會要求我們更改一些持久對象的簽名。這可能是字段的添加,字段的刪除,或者甚至只是改變一個數據上的不變量。

是否有一種標準方法來標記將被醃製爲具有特定版本的對象(如Java中的serialVersionUID)?基本上,如果我恢復Foo版本234的實例,但當前代碼是236,我想在unpickle上收到一些通知。我應該繼續推出自己的解決方案(可能是PITA)。

感謝

回答

3

pickle格式有沒有這樣的條件。爲什麼不只是將對象屬性的「序列版本號」部分與其餘部分一起醃製?然後,通過比較實際版本和期望版本,可以輕而易舉地獲得「通知」 - 不明白爲什麼它應該是PITA。

+0

是的,這是我認爲我們將要採取的方向。 我想我可能高估了添加和檢查這些數據所需的工作量。既然我們在一個地方恢復了我們所有的保存狀態,添加了我們需要的任何邏輯(處理未版本化的對象或之前未版本化的對象,現在應該不會太糟糕)。 雖然我會ping社區,看看pickle是否提供了這種行爲,並且我正在重新發明輪子。 – 2010-03-02 19:57:01

相關問題