Cosmos DB SDK v3中CollectionSizeQuota、DocumentQuota等效获取方法
Azure Cosmos DB v3 SDK 获取容器配额信息的实现方式
v3版本的SDK对响应模型做了精简,单条数据操作返回的ItemResponse<T>类型不再直接强类型暴露CollectionSizeQuota、DocumentQuota这类容器级别的配额属性,这两个值统一收敛到响应头中返回,可通过以下两种方式获取:
方法1:从操作响应的Headers属性直接读取
所有Cosmos DB操作返回的响应对象(包括ItemResponse<T>、ContainerResponse等)都自带Headers属性,直接从响应头中读取对应字段即可:
- 集合存储配额对应响应头:
x-ms-collection-size-quota - 文档数量配额对应响应头:
x-ms-document-quota
等效于v2版本代码的v3实现如下:
using Microsoft.Azure.Cosmos; public string FunctionA(ItemResponse<T> response) { // 响应头返回值为字符串格式,需要数值类型时可自行转换为long string collectionSizeQuota = response.Headers.GetValueOrDefault("x-ms-collection-size-quota"); string documentQuota = response.Headers.GetValueOrDefault("x-ms-document-quota"); return string.Format( "collection size quota: {0}, document quota: {1}", collectionSizeQuota, documentQuota); }
方法2:主动读取容器元数据获取配额
如果不在项操作的上下文里,需要单独查询配额,可以直接读取容器元数据,返回结果的响应头中同样携带这两个配额字段:
// 初始化Cosmos客户端 CosmosClient cosmosClient = new CosmosClient("你的Cosmos DB连接字符串"); Container targetContainer = cosmosClient.GetDatabase("目标数据库名").GetContainer("目标容器名"); // 读取容器元数据响应 ContainerResponse containerResponse = await targetContainer.ReadContainerAsync(); string collectionSizeQuota = containerResponse.Headers.GetValueOrDefault("x-ms-collection-size-quota"); string documentQuota = containerResponse.Headers.GetValueOrDefault("x-ms-document-quota");
注意事项
- 配额值的默认单位为KB,使用时可根据业务需求做单位转换
- 如果需要获取当前已使用的存储量、已存储的文档数量,可分别读取
x-ms-collection-size-usage、x-ms-document-count-usage两个响应头,读取逻辑和配额字段完全一致 - 容器配额属于创建时配置的静态值(除非手动调整容器的存储、吞吐量配置),建议首次读取后在业务内存中缓存,无需每次操作都重复解析,减少不必要的性能开销
内容的提问来源于stack exchange,提问作者SS77nmp
相关产品推荐
相关产品推荐

