唯一 ID 是 CosmosDB 的最佳分区键吗

cod*_*112 4 azure-cosmosdb

我正在尝试确定 CosmosDB 表的最佳分区键,该表同时具有客户 ID(每个客户的唯一值)和客户城市(在北美,会产生数千个可能的值)。

在阅读 Azure 文档时,我发现许多相互矛盾的信息,哪一个最好。一些文档指定更唯一的值将提供更好的跨分区的项目分布。而其他文件指出使用城市是最好的。

所以我的问题是:

  1. 每个分区键是否都经过哈希处理?每个分区是否包含具有一系列哈希值的键的项目?即,如果客户 ID 是分区键,那么一个分区的 ID 是否为 1 到 1000,另一个分区的 ID 为 1000 到 2000,等等?和城市一样,一个分区会不会有多个城市?或者,每个分区是否会以 1:1 的方式映射到特定分区键(即 ID 或城市)?

  2. 基于上述,哪一个更好(性能更高,成本更低)?拥有尽可能细粒度的分区键(id 客户 ID)?还是客户城市?

谢谢你!

Jam*_*mes 5

  • 是的,分区键经过哈希处理,这些哈希值决定了逻辑分区的物理存储位置
  • 不,分区将只包含具有相同分区键的记录(这基本上就是要点,关联记录位于同一位置)。因此,在您的示例中,它们将按 1:1 映射
  • 成本无关紧要,因为您不需要为分区付费(尽管分区确实有大小限制),因此问题归结为性能,而这一切都取决于您的应用程序如何查询数据。

理解分区工作原理的一个很好的类比是考虑查找某人的地址:

如果我给了你我家的钥匙(物品 ID),但没有其他任何东西,你将需要尝试世界上的每一扇门,直到你偶然发现正确的一扇门(也称为跨分区查询)。如果我告诉你国家(分区键),那么你可以立即消除数百万个门,但你仍然有数百万个门需要检查,所以仍然不是很有效。如果我给你城市,虽然会少一些,但仍然有很多需要检查......但如果我给你我的邮政编码,那么我们刚刚将查询从数十亿条记录优化到 15-20 条。