シリアル化可能性

トランザクションは シリアル化可能であることが理想的です。 トランザクションを同時に実行した結果が逐次的に実行された結果と同じである場合、トランザクションはシリアル化可能と見なされます。 最初にトランザクションを実行することは重要ではなく、結果にトランザクションの混合が反映されないようにします。

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

シリアル化が望ましいのはなぜですか。 つまり、次のトランザクションが開始される前に1つのトランザクションが終了するということが重要なのはなぜですか。 次の問題を考慮してください。 セールスマンは、事務員が請求書を送信しているときと同時に注文を入力しています。 セールスマンが会社の X から注文を入力しても、コミットされないとします。セールスマンは依然として、会社 X の代表者と話し合っています。Clerk は、開いているすべての注文の一覧を要求し、会社 X の注文を検出して請求書を送信します。 ここで、会社 X の代表者が注文を変更することを決定したので、セールスマンはトランザクションをコミットする前に変更します。 会社 X は、正しくない請求書を取得します。

セールスマンのトランザクションと clerk のトランザクションがシリアル化可能な場合、この問題は発生しません。 Clerk のトランザクションが開始される前に、セールスマンのトランザクションが完了しています。この場合、clerk は正しい請求書を送信し、セールスマンのトランザクションが開始される前に clerk のトランザクションが終了したことになります。この場合、clerk は会社 X に請求書を送信しませんでした。