在CosmosDb中使用/ id作为分区键的含义

use*_*791 7 azure azure-cosmosdb

在每分钟有1000个条目(唯一键)输入波斯菊的情况下,使用/ id作为分区键是否安全?

特别是,存在逻辑分区的概念 https://docs.microsoft.com/zh-cn/azure/cosmos-db/partition-data 此处的图形使我有些害怕,表明逻辑分区是实际实体(例如,“城市”:“伦敦”)。如果我有一个8小时的TTL和每分钟1000个条目,那么我并不一定想要cosmos需要管理的480,000个逻辑分区。

我想像的是,分区键的值只是简单地经过哈希处理,并且与物理分区的数量成模,例如。 https://docs.microsoft.com/zh-cn/azure/cosmos-db/partitioning-overview#choose-partitionkey 在“逻辑分区管理”部分中表示这是正确的。此外,“选择分区密钥”部分建议(但实际上并未声明)/ id将是一个很棒的分区密钥,因为它不必担心10GB的限制,吞吐量限制,没有热点,宽(巨大的)值范围,并且由于应用程序不需要对除id以外的任何内容进行过滤,因此跨分区查询将不会成为该用例的问题。

总而言之,我是否需要担心成千上万个分区键值(逻辑分区)的内存/ CPU /等开销?文档指出分区键的值越多越好,但是不要说是否有太多的值。

Kri*_*ram 8

我来自Cosmos DB工程团队。

您不必担心在Cosmos DB集合/容器上创建的逻辑分区键的数量。只要分区键是您的写入(每个逻辑分区键上限为10GB)和查询的适当选择,您就应该不错。

  • 如果他们使用“ id”作为分区键,则他们将担心是否要查询“ id”以外的属性上的数据,因为它们将被迫进行跨分区查询。 (2认同)
  • 同意@DavidMakogon,这就是为什么我指出分区键必须是写操作和查询操作的适当选择的原因。 (2认同)
  • 只是要清楚一点,如果一个带有“ UID”属性的“客户”表主要是由“ emailAdress”查询的,那么使用“ / emailAddress”作为分区键是一个好主意吗? (2认同)

dee*_* zg 7

影响是:

  1. 最佳基数
  2. 轻松、快速、廉价的文档读取

  3. 没有事务,因为事务范围是分区键

  4. id除跨分区之外的任何查询

附言。我很难想象除了读取/查询之外不需要任何东西的情况id。除了文档缓存(与 TTL 结合)。