0

私は単純な電子商取引サイトに取り組んでいます。ユーザーが購入すると、いくつかの同期的なカスケード イベントがトリガーされます。一部のデータがデータベースに書き込まれ、クレジット カード ベンダーによって購入が OK (または拒否) され、さらにいくつかのデータがデータベースに書き込まれ、電子メールが送信されます。

Step 1. Initial Purchase info recorded on local database
Step 2. Purchase API called on Credit Card vendor
Step 3. Details of transaction written to local database
Step 4. Email receipt/alert sent

これらのステップのいずれかが失敗した場合に対処する実証済みの方法論はありますか? たとえば、既にデータベースに書き込みを行っているにもかかわらず、クレジット カード トランザクションが失敗したとします。または、ステップ 1 と 2 は完了しましたが、ステップ 3 が失敗します。私は基本を理解しようとしています-「購入前の」データのスナップショットを作成し、何かが失敗した場合はすべてをロールバックするか、「偽の購入」オブジェクトを作成してすべてがうまくいくと仮定する方が賢明ですか?それを実際のデータベースにコピーします。

どんな提案でも大歓迎です。私はこれで私のリーグから抜け出しています。

乾杯!

4

1 に答える 1

0

挿入時にデータベース情報がアトミックに正しいことをお勧めします。これは、適切な正規化によってかなり直接的に行われます。

たとえば、顧客が住所を入力すると、それがデータベースに保存されます。顧客が注文に失敗した場合でも、住所は有効です。

同様に、顧客が注文した場合 (クレジット カード取引が失敗した場合でも有効です)、これは別の場所で別の事実になります。(この事実は、出荷ステップが許可されたと言う前にチェックされます)

電子メールのステップでは、利用可能な事実に応じてメッセージが変更される可能性がありますが、たとえば電子メール サーバーがダウンしている場合は、購入をロールバックしたくないでしょう。

したがって、私の提案: 適切に正規化し、発生したすべての情報を保持し、プロセスの重要なステップで適切に確認してください。- ロールバックしないでください。

于 2013-07-10T13:50:44.573 に答える