1
我測試了ZODB通過創建一個巨大的對象,提交,然後它給了一個警告。 接下來,我開始從根目錄中刪除對象,提交。 .fs文件在空間上仍然是1GB。然後我殺死了REPL。我重新打開python,建立了連接,但現在我似乎無法擺脫這個1 GB文件(除了試圖從磁盤本身刪除它)。ZODB不釋放硬盤空間
代碼是這樣的:
storage = FileStorage('Data.fs')
db = DB(storage)
connection = db.open()
root = connection.root()
通過創建一些巨大的物體其次,起初我確實是
root['bigObj'] = 'small_str',
transaction.commit()
,試圖覆蓋。之後我剛剛刪除了鍵/值。
我缺少什麼部分?
順便說一句,我保持一個列表,我分享的線程。這對ZODB來說非常簡單,但是這個列表變化很大。考慮到這種只能追加的情況,你是否可以提供一些建議(可能這不是一個好主意)? – PascalVKooten 2015-04-01 21:49:06
ZODB不應該成爲大多數用例的問題 - 如果您正在使用本機ZODB列表,那麼它應該在每次更新時只寫入數據庫的增量(儘管我需要確認這一點)。請參閱http://zodborg.readthedocs.org/en/latest/documentation/guide/modules.html#persistent-list-persistentlist - 使用PersistentList而不是[]。這就是ZODB的工作原理 - 你無法改變野獸的本質。如果你需要處理大的,可變的blob,我建議你考慮替代數據庫。這裏有一種在PostgreSQL上類似ZODB行爲的方法https://github.com/Shoobx/pjpersist – 2015-04-01 22:33:44
@PascalvKooten:有一些ZODB後端可以配置爲丟棄歷史版本; 'RelStorage'可以做到這一點。然而,默認的'FileStorage'後端不能。 – 2015-04-02 09:30:28