云开发能否处理秒杀或者电商中超卖的问题?
- 需求的场景描述(希望解决的问题)
比如在秒杀的场景,怎么处理超卖的问题?
是否能给某次读写加锁,或者其他解决方案?
- 希望提供的能力
云函数读写加锁或者其他能够保证读写过程中没有其他写入操作。
3 回复
你好,云开发数据库暂时并不提供显式的事务和锁,但是对于单条数据的操作仍然能保证原子性。
对于你的需求,推荐临时这样处理:
数据库中建一个活动,并加一个 goodsLeft 字段(number 类型),表示剩余多少商品
- 通过这样的代码执行抢购:
db.collection(
'activity'
).where({
activity_id: _.eq(
"test1"
),
goodsLeft: _.gt(0)
}).update({
data: {
goodsLeft: _.inc(-1)
//每次把剩余商品数减一
}
}).then(
function
(d){
if
(d.stats.updated>0) {
/*抢购成功*/
}
else
{
/*抢购失败*/
}
})