2013-02-27 64 views
10

我正在尋找方法來實現文件系統操作使用php與交易支持。就像我正在執行諸如移動,複製和刪除事務內部的操作一樣,如果其中一個操作失敗,腳本需要恢復所有已經執行的操作。我有點無知,正在尋求如何實現的指導。如果可用的庫或解決方案存在?如果問題聽起來含糊不清,我很抱歉。如何在使用php的事務中執行文件系統操作?

+0

也許使用單例設計模式來創建一個對象的實例,該實例創建一個已處理和完成的事件列表以及一個算法,該算法將是每個事件的反轉(例如,切換FROM位置)。如果由於任何原因而失敗,則執行會顛倒所有更改的實例。 – MaxSan 2013-02-27 12:31:15

回答

2

文件系統 - 與數據庫管理系統不同 - 不支持事務處理。但是有些確實提供了實現交易所需的東西;那就是鎖定和記錄。日誌記錄不會是你的問題,因爲你也可以在php中完成,但是你需要一個提供文件鎖定的文件系統。

我建議你不要自己實現這樣的事情 - 你可能遇到很多問題。數據庫人員回顧了幾十年的研究歷史,在這裏。

但是,如果你必須,你可以(開始)在php中實現類似Two-phase locking的東西。另外,您可以考慮使用command pattern,這有助於撤消回滾功能。

3

一種選擇是考慮將文件存儲爲數據庫中的BLOB而不是文件。這些將支持事務以及數據庫的所有其他功能。

可以支持高級文件系統(如ZFS)上的事務,但不直接使用PHP,並且在Linux上默認情況下不安裝ZFS。

3

最常見的模式是將所有內容複製到其他地方,在副本上進行操作並在所有內容都正確的情況下替換原件。

東西告訴我,PHP流包裝也可以用於此。可以覆蓋'file://'協議並在虛擬文件系統中運行(概念驗證:https://github.com/Respect/Test#streamwrapper)。

相關問題