如果我在GAE数据存储区上使用多租户功能,那么每个租户是否也会应用数据存储区事务锁定?或者如果租户正在使用数据存储区交易,那么所有其他租户都必须等到租户的交易完成后才能进行?
答案 0 :(得分:2)
有两点需要注意:
命名空间是实体密钥的一部分,因此事务仅适用于属于您的事务的实体。即使其他名称空间的实体具有相同的ID,也不会受到影响。
GAE上的交易不做锁定,而是they use optimistic concurrency control。所以事务永远不会阻塞,只是当两个事务在相同的实体上运行时,第二个事务将失败,然后运行时将尝试重复三次。此自动重试是您的事务应该是幂等的原因(=多次运行代码应该产生相同的最终结果)。
答案 1 :(得分:1)
交易范围仅限于实体组。命名空间(多租户)不会自己定义实体组。你需要钥匙(加上潜在的祖先)。
唯一的冲突将是写入同一实体组的多个请求。使用的命名空间在租户之间不可能发生。
https://developers.google.com/appengine/docs/go/datastore/entities#Go_Ancestor_paths