引导子串碰撞概率?

Guid substring collision probability?

如何计算两个 Guid 以相同的 N 个字符开头的概率?

情况:

我们正在考虑使用 guid 的前 n 个字符作为 cosmosdb 集合分区键。我们不想使用整个 guid,因为我们不希望每个文档都在其自己的逻辑分区中,但我们也可能不想只使用 guid 的第一个字符作为分区键,因为我们可能然后在分区中存储过多文档并溢出分区限制。

示例:

那么如果我们使用guid的前4个(随机抽取的数字)字符作为分区键,我们如何粗略计算每个分区每月存储多少文档?对于此示例,我们假设我们谈论的是每月对 400 万份文档进行分区。

更新

听起来每个 guid 字符都有 16 个潜在值。 0-9 和 a-f(十六进制字符集)。假设 Guid 字符是随机的(我不确定这是真的)应该有 16^4 个可能的四个字符 guid 开始(~65k 组合)。因此,我们最多有 65k 个分区。如果我们假设随机分布似乎是将 4,000,000 个文档分配到 65,000 个分区中,那么每个分区应该大约有 61 个文档,对吗?

实际上,您可以通过REST API了解收集分区的使用情况,显示数据分布情况。

cosmos db 中没有内置预览功能来显示存储前的分区使用情况 data.If 使用前您确实关心它,您可以自己计算 first.For 例如,使用 GROUP BY 使用 guid 按前 4 个字符对数据进行分区。