理论场景:我有一个电子商务网站,在 GAE 数据存储中保存库存。每条记录都包含项目名称和计数。该店客流量很少,库存量大,因此不太可能有多个顾客同时购买同一商品;这样做是为了让我们不必关注在持续一段时间内每秒多次更新同一记录的数据存储限制。
万一两个客户同时购买同一商品,如何正确更新商品记录?保持每件元素的正确数量至关重要。
在 mongo 世界中,我会使用类似 $inc 操作的东西。您将如何解决 GAE 数据存储的这种情况?
谢谢
最佳答案
Cloud Datastore 事务使用开放式并发,因此您可以同时尝试 2 个事务。如果实体发生更改,就会失败 - 此时您只需重试失败的事务即可。
例如,在 Python NDB 中,您可以在事务装饰器中指定重试尝试的次数。
示例代码:
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
网络规模?
如果您的规模超出了此解决方案的工作范围,您将需要探索基于任务队列的系统,或者转向 sharding counters每个项目的计数器。
关于database - GAE数据存储同时更新记录的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40003295/