如何在Scala中生成许多独特的随机字符串

时间:2016-05-06 03:34:46

标签: mysql performance scala unique

我希望生成许多随机字符串,这些字符串彼此唯一且在MySQL中是唯一的,并指定生成的数量为10,000。

我可以确保字符串在每次生成的字符串中都是唯一的,只需检查List[String]是否包含每次生成的字符串。
但是我不知道如何确保它在MySQL中的独特之处,我已经在MySQL中设置了独特的索引 ALTER TABLE Code ADD UNIQUE INDEX `codeUnique` (`code`);

但是如果在将数据插入MySQL时有独特的保证,那么插入就会失败 如果在每次插入时检查插入失败,当生成的数量很大时,生成将花费很长时间。

3 个答案:

答案 0 :(得分:2)

使用List.fillrandomUUID作为@Sudhir备注:

scala> List.fill(10000)(java.util.UUID.randomUUID.toString)
res0: List[String] = List(
  3c789851-975c-499d-8b0b-5bc60dee7497, 
  9511fb41-a42e-47d8-a5f3-ba1a6f3847f2,
  61263421-59de-4538-87c6-eb98ccf1e19d, 
 ...)

您可以通过将其转换为一组并检查尺寸来仔细检查它们是否是唯一的:

scala> List.fill(10000)(randomUUID.toString).toSet.size
res1: Int = 10000

答案 1 :(得分:1)

您只需使用Java的java.util.UUID.randomUUID.toString方法即可获得唯一的String。请参阅文档here。使用此方法获取重复键的可能性非常低(我从未获得重复键)。因此,您也不必维护集合。

如果您想使用自己的随机密钥生成器并希望确保它是唯一的,那么您不应该使用List[String]因为List可能有重复项并检查是否有密钥已经存在,你需要迭代每个元素,这是一个代价高昂的操作。您应该使用Set[String],然后使用Set的{​​{1}}方法检查密钥是否已经存在。

答案 2 :(得分:0)

循环10000个整数,取每个数字的MD5或SHA1。