azure-cosmosdb - CosmosDB SQL API,仍在尝试获取分区列表及其大小
问题描述
我在 StackOverflow 上看到了一堆答案,指出微软的 Cosmosdb 根本不支持获取分区键列表。这一直困扰着我,因为它似乎是任何数据存储的第一个要求,获取逻辑分区名称和大小的列表 - 任何其他数据存储都会给你诸如表大小之类的东西,我不敢相信微软将把它关掉。
我不认为他们会这样做,所以它一定不能被记录(或至少记录良好)。在以下代码中:
var client = new DocumentClient(
endpoint,
authKey
Database db = client.CreateDatabaseQuery().Where(d => d.Id == databaseName).AsEnumerable().FirstOrDefault();
//Sure is a lot of verbose faff. Have to keep specifying things you've already basically specified when you initialized the client...
var collection = client.CreateDocumentCollectionQuery(databaseSelfLink).Where(c => c.Id == myCollectionName).ToArray().FirstOrDefault();
//This yields "/$pk" in the value - so I guess there's just one path,
//but I still have a lot of distinct values in that path.
//I try a DocumentQuery next to drill down.
var partitionKeys = collection.PartitionKey.Paths;
var querySpec = new SqlQuerySpec("SELECT DISTINCT c.PartitionKey FROM c");
var test = client.CreateDocumentQuery(collection.SelfLink, querySpec);
当我在最后一行之后断点并查看测试对象时,我看到它有 ak 子对象,每个子对象都有一个整数值。我不确定这些是什么,但它们可以是分区和大小吗?有没有更好的方法将它们拉出来?
解决方案
我有一点答案,虽然不是一个完整的答案。因此,我不会将此问题标记为已回答。
这是一些修改后的代码拉回分区和大小。根据上述文档,它只保证报告大于 1GB 的分区,尽管到目前为止我看到的最小报告分区是 42MB:
var client = new DocumentClient(
endpoint,
authKey
Database db = client.CreateDatabaseQuery().Where(d => d.Id == databaseName).AsEnumerable().FirstOrDefault();
var collection = client.CreateDocumentCollectionQuery(databaseSelfLink).Where(c => c.Id == myCollectionName).ToArray().FirstOrDefault();
collection = await client.ReadDocumentCollectionAsync(
collection.SelfLink,
new RequestOptions { PopulatePartitionKeyRangeStatistics = true });
Console.WriteLine(collection.PartitionKeyRangeStatistics.ToString());
所以现在我要做的就是用报告的分区名称和大小解析字符串。关于动态创建新分区以使系统能够在使用完整配置的 RU 时正确扩展,我还有更多问题要回答。
推荐阅读
- android - RecyclerView的项目XML中的Android TextView左重力问题
- excel - 无法读取系列点值
- javascript - 我如何从 datepicker javascript 中获取反应形式的价值
- java - 如何将对象引用指向另一个对象
- android - 我可以在弹出的 react-native 项目中安全地删除 app.json 吗?
- python - 哪些功能或模块需要连续输入?
- c# - .Net 5 动作过滤器在使用 AspNetCore.CacheOutput 时不起作用
- javascript - 在 splidejs 轮播中显示用户单击时出现主滑块的问题
- reactjs - 如何在 asyncapi-react-component 中启用规范扩展?
- dynamic - 资源内部的 Terraform 条件内容块