2013-02-27 30 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)。

相关问题