GAE和BigTable上的拍卖风格交易

时间:2010-08-02 12:58:46

标签: google-app-engine transactions

创建机制的最佳方法是什么,以确保例如:

根据使用BigTable的GAE应用程序,两个人不会在拍卖中同时购买相同的商品?

如果有人可以用“引擎盖下”的方式启发我的描述,我将不胜感激。

2 个答案:

答案 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设置为当前用户。

由于它发生在交易中,因此在交易中不会抓住该项目。如果另一个用户试图在同一时刻赢得拍卖,他们将无法在第一个用户完成之前写入该项目,此时“它仍然可用吗?”检查会失败。