-1

在我目前正在处理的应用程序中,我们需要确保特定种类中三个属性的元组的唯一性。因此,在创建新实体时,我们需要确保不存在具有给定元组的那种实体。

我对这个问题的幼稚方法是创建一个简单的查询,根据三个字段过滤相等性。如果找到具有给定字段的实体,则操作将中止,否则将插入具有这些字段和其他相关数据的新实体。但是,当尝试并行插入许多实体时,会出现事务争用。

但是,只要我添加了这三个属性的复合索引,就不会发生争用。我没有改变代码,我只是为这些字段添加了一个复合索引。

我一直在挖掘所有文档并四处寻找遇到类似问题的人,但没有人提到过这种“解决方法”。

我错过了什么吗?或许发现了什么?或者这是预期的行为;内置索引还不够吗?

4

1 回答 1

0

您要查看的主要文档是https://cloud.google.com/datastore/docs/concepts/optimize-indexes

在您的情况下,看起来您的合并联接最终在寻找不匹配时锁定了许多行。但是,使用复合索引,您只需查找查询所需的索引条目。因此,与对查询使用合并连接相比,复合索引的争用较少。

于 2021-09-15T22:56:01.960 回答