物理分区 - Azure CosmosDB

时间:2017-07-24 13:56:39

标签: azure-cosmosdb

我们正在评估Azure Cosmos数据库以进行MongoDB替换。我们收集了大量500万份文档,每份文档大小约为20 KB。 Mongo中的集合总大小约为50 GB,由于JSON大小,我们预计Cosmos的总大小将增加15%。此外,还提前增加了160万份文件。我们的吞吐量要求大约是每秒10000次查询。查询可以是单个文档,一组文档。查询单个文档大约需要5个RU,多个文档大约需要10到20个RU。 为了获得所需的吞吐量,我们需要对集合进行分区。

想获得以下问题的答案吗?

  1. Cosmos DB内部使用了多少个物理分区?门户网站指标仅显示10个分区。总是这样吗?
  2. 每个物理分区的最大大小是多少?门户网站指标称它为10 GB。我们如何存储超过100 GB的数据?
  3. 每个分区的最大RU是多少?当单个分区变得非常热以进行查询时,我们会受到限制吗?
  4. 这些是我们想要克服的起步障碍,然后才能真正进一步推进Cosmos DB的采用。

1 个答案:

答案 0 :(得分:3)

  1. 物理分区的数量由Cosmos服务管理。通常你从10开始,但如果需要更多,系统将透明地为你添加它们。

  2. 物理分区的最大大小不应该是您的应用程序的关注点。创建分区集合时,您正在处理“逻辑分区”而不是物理分区。 Cosmos将确保所有属于逻辑分区(具有相同分区键)的文档将始终放在其中一个物理分区上。但是,如第1部分所述,Cosmos将确保您拥有适当数量的物理分区来存储数据。换句话说,任何给定的物理分区都将是许多逻辑分区的所在,这些分区可以根据需要进行负载平衡和移动。

  3. 每个物理分区的最大RU是您的总RU / s除以物理分区的数量。因此,如果您有一个包含10个物理分区的10000 RU集合,则实际上每个物理分区限制为1000 RU。因此,为文档选择适当的逻辑分区键非常重要。如果您创建热点,则可以将其限制在总配置的RU之下。

  4. 我建议您花些时间阅读有关使用Cosmos进行分区和缩放的内容。 The documentation and video available on this page非常有帮助。以下是直接从该页面复制的一些其他信息:

    • 您为Cosmos DB容器配置了T请求/ s吞吐量
    • 在幕后,Cosmos DB提供了为T请求提供服务所需的分区。如果T高于每个分区的最大吞吐量t,则Cosmos DB提供N = T / t分区
    • Cosmos DB在N个分区上均匀分配分区键哈希的键空间。因此,每个分区(物理分区)承载1-N分区密钥值(逻辑分区)
    • 当物理分区p达到其存储限制时,Cosmos DB将p无缝地拆分为两个新分区p1和p2,并将对应于大约一半密钥的值分配给每个分区。此拆分操作对您的应用程序是不可见的。
    • 同样,当您提供高于t * N吞吐量的吞吐量时,Cosmos DB会拆分一个或多个分区以支持更高的吞吐量