0

データベース サーバー (MySQL) があります。

これは製品のテーブルを保持します。製品テーブルのフィールドの 1 つは、残りの数量です。

注文時に残りの数量を照会するクライアントはほとんどありません (約 10)。注文が完了すると、残りの数量は注文に基づいて減少します。

数量が少ない場合に問題に直面します。たとえば、残りの数量が「10」で、client1 が 8 数量の注文を作成しており (注文はまだ行われていませんが、処理中です)、client2 が 5 数量の注文を出した場合、後者で注文したクライアントは失敗します。

あるクライアントが注文処理中の場合、他のクライアントには (残りの数量 - クライアント 1 の注文数量) のみが表示されるようにシステムを改善したいと考えています。当初は注文表に入力された時点で残数を変更しようと考えていたのですが、これでは注文がキャンセルされたり、注文をしているパソコンの電源が落ちたりクラッシュしたりした場合に問題が発生します。

このケースを効果的に処理するための適切なアルゴリズムを提案してください..注文が進行中のときはいつでも、他のすべてのクライアントには (残りの数量 - 進行中の注文の数量) のみが表示されます。

4

1 に答える 1

1

あなたの質問に1つの答えがあるかもしれません:

other clients should see only the (remaining quantity - order in progress quantity).

したがって、問題は「進行中の注文」に関するデータを保存することです

一部の人々は、注文に「確認済み」属性を追加します。これは、正しい情報を維持するために true/false に設定できます。または、進行中の注文を記録する別の構造を持ち、確認後に永続的な注文テーブルに移動することもできます。いずれにせよ、あなたが言ったように、利用可能な在庫は(在庫-進行中の注文数量)であり、クエリはそれを提供します。

次に、キャンセルについて何をすべきかを知る必要があります。キャンセルが明示的である場合 (ユーザーがバスケットを変更した場合) は簡単です。注文を削除します。唯一の厄介なケースは、注文が完了していない場合です。「注文中」が「進行中」でなくなったのはいつですか? 注文が処理中である時間を設定して、ユーザーに「あなたの注文は 24 時間バスケットに残ります。その後、在庫の他の顧客に優先権が与えられます」などのように伝えることができます。

システムはクリーンアップ プロセスを使用して、現在の日付/時刻を「進行中の注文」が作成された時刻と比較し、注文が古すぎる場合はキャンセルされます。または、少なくともクライアントが更新するまで保留されます。

于 2013-04-25T09:12:51.997 に答える