Azure Cosmos DB (SQL API) ItemRequestOptions 的 ConsistencyLevel 回退

Azure Cosmos DB (SQL API) ConsistencyLevel fallback for ItemRequestOptions

我正在使用 Microsoft.Azure.Cosmos SDK(针对 SQL API)从 Azure Cosmos DB 读取项目。在此 SDK 下,在读取项目(使用 container.ReadItemAsync)时,我们可以在以下两个位置覆盖默认的一致性级别(在 Azure 门户中的数据库级别设置):

  1. 创建 CosmosClient 时,我们可以在 CosmosClientOptions 下指定 ConsistencyLevel。此 属性 的文档是:“摘要:这可用于削弱读取操作的数据库帐户一致性级别。如果未设置,数据库帐户一致性级别将用于所有请求。”
  2. 在触发container.ReadItemAsync请求时,我们可以在ItemRequestOptions下指定ConsistencyLevel。 属性 的文档是:“摘要:获取或设置 Azure Cosmos DB 服务中请求所需的一致性级别。虽然这是在数据库帐户级别设置的,但 Azure Cosmos DB 允许开发人员覆盖每个单独请求的默认一致性级别。"

这两个属性都表明它们覆盖了在数据库帐户级别(从 Azure 门户)指定的默认一致性。

现在,如果我在数据库帐户级别(在 Azure 门户中)将默认一致性设置为“强”,并且在创建 CosmosClient(使用 CosmosClientOptions)时将一致性级别覆盖为“会话”,如下所示:

var clientOption = new CosmosClientOptions
            {
                ConsistencyLevel = ConsistencyLevel.Session              
            };
var cosmosClient = new CosmosClient(connectionString, clientOption);

现在,当我尝试使用 container.ReadItemAsync 读取项目时(使用我刚刚创建的 CosmosClient 获取容器)并且不在 ItemRequestOptions 下指定任何 ConsistencyLevel,如下所示:

var itemRequestOptions = new ItemRequestOptions();
container.ReadItemAsync<string>(id, partitionKey, itemRequestOptions)

现在执行读取操作的一致性级别是什么(强或会话)?

一致性将是Session。

这很容易通过检查读取的 RU 费用来检查。使用强一致性的 1kb 或更少数据上的 ReadItemsAsync() 将为 2RU/s,因为使用强一致性的读取是针对 2 个副本完成的。当使用 Session 或较弱的一致性时,读取是在单个副本上完成的,因此成本仅为 1 RU/s.