我们有一个Cosmos DB Collection,包含大约100万个包含用户信息的文档。每天添加或更新的次数不多。但是,我们需要非常高的读取吞吐量。
大多数查询都基于UserId。 UserId属性是一个由运行数和校验位组成的数值。
基于官方文档
有些人可能认为两者,完整的UserId和UserId的子字符串(假设最后4位数字)可以构成一个好的分区键,即
将来, 可能 每个UserId都有多个文档,但假设不超过5个。
我的理解是,还需要在分区数和每个分区的文档数之间取得平衡。因此,在100万个分区中每个分区具有1个文档也是不理想的。但是,在此SO thread上,Microsoft工程师建议使用完整的唯一标识符作为分区键。 (值得注意的是,我们的情况略有不同,因为这里UserId是一个运行数字而不是随机GUID)。此外,在this blog post的注释中,还建议使用ID作为分区键。
所以,考虑到: a)此集合主要用于读取操作, b)我们将拥有1到2百万个UserIds, c)每个UserId我们的文档不会超过5个, d)我们不要求跨多个用户的SP或交易。 什么分区键会更高效?
答案 0 :(得分:1)
根据@RafatSarosh的评论和进一步的研究,我了解到拥有数百万个分区和每个分区1个文档并不是一个坏习惯,我们可以依靠Cosmos DB查询执行优化。
我们将使用userId作为分区键。
HTH