散列到DocumentDB中的分区

时间:2017-01-13 22:46:25

标签: random azure-cosmosdb

我正在DocumentDB上构建一个系统。我们正在使用分区集合。对于分区密钥,我们将使用随机数来最好地确保我们对底层分区具有相同的利用率(因此,RU的利用率相等,因为RU在底层分区之间平均分配)。 我们将分区键存储在标识符中,以便我们知道如何在标识符发出请求时“找到”文档。 话虽如此,我们试图找出随机数范围的权衡。如果我们想保存一个字符(在我们的用例中这很重要),我们的选择就像[0-999]或[0-99]。 如果有> 99个底层分区,我们可能会利用分区,因为我们的分发不会涵盖所有可能的“桶”。我试图推断相反的情况 - 即,物理分区少于99个,将随机分布范围减少到[0-99]的权衡是什么?

1 个答案:

答案 0 :(得分:1)

具有相同分区键的所有文档将由DocumentDB放置在同一物理分区中。因此,具有粗分区密钥(具有99个唯一存储区)的优点是针对较大集合的非主要密钥查询,即具有相同存储桶的数据具有局部性并且可以以非常低(单位数ms)延迟来查询,就像在bucket + ID上的主键查询一样。您还有一个更大的事务边界,这对于需要事务的场景可能很重要。

粗分区键的缺点是可伸缩性,就像您在问题中提到的那样。您的数据/吞吐量不能超过99个DocumentDB分区可支持的数据/吞吐量。同样由于散列(https://en.wikipedia.org/wiki/Birthday_problem)的性质,即使分区数少于99,也可能遇到偏差。也就是说,如果您的数据/吞吐量要求低端,那么99是相当合理的号。

这将有助于理解为什么您的应用程序需要两个对三个数字。您还可以通过askdocdb@microsoft.com与DocumentDB团队联系,以获得进一步的支持/讨论。