Random 散列到DocumentDB中的分区

Random 散列到DocumentDB中的分区,random,azure-cosmosdb,Random,Azure Cosmosdb,我正在DocumentDB上构建一个系统。我们正在使用分区集合。对于分区键,我们将使用一个随机数来最好地确保底层分区的利用率相等(因此,RU的利用率相等,因为RU在底层分区之间被平均分割) 我们将把分区键存储在一个标识符中,这样我们就知道以后当标识符发出请求时如何“查找”文档 话虽如此,我们试图找出随机数范围的权衡。如果我们想保存一个字符(这在我们的用例中很重要),我们的选择类似于[0-999]或[0-99] 如果有>99个底层分区,我们可能会利用不足的分区,因为我们的发行版不会覆盖所有可能的“

我正在DocumentDB上构建一个系统。我们正在使用分区集合。对于分区键,我们将使用一个随机数来最好地确保底层分区的利用率相等(因此,RU的利用率相等,因为RU在底层分区之间被平均分割)

我们将把分区键存储在一个标识符中,这样我们就知道以后当标识符发出请求时如何“查找”文档

话虽如此,我们试图找出随机数范围的权衡。如果我们想保存一个字符(这在我们的用例中很重要),我们的选择类似于[0-999]或[0-99]


如果有>99个底层分区,我们可能会利用不足的分区,因为我们的发行版不会覆盖所有可能的“bucket”。我试图得出相反的结论-即,对于少于99个物理分区,将随机分布范围减少到[0-99]有什么好处?

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

粗糙分区键的缺点是可伸缩性,正如您在问题中提到的。您的数据/吞吐量不能超过99个DocumentDB分区所能支持的。同样由于hashing()的性质,即使分区数小于99,也可能会出现偏差。也就是说,如果您的数据/吞吐量需求处于低端,那么99是一个相当合理的数字

这将有助于理解为什么应用程序需要两位数而不是三位数。您还可以联系DocumentDB团队,网址为askdocdb@microsoft.com以获得进一步的支持/讨论