【问题标题】:20 million unique codes in mySQL - what length should the codes be?mySQL 中的 2000 万个唯一代码 - 代码的长度应该是多少?
【发布时间】:2014-01-16 14:28:26
【问题描述】:

我需要生成 2000 万个唯一代码以存储在 mySQL 中。代码字符串应该是字母数字减去不明确的字符 (0,1,O,L,I,S,5),因此可用字符总数为 29。字符串应该多长才能容纳 2000 万个唯一代码?

另外,任何人都可以帮助创建一个 mySQL 过程来生成和插入保持唯一性的代码吗?

更新:生成的代码不能是连续的,以避免增量暴力尝试,因此例如应该使用 100 个顺序代码中的 1 个。

谢谢!!

【问题讨论】:

  • 5 个字符。但是你为什么要这样做呢?
  • 我只是想知道最小长度,并希望它不会超过 8。
  • 如果你经常使用它来对应用程序进行压力测试,你应该考虑获得类似ems mysql data generator
  • 注意,对你来说可能是基础数学。另外,如果您继续阅读这里有一个编程问题,因为我想知道如何以编程方式创建代码并将代码插入到 mySQL 中。
  • aconrad,不,这将是为 SMS 促销生成代码的一种方式

标签: mysql unique


【解决方案1】:

五个字符就足够了:29 ^ 5 > 2 * 10 ^ 7。

换句话说,有 20511149 个可能的字符串,你可以用 29 个字母的 5 个字符组成。由于这超过 2000 万,您只需要 5 个字符即可生成 2000 万个唯一字符串。

我不确定是否存在 MySQL 函数来在给定特定约束的情况下生成唯一字符串,但您可以在应用程序中为此编写一个函数。如果您知道当前的记录数,那么您也知道您需要生成的下一个唯一字符串是什么。

【讨论】:

  • 请注意,假设这里的目标是某种不可轻易猜测的唯一代码,那么使用 5 个字符将是一个可怕的想法,因为几乎任何有人猜测的随机 5 个字符都是有效的;猜对的几率约为 98%。
  • 我在想一个 8 字符的代码,它易于阅读和输入(用于 SMS 促销),但会为猜测的代码提供足够的回旋余地。
【解决方案2】:

您可以将代码视为以 29 为基数的数字。因此,对于 N 代码,您将需要 ceil(log(N)),但 log 应以 29 为基数。所以在这种情况下,它将是5

要生成您需要的那些 ID,您可以使用一个函数,使用您可用的字符将数字从以 10 为底的数字转换为以 29 为底的数字。使用 this 等标准方法可以直接完成这项任务。

当然,您也可以使用反向函数,将基数为 29 的数字转换为小数。事实上,一旦您拥有这两个功能,您甚至可能不需要以 29 为底生成这些数字。

【讨论】:

  • 谢谢,但是那个链接比以前更让我困惑!
猜你喜欢
  • 1970-01-01
  • 2019-10-09
  • 2011-10-06
  • 1970-01-01
  • 1970-01-01
  • 2017-06-07
  • 2016-05-03
  • 2016-01-16
  • 2012-08-14
相关资源
最近更新 更多