当前位置: 首页 > 知识库问答 >
问题:

为什么cosmos db为同一个分区键值创建5个分区?

法风畔
2023-03-14

我们使用的是Cosmos DB SQL API,下面是一个xyz集合:

大小:无限
吞吐量:50000 RU/s
PartitionKey:散列

我们将插入200,000条记录,每个记录的大小为2.1KB,并且分区键列的值相同。据我们所知,具有相同分区键值的所有文档都存储在同一个逻辑分区中,无论我们是在固定大小的集合还是在无限大小的集合中,逻辑分区都不应超过10 GB的限制。

显然,我们的总数据甚至不到0.5GB。然而,在Azure Cosmos DB的度量刀片(在门户中)中,它说:

集合XYZ有5个分区键范围。提供的吞吐量平均分布在这些分区中(每个分区10000 RU/s)。

这与我们迄今为止从MSFT文档中研究的内容不匹配。我们是不是漏掉了什么?为什么要创建这5个分区?

共有1个答案

羊舌自强
2023-03-14

当使用Unlimited集合大小时,默认情况下将为您提供5个物理分区密钥范围。这个数字可以改变,但截至2018年5月,5是默认的。您可以将每个物理分区视为一个“服务器”。因此,您的数据将分散在5个物理“服务器”中。随着数据大小的增长,数据将自动在更多的物理分区上重新分布。这就是为什么在设计中预先获得正确的分区键是如此重要。

对于所有200k记录使用相同的分区键(PK)的情况,问题是会有热点。你有5个物理“服务器”,但只有一个将被使用。其他4个将闲置,结果是您将有较少的性能在相同的价格点。您为50K RU/s付费,但永远只能使用10K RU/s。把你的PK改成更均匀分布的东西。当然,读取数据的方式会有所不同。如果您给出更多关于您存储的文档的细节,那么我们可能会帮助给出一个建议。如果只是进行点查找(通过每个文档ID调用ReadDocumentAsync()),那么可以安全地在文档的ID字段上进行分区。这将把所有200k文档分散到所有5个物理分区中,50k RU/s的吞吐量将最大化。一旦您有效地做到了这一点,您可能会看到,您可以减少RU使用到一些更低的东西,并节省大量的钱。每个2.1KB的记录只有200k条,您可能会降低到2500 RU/s(您现在支付的成本的1/20)。

*server用引号表示,因为每个物理分区实际上是许多服务器的集合,这些服务器负载平衡以获得高可用性和吞吐量(取决于您的一致性级别)。

 类似资料:
  • 像大多数其他操作系统一样,LFS 通常安装在一个新的专用分区上。如果你有充足的磁盘空间,推荐将 LFS 系统构建在一个新的空白磁盘分区上。当然,LFS 系统(甚至是多个 LFS 系统)也可以安装在现存的某个操作系统所在的分区上,它们完全可以和平共处。这个文档:http://www.linuxfromscratch.org/hints/downloads/files/lfs_next_to_exis

  • 我一直在努力想办法创建一个HashMap,将具有相同键的值(放入列表)分组。这就是我的意思: 假设我有以下键和值: 我想把这些值放到一个 这样它就会将值分组到具有相同键的列表整数中,类似于这样: (1, {10, 11, 12}),(2, {20}), (3, {30,31}) 现在,密钥和值存储在 我不知道如何通过这个Hashmap循环创建新的Hashmap,关键是:值对列表。有人对这个话题有好

  • 我试图在repl中创建一些类,当我创建具有与第一个类相同属性的第二个类时,我被告知它已经定义了。 这仅仅是repl不能正确处理名称空间的问题吗?它在文件中按预期工作。 Perl6版本:这是Rakudo版本2018.10,构建于MoarVM版本2018.10之上,实现Perl 6。c

  • 我通过指定分区的数量从文本文件创建RDD。但它给我的分区数与指定的分区数不同。 文件 /home/pvikash/data/test.txt的内容是: 我试图理解为什么这里的分区数量在变化,如果我们有小数据(可以容纳一个分区),那么为什么spark会创建空分区? 任何解释都将不胜感激。

  • 多台机器生成事件。这些事件被发送到我们的Kafka集群,其中每台机器都有自己的主题(app.machine-events.machine-name)。因为顺序在每台机器的基础上很重要,而分区大小现在不是问题,所以所有主题都由一个分区组成。因此,目前,N个主题也意味着N个分区。 消费/处理应用程序使用了kafka-streams,我们给出了/“machine-event-processor”,它对每

  • 我有一个将消息写入主题/分区的生产者。为了保持顺序,我希望使用单个分区,我希望12个使用者读取来自这个分区的所有消息(没有使用者组,所有消息都应该发送给所有使用者)。这是可以实现的吗?我读过一些论坛,每个分区只有一个用户可以阅读。