トランザクションをサポートする php を使用してファイルシステム操作を実装する方法を探しています。トランザクション内で移動、コピー、削除などの操作を実行している場合と同様に、そのうちの 1 つが失敗した場合、スクリプトは既に実行されたすべての操作を元に戻す必要があります。私はちょっと無知で、それを達成する方法についてのガイダンスを求めています。また、利用可能なライブラリまたはソリューションが存在する場合は? 質問が曖昧に聞こえる場合は申し訳ありません。
3 に答える
これの最も一般的なパターンは、すべてを別の場所にコピーし、コピーを操作して、すべてがうまくいけばオリジナルを置き換えることです。
PHPストリームラッパーがこれにも役立つ可能性があることを教えてくれます。「file://」プロトコルをオーバーライドして、仮想ファイルシステムで操作することが可能です (概念実証: https://github.com/Respect/Test#streamwrapper )。
1 つのオプションは、ファイルをファイルとしてではなく BLOB としてデータベースに格納することを検討することです。これらは、トランザクション、およびデータベースの他のすべての機能をサポートします。
ZFSのような高度なファイルシステムでトランザクションをサポートすることは可能ですが、PHP で直接サポートすることはできません。ZFS はデフォルトでは Linux にインストールされません。
データベース管理システムとは対照的に、ファイルシステムはトランザクションをサポートしていません。ただし、トランザクションを実装するために必要なものを提供するものもあります。つまり、ロックとロギングです。ログはphpでもできるので問題ありませんが、ファイルロックを提供するファイルシステムが必要です。
このようなものを自分で実装しないことをお勧めします。多くの問題が発生する可能性があります。データベース担当者は、ここで数十年にわたる研究の歴史を振り返ります。
ただし、必要に応じて、(最初に) 2 フェーズ ロックのようなものを php.ini に実装できます。また、ロールバックの取り消し機能に役立つコマンド patternの使用を検討することもできます。