这个问题与我(还)遇到的问题无关,但它让我夜不能寐。理论上,最终,随着表中的行数越来越多,每行对应的ID都会“用完”数字,不是吗?我想如果你不断增加列值的深度,你可以让它继续上升,但最终必须有一个上限,对吧?
我听说过一种称为“分片”的技术,但还没有对其进行足够详细的解释以满足我的好奇心。答案是您只是不断添加更多数字,还是有一个聪明的模式允许在他们自己的沙箱中“重复”ID。如果这些沙箱必须交互怎么办?
分片与 ID 的大小无关。
正确的处理方法是:不要担心。
32 位 int 具有足够的值,您可以每秒添加一行超过 100 年而不会用完。
如果这还不够,使用 64 位 int,您可以每秒添加 10亿行,并且仍然持续 500 多年。
所以基本上:别担心。根据您期望乘以 100 的行数选择 int 的大小,然后继续。
重新分片:
这只是一种通过使用规则决定哪个服务器应该获取数据来将数据库拆分到多个服务器的方法。规则因您存储的内容和拥有的服务器数量而异。
为 AUTO_INCREMENT 列使用足够大的整数数据类型来保存您需要的最大序列值。当列达到数据类型的上限时,下一次生成序列号的尝试失败。例如,如果您使用 TINYINT,则允许的最大序列号为 127。对于 TINYINT UNSIGNED,最大值为 255。
这真的很迷人。我想一个简单的(半)答案是使用 BIGINT - 最大值为 18,446,744,073,709,551,615。如果你有那么多列 - 那么......哇......