auto_random id长度的设置方式

【 TiDB 使用环境】生产环境

id长度这块没太明白,有没有清晰的对应关系。
比如 希望限制id 长度是11位,AUTO_RANDOM(x, xx) 这里应该是多少

这是给前端调用时考虑兼容性 javascript 对int有大小限制 你生成的是bigint
比如你的id是998829288288488281882848488388384885838288484
js无法解析成int了 溢出来

现在前端就是要限制到11位,太长会导致丢失精度。所以auto_random到底能不能限制长度

可以呀 你那文档地址提出来 就按他的写

11位数字 100亿 够分配了

按文档给的参数是16位,这边要求是11位。
假如明天限制12位,又该怎么设置
所以具体配置和id长度是怎么个对应关系。

autoradom(tikv数量,2的几次方)
这样你看得懂吗

AUTO_RANDOM 是一个8字节的bigint整数,其中最高位是符号位,默认63 ~ 59位是随机位(shard bits)。 不能直接设置AUTO_RANDOM 的总位长, 但可以通过调整随机位(shard bits)的数量来影响生成值的范围和分布。在创建表或修改表结构时,可以通过指定AUTO_RANDOM 括号中的数字来设置随机位的数量。
所以要求弄成int(11)这个好像是没有办法

1 个赞

“AUTO_RANDOM 列现在仅允许在 BIGINT 和 UNSIGNED BIGINT 列上定义”,而BIGINT的取值范围是超过11位的。所以,如果希望限制 id 列的长度是11位,那就无法用 AUTO_RANDOM 。可以通过 id int 限制取值范围,不过 id int很容易不够用。

看官方文档应该是有这类需求的,只不过我这前端限制的严,实在不行重建auto_increment了

auto_increment用久了也会超过11位。

到时候再说,可能业务那会都没了 :joy:

现在先用AUTO_RANDOM(3, 32) 建表,id目前最多10位

auto_random 2^64

官方概念解释AUTO_RANDOM 是应用在 BIGINT 类型列的属性,用于列值的自动分配。如果必须限制到int,建议使用AUTO_INCREMENT

:thinking:是不是应该解释为autoradom(tikv数量,2的N-1次方-1)

10000000000, 8999999999

计算机的应该看得懂

所以,auto_random 最低只能是16位?

希望限制id 长度是11位,AUTO_RANDOM(x, xx) 这里应该是多少,
前面哪个x取决于你的tikv数量,例如你有16个tikv,x就设置为log(2,16),即4,如果你的tikv有32个,那x就设置为log(2,32),即5
后面的xx取决于你希望的id长度,例如如果id限制为11位,则这个xx长度大概等于log(2,99999999999)约等于33,如果你想限制为15位,则这个xx长度大概等于log(2,999999999999999999999)约等于49
另外如果你没有设置xx,设置为AUTO_RANDOM(x)时,默认xx就是64-x-1
大概这样