2017-07-24 83 views
1

我们正在评估用于MongoDB替换的Azure Cosmos DB。我们拥有500万份文档,每份文档大小约20 KB。由于JSON的规模,Mongo的收藏总大小约为50 GB,我们预计它在Cosmos中的收藏量将增加15%。此外,还有一个160万个文件的早期增加。我们的吞吐量要求是每秒大约10000个查询。查询可以是单个文档,也可以是一组文档。查询单个文档大约需要5 RU,并且需要10到20 RU左右的多个文档。 为了获得所需的吞吐量,我们需要对集合进行分区。物理分区 - Azure CosmosDB

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

  1. Cosmos DB内部使用了多少个物理分区?门户网站指标只显示10个分区。情况总是如此吗?
  2. 每个物理分区的最大大小是多少?门户网站指标称它为10 GB。我们如何存储超过100 GB的数据?
  3. 每个分区的最大RU是多少?当单个分区变得非常热以查询时,我们是否会受到限制?

这些是我们想要克服的首要障碍,然后才能真正着手进一步推进Cosmos DB的采用。

回答

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

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

  3. 每个物理分区的最大RU数是您的总RU/s除以物理分区数。因此,如果您拥有10个物理分区的10000 RU集合,则实际上每个物理分区的容量限制为1000 RU。出于这个原因,为您的文档选择合适的逻辑分区键很重要。如果您创建热点,则可以在总配置的RU之下进行节流。

我建议你花一些时间阅读关于分区和与宇宙的规模。 The documentation and video available on this page相当有帮助。这里是直接从网页复制一些额外的信息:/

  • 您提供有T请求宇宙DB集装箱吞吐量
  • 在幕后,所需昌隆DB规定分区服务牛逼的请求/秒。如果T高于每个分区的最大吞吐量t,则Cosmos DB提供N = T/t分区
  • Cosmos DB在N个分区间均匀分配分区密钥散列的密钥空间。因此,每个分区(物理分区)承载1-N分区键值(逻辑分区)
  • 当物理分区p达到其存储限制时,Cosmos DB将p无缝拆分成两个新分区p1和p2,并将大致对应的值一半是每个分区的密钥。这种拆分操作对于您的应用程序是不可见的。
  • 同样,当您提供高于t * N吞吐量的吞吐量时,Cosmos DB将分割您的一个或多个分区以支持更高的吞吐量