【发布时间】:2018-09-18 17:27:04
【问题描述】:
假设我有 6 位数的订单 ID:
000000
000001
000003
...
000020
...
999999
并假设这些中的每一个都来自分布式系统中的不同节点,我想将节点 ID 编码到订单中。 最简单的方法是简单地保留节点 ID 的前 2 位,如下所示:
010000 - second node
020001 - third node
010003 - second node again
150004 - 16th node
...
这工作得很好,但是因为我确定我只期望少量节点(比如说 16 个),所以我失去了很多可能的 id,将自己限制在基本上 10^4 而不是 10^6 .有没有一种聪明的方法来编码 15 个唯一节点而不限制可能的数量?理想情况下,我会有10^6 - 15 的可能性。
编辑:我正在寻找一种不会将范围平均分配给每个节点 ID 的解决方案。我正在寻找一种将节点 id 编码为已经存在的唯一 id 的方法,而不会丢失(理想情况下)更多的可能性节点数。
EDIT2:这必须是 6 位数字的字符串表示的原因是因为我正在使用的 API 需要这个。不幸的是,没有办法解决它。
【问题讨论】:
-
如果你考虑的是位而不是数字,你可以用 4 位编码 15 个节点。
-
您是否将这些数字存储或显示为 6 位十进制数字?因为存储高达 999999 的整数所需的 32 位整数有 12 个未使用的位可用于存储其他信息。
-
@m69 尽管听起来很愚蠢,但一些 API 设计人员认为 6 位数字已经足够了,所以我实际上必须发送 6 个 digit 数字的代表作为一个字符串。所以不,我不能使用任何剩余的位,不幸的是:(
-
@juvian 我试过了。问题是,6 位数字的最接近表示是 2^20。所以,20位。但是,它在 7 位数区域中略高。我现在正在想办法限制它。
-
感谢您在 cmets 中进行澄清(我会在问题中提及 API 设计)——这让挑战变得更有趣!
标签: algorithm language-agnostic uniqueidentifier