ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

加工したデータを元に戻すのは、バックアップから復元するのが手早い

現在作成しているプログラムで、
・条件に従ってデータを加工
・加工したデータから、新たな条件となる情報を取得
・加工したデータを、仮のデータとして登録していいのか判定

・条件に従って次のデータを加工
・加工した次のデータから、新たな条件となる情報を取得
・加工した次のデータを、仮のデータとして登録していいのか判定
というように、処理を繰り返すロジックを作成しています。

「仮のデータとして登録していいのか判定」を行って、「登録してよければ」データを登録します。
ここまでは簡単で、よくある話です。

問題は、「登録してよくなければ」関連するデータを含めて一定の時点までデータを元に戻さなければななりません。
元に戻すとなれば、

  • 仮データを確定データを用意して、必要に応じて仮データの参照/更新を行い、確定データの参照を行うようにプログラミングする。確定できて初めて、仮データを確定データに反映する。
  • 確定データと確定コピーデータを用意して、確定データの参照/更新を行い、データを戻さなければならなくなったら、更新した確定データを、確定コピーデータからコピーして元に戻す。

など、どうすればいいのかと考えていました。

プログラミング
unsplash-logoAnnie Spratt

下手にロジックを考えるより、丸ごと戻した方が手早い

処理のロジックを考えつつ、「登録してよくなければ」が発生した場合、どういう方法を選んでも、結構大変だなと思っていました。
そんな中、こちらの記事に書いたように、思いつきを得られました。
ajya.hatenablog.jp

どんな思いつきかというと、データを丸ごとバックアップしておいて、確定データを戻さなければならなくなったら、バックアップから確定データに戻してしまうというものです。
データベースのトランザクション処理で、コミットすればすべてのデータベースに対する挿入/更新/削除が保存されますが、ロールバックすれば全てなかった状態になります。
ja.wikipedia.org
同じように処理すれば、「登録してよくなければ」が発生した場合は、バックアップから確定データに丸ごとコピーして、元の状態を復元できます。

この思いつきがあったおかげで、ロジックを作成する手間が随分減らせました。
最初から思いつければよかったのでしょうが、いろいろ考えたおかげでやっと思いつけたのだと思います。
次に似たような状況になったときは、最初から思いつけるようになるでしょう。