• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ECサイトの購入後の在庫処理)

ECサイトの購入後の在庫処理

このQ&Aのポイント
  • ECサイトでの購入後の在庫処理について
  • 在庫が少なくなると他の人が商品をカゴに入れられないようにする方法
  • 在庫の管理方法と早い者勝ちシステムの難しさ

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

MYSQLを使ってないので、見当違いのコメントかもしれませんが 普通、DBの処理では、 そういう場合ロックをかけます。 ロックには、レコードロックやテーブルロックやDBロックなどがあり 読み出しは許すが書き込みは禁止するとかのロックもあります。 在庫の数の場合、そのレコードの読み出し書き込みを処理終了までロックする必要があります。 処理終了後COMMITを発行し、ロックを解除します。 ロックされたレコードを参照しようとするクライアントは、その間またされることになります。 MySQLでのロックについて調べてみて下さい。

RSTREET
質問者

お礼

ありがとうございます。ロックの件に関しては調査しておりました。 ECサイトでの商品在庫の読み出し・書き込みですので不特定多数の方からのアクセスがあります。 カゴに入れた人順で在庫を割り振る必要があり、カゴに入れても購入が決定しない限り、在庫は減らせない、しかし、カゴに入れている時点で、早いもの順で在庫の割り振りをしておかなければならない。 というような感じのプログラムというかシステムを準備しなければいけないかと思っています。 DBのロックをうまく応用できるでしょうか??

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

カゴの中に入れてる状態では、 仮の在庫というかDBを更新する訳には、 いかないので単にページで保持している数にしないと しょうがないと思います。 しかし、 在庫のレコードを更新ロックをかけておけば 少なくとも「在庫のない商品を購入できる」ということはないと思います。 購入ページで、実際に購入する段階で 実は既に在庫がなくなってしまって購入できない。 旨を表示するればよいと思います。 実際、早い者勝ちというか、 カゴに入れたモノ勝ちというのはおかしくて 購入を決定したモノ勝ちの方が動作としては 良いのではないかと思います。

RSTREET
質問者

お礼

たびたびありがとうございます!親身にお教えいただき助かります。 おっしるとおりですね。 カゴに入れたもの順ではなく、購入を決定したモノ勝ちが動作としては正しいです。 ・購入決定時に在庫の再チェックをする。 ・その際、在庫がなくなっていた場合は在庫がない旨を表示する。 を実践してみようと重います。 現在はカゴに入れる前で在庫の有無を判断してしまっているので、在庫数をオーバーしてしまいます。 購入を最終決定する前に、在庫の確認をするようしてみようとおもいます。

関連するQ&A