创建确保以下内容的机制的最佳方式是什么?例如:
两个人不会在基于BigTable的GAE应用程序的拍卖中同时购买同一物品?
如果有人能用“引擎盖下”之类的描述来启发我,我将不胜感激。
发布于 2010-08-02 21:14:32
使用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
发布于 2010-08-02 21:09:56
在事务中,检查拍卖是否仍然打开,例如,检查winner
字段是否未设置,如果设置了,则将winner
设置为当前用户。
因为它发生在交易中,所以不可能在交易过程中被抢走。如果另一个用户试图在同一时刻赢得拍卖,他们将无法写入项目,直到第一个用户完成,在这一点上“它仍然可用吗?”检查将失败。
https://stackoverflow.com/questions/3387965
复制相似问题