次の方法で共有


シリアル化可能性

理想的には、トランザクションはシリアル化可能である必要があります。 トランザクションを同時に実行した結果が、連続して実行された結果と同じ場合、つまり 1 つずつ実行した結果と同じ場合、トランザクションは、シリアル化可能であると言われます。 どのトランザクションが最初に実行されるかは重要ではなく、トランザクションの混在が結果に反映されないことだけが重要です。

たとえば、トランザクション A がデータ値に 2 を乗算し、トランザクション B がデータ値に 1 を加算するとします。 ここで、0 と 10 の 2 つのデータ値があるとします。 これらのトランザクションが 1 つずつ実行される場合、トランザクション A が最初に実行される場合は新しい値は 1 と 21 になり、トランザクション B が最初に実行される場合は 2 と 22 になります。 しかし、2 つのトランザクションの実行順序が値ごとに異なる場合はどうでしょうか? トランザクション A が最初の値で最初に実行され、トランザクション B が 2 番目の値で最初に実行される場合、新しい値は 1 と 22 になります。 この順序を逆にすると、新しい値は 2 と 21 になります。 1、21 と 2、22 のみが可能な結果である場合、トランザクションはシリアル化できます。 1、21 または 2、22 が可能な結果である場合、トランザクションはシリアル化できません。

では、なぜシリアル化可能性が望ましいのでしょうか? つまり、次のトランザクションが開始される前に 1 つのトランザクションが完了しているように見えることがなぜ重要なのでしょうか? 次の問題を考えてみましょう。 営業担当者が注文を入力すると同時に、事務員が請求書を送信しています。 営業担当者は X 社の注文を入力しましたが、まだ確定していないとします。営業担当者はまだ X 社の担当者と話しています。事務員は、すべての未決済注文のリストを入手し、X 社の注文を見つけて請求書を送信します。 ここで、X 社の担当者は注文を変更することを決定したので、営業担当者はトランザクションを確定する前に変更します。 X 社は誤った請求書を受け取ります。

営業担当者と事務員のトランザクションがシリアル化可能な場合、この問題は発生しなかったでしょう。 営業担当者のトランザクションが、事務員のトランザクションが開始される前に完了した場合、事務員は正しい請求書を送信したと考えられます。営業担当者のトランザクションが開始される前に事務員のトランザクションが完了した場合、事務員は X 社に請求書を送信することはなかったでしょう。