创建机制的最佳方法是什么,以确保例如:
根据使用BigTable的GAE应用程序,两个人不会在拍卖中同时购买相同的商品?
如果有人可以用“引擎盖下”的方式启发我的描述,我将不胜感激。
答案 0 :(得分:3)
使用AppEngine实现此类事务非常简单。关键是run_in_transaction
方法:
class AuctionItem(db.Model):
sold = db.BooleanProperty()
purchaser = db.UserProperty()
def buy(self, buyer):
def buy_txn():
sale_success = False
if self.sold == False:
self.sold = True
self.purchaser = buyer
self.put()
sale_success = True
return sale_success
success = db.run_in_transaction(buy_txn, buyer)
return success
答案 1 :(得分:0)
在交易中,检查拍卖是否仍处于打开状态,例如检查未设置winner
字段,如果是,请将winner
设置为当前用户。
由于它发生在交易中,因此在交易中不会抓住该项目。如果另一个用户试图在同一时刻赢得拍卖,他们将无法在第一个用户完成之前写入该项目,此时“它仍然可用吗?”检查会失败。