理论场景:我有一个电子商务网站,保存在GAE数据仓库的库存。每个记录都包含项目的名称和计数。这个商店的流量很小,库存也很大,所以多个客户不太可能同时购买同一项;这样我们就不会关注数据存储限制--每秒更新同一条记录几次--持续一段时间。
在两个客户同时购买同一商品的情况下,我如何正确地更新项目的记录?至关重要的是,我们必须对每个项目保持正确的计数。
在mongo世界里,我会使用类似于$inc操作的东西。您将如何为GAE Datastore处理此场景?
谢谢
发布于 2016-10-13 13:41:35
云数据存储事务使用乐观并发,因此可以同时尝试两个事务。如果实体发生变化,就会失败--此时您只需重新尝试失败的事务。
例如,在Python中,您可以在事务装饰器中指定重试次数。
示例代码:
from google.appengine.ext import ndb
...
@ndb.transactional(retries=5)
def inc_item_count(item_key, count_purchased):
item = item_key.get()
item.count_purchased += count_purchased
item.put()
return True网络规模?
如果超出了此解决方案的工作范围,您将希望探索基于任务队列的系统,或者转向切分计数器每项计数器。
https://stackoverflow.com/questions/40003295
复制相似问题