【问题标题】:Can PHP's random_int be relied for unique integer genrator (reasonably)PHP random_int 是否可以依赖于唯一的整数生成器(合理)
【发布时间】:2018-10-20 17:25:51
【问题描述】:

我有一个应用程序,每年需要生成大约 20 万个批次 ID。

我最开始想到使用uniqid()来生成批次ID,但是这会返回字符串,与整数相比,这将占用数据库中的巨大空间。

因此,我的问题是,是否会依赖 random_int(1, 2147483647) 来生成唯一编号?

仅供参考,一般2147483647PHP_INT_MAX

【问题讨论】:

  • 为什么要随机?
  • 不,你不能依赖随机数在整个集合中是唯一的
  • 然后使用增量值,例如 db id
  • uniqid() 字符串为 13 个字节,您的整数为 4。相差 9 个字节,乘以 200K 记录 = 1,800,000 个字节。每年的记录不到 2Mb,这并不是“巨大”的空间。也就是说,如果空间和性能如此重要,为什么要在 32 位系统上运行?
  • 信息太少,无法专门为您提供所需的帮助,因为您提出的问题似乎有一些很好的可行解决方案,但仅在一般情况下使用 db auto increment 确实使用带有年份前缀的 uniqid 关于您的问题,这只是统计数据...在 20 亿中重复 20 万是 1/10,000

标签: php random integer uniqueidentifier


【解决方案1】:

正如@Alex Howansky 所述,如果您使用uniquid(),数据库大小几乎不会增加。

如果您的要求是接近 100% 的唯一 ID,那么 random 4 位整数将不是唯一的。它需要一些额外的位才能随机且唯一。

我在我的应用程序中使用以下功能。这具有更高的唯一性。 uniquid() 使用 22 个字节而不是 13 个字节

function getUniqueId(){
  // will return 22 characters Unique string eg "5bcc2342652c2630171474"
  return str_replace('.', '', uniqid('',true));
}

如果您仍然只需要使用整数。然后,按照 Lawrence Cherone 的建议,您应该使用自动增量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-08
    • 2021-06-06
    • 1970-01-01
    • 2020-11-06
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2020-03-11
    相关资源
    最近更新 更多