我需要进行以下一项操作:
理想情况下,为了最大程度地减少资源使用,如果在处理#2的过程中已经有另一个工作人员,我甚至不希望程序开始执行#2。
这意味着get()
调用将阻塞,直到没有其他人正在处理#2。
根据docs并尝试使用数据存储区的Transaction
,我的理解是,只有在commit()
调用之后,才会进行任何争用检查。只有这样,才会引发错误并发生回滚。但这意味着每个工人都要执行昂贵的步骤#2,然后才意识到外面已经有人在做这项工作。
如果其他人使用该密钥进行交易,是否有办法让get()
呼叫阻塞?
在this article中,他们利用内存缓存。但是,我希望尽可能将其保留在Cloud Datastore中,以最大程度地减少其他基础架构。
答案 0 :(得分:1)
事务的目标是准备写,然后在提交事务时有效地写,或者在回滚时取消更改。
读取不会被阻止,只有写入操作会被阻止。
您有2种解决方案:
您可以依靠自己的处理时间进行此过程
但是,在两种情况下,如果同时出现,您仍然有比赛条件