我有一个非常普及的产品,只有100个可用,但1000多人同时想要它。所以他们几乎在同一时间选择产品并按下按钮"订单!"。但是,只有100种产品可以卖给人们订购,处理负载的最佳方法是什么?
我正在使用PHP&的MySQL。
我现在正在使用的选项(非常简单的例子,不要介意sql注入等等。真正的SQL是安全的):
<?php
$product_id_selected = $_GET['product_id']; // orderd product
$qty_selected = $_GET['qty']; // qty of orderd product
$max_qty = "Select `max_qty` FROM `Product` WHERE `id_id` = 1";
$bought = "Select count(*) as `count` FROM `Orders` WHERE `product_id` = ".$product_id_selected;
$left = $max_qty - $bought;
if($left >= $qty_selected){
// Full order can be placed
}elseif($left > 0){
$qty_selected = $left; // only the available left are selected
}else{
$qty_selected = 0;
}
if($qty_selected>0){
for($i=0;$i<$qty_selected;$i++){
$insert = "INSERT INTO `Orderds` (`product_id`) VALUES ($product_id_selected)";
}
}
?>
MySQL示例数据库(真实数据库更复杂):
产品:
+-----------------------------------+
| id | product_name | max_qty |
+----+--------------------+---------+
| 1 | Very Populair item | 100 |
+-----------------------------------+
订单:
+-------------------------+
| id | product_id | payed |
+----+------------+-------+
| 1 | 1 | 1 |
+----+------------+-------+
所以我的问题是,有更好更安全的方法吗?也许在MySQL中使用触发器,所以当订单生成时它会在数据库中的计数器中加1?
我希望有人能找到更好的解决方案,因为我的工作量并不大。